Question

FILEGDB Writer: How to avoid change of coordinate value precision


Userlevel 2
Badge +17
Hi,

 

 

I have an XML document containing coordinate values having 3 decimal places: e.g. <X>259.042</X><Y>1521.734</Y>. My workspace transforms (X, Y) values to point geometries with 2DPointReplacer and writes those into a File Geodatabase with FILEGDB writer. Translation finished successfully, but when I confirmed the GDB with the Inspector, I noticed that the precision of coordinate values has been changed like this: Source XML: (259.042, 1521.734) Destination GDB: (259.0419921875,1521.73400878906)   In addition "XY Tolerence" parameter of the FILEGDB writer is set to default (i.e. blank), and the environment is: FME 2013 SP2 Build 13499 Win32.   When I wrote the same data into a shape file via the same workspace for comparison, such a change has not been occurred in the shape file. So I guess the FILEGDB writer caused the change. I can modify the precision using the CoordinateRounder after reading GDB, but ideally, of course, I want to avoid the change when writing. Does anyone know the reason for the change, and how to avoid it?   Thanks in advance.

 

 

Takashi

11 replies

Userlevel 4
Badge +13
Hi Takashi,

 

Just an idea : what happens if you specify a tolerance instead of letting the FGDB API to decide it for you?

 

 

Itay
Userlevel 2
Badge +17
Hi Itay,   Thank you for the reply. I made some tests with various XY tolerance settings ("0.01", "0.001", "0.0001" etc.), but I got always the same result unfortunately (:-(   I uploaded simplified data and workspaces here: data.xml writer.fmw: read XML, create points and write GDB and Shape reader.fmw: read and inspect GDB and Shape   "writer.fmw" will reproduce the issue. Please try it If you are interested in this issue.

 

 

Takashi
Userlevel 4
Badge +13
Hi Takashi,

 

 

I have had a look at your data and also wrote it to a ArcObjects gdb with the same results.

 

I can only conclude what you have stated previously, the difference is created when written to the gdb, so obviously it is a matter that is incoorporated in the gdb.

 

 

Itay
Userlevel 2
Badge +17
Hi Itay,

 

 

Thanks for your suggestions.

 

So... it seems that this problem cannot be avoided at present. According to checking the data properties using the ArcCatalog, it seems that the GDB data written with XY tolerance = 0.001 is treated in the same tolerance by the ArcGIS. Since the client will use the GDB data with the ArcGIS, it may not be a practical problem.

 

Regards, Takashi
Hi Takashi,

 

 

This seems to be a restriction or bug in the FILEGDB writer.

 

 

There are 2 possible workarounds:

 

1) Use the GEODATABASE_FILE writer

 

or

 

2) Create the FileGeodatabase and the FeatureClass using ArcCatalog and write then in this FeatureClass with the FILEGDB writer

 

 

Regards,

 

Thomas
Userlevel 2
Badge +17
Hi Thomas,   Thanks for your suggestions. I made tests on the two workarounds, but I couldn't get expected results. I uploaded test workspaces including those workarounds here, for your information. data.xml

 

data3.gdb: empty geodatabase including pre-defined feature class writer2.fmw: read XML, create points and write GDB and Shape reader2.fmw: read and inspect GDB and Shape

 

 

This issue might be a restriction of the File Geodatabase format itself.

 

I also requested Safe support, hoping they can provide a solution.

 

 

Regards,

 

Takashi
Userlevel 2
Badge +17
Safe support suggested 3 workarounds against my request.

 

 

1) Set the coordinate system as it will generally use the 'best' default precision

 

I specify LL84 or LL-JGD2K, output geometreis will have indeed 3 decimal points precision. However, the coordinate system of the source data is a plane rectangular CS (JGD2K-**), and  I couldn't get preferable result in the actual coordinate system.

 

 

2) Use GDB (ArcObjects) writer with a template file

 

I couldn't find how to create a template file for the writer, so I have not confirm this workaround yet.

 

 

3) Use GDB (ArcObjects) writer with specifying X origin, Y origin, X,Y scale parameters

 

After specifying X origin = 0, Y origin = 0, X,Y scale = 1000, I got output  with preferable coordinate precision i.e. 3 decimal places.

 

It can be a solution for my current project :-)

 

 

Thanks again for your helps.

 

 

Takashi
Userlevel 2
Badge +17
Sharing the information.

 

Safe support additionally provided me the information about how to create XML template file for the GDB (ArcObjects) writer: Creating Geodatabases based on existing Geodatabases

 

 

But XML document exporting functionality seems to be supported in "Standard" or higher ArcGIS license. Since my current ArcGIS license is "Basic", I still can't confirm this way.

 

 

Takashi
Hi

 

 

We had the same problem and the workaround 3) solves only part of the problem.

 

If you create with ArcGIS a FGDB you can set the resolution and tolerance. With FME the tolerance is derived from the resolution (as far as I know).  

 

 

ESRI Help:
  • X/Y resolution: The precision with which coordinates within a feature class are recorded

     

     
  • X/Y tolerance: A cluster tolerance used to cluster features with coincident geometry; used in topology, feature overlay, and related operations

I tried the xml export and it didn't work for me. Do you know if there is a possibility to set the ESRI tolerance independent from the resolution?

 

 

thanks for any hint

 

felix
Userlevel 2
Badge +17
Hi felix,

 

 

The tolerance seems to be determined depending on the resolution when the feature class is created via FME GDB (ArcObjects) writer.

 

In my testing, the resolution was set to 1 / X,Y Scale parameter of the writer, the tolerance always became twice the resolution.

 

X,Y Scale | Resolution | Tolerance

 

1000 | 0.001 | 0.002

 

5000 | 0.0002 | 0.0004

 

10000 | 0.0001 | 0.0002

 

50000 | 0.00002 | 0.00004

 

100000 | 0.00001 | 0.00002

 

 

I have no idea how to set the tolerance independent from the resolution.

 

Additionally, even if creating new feature class via ArcCatalog, the tolerence and the resolution seem to be related each other. I guess there is a restriction like "the tolerance has to be equal to or greater than twice the resolution".

 

 

Takashi
Badge +1

Hi @takashi,

I see this is an old post, but nevertheless could you please tell me if you have some hint how to avoid this coordinate value change?

I have the same problem in FME 2019 and difference in coordinate values is not small. Problem is described on Coordinates precision changed when writting to ESRI FGDB.

Thanks in advance!

Reply