Skip to main content

Hi -

I have been getting errors with a translation from GE Smallworld (4.2) to ArcSDE (9.3.1) that is exporting out polygon features. I would like to understand why these errors are not just logged so that the translation can continue. I have set the Workbench Writer Parameter "Ignore Failed Features" to Yes for the SDE database, but it still fails. I have tried a few different transformers (self-intersector, geometry validator, etc.) to try and either fix the geometry or at the very least, remove it from the list of features to be exported to try and keep the process going.

Does anyone have any suggestions on how to either trap this error so that it can continue or possibly even fix the geometry so that it can be exported? Below is a partial section of the log showing the fatal error. I am using FME 2011 SP3, Build 6529.

Any suggestions would be most appreciated.

Thanks,

Scott Cifelli

IBM Global Services, National Grid Account

stcifell@us.ibm.com

scott.cifelli@nationalgrid.com

Error from the log file:

2013-03-01 13:48:25| 16.0| 0.0|ERROR |Invalid feature detected. A closed loop was expected in the geometry but searching went to the end of the coordinates and was not found. (The corrupt geometry was discovered by file '.\\stfline3.cpp' at line '1778'.)

2013-03-01 13:48:25| 16.0| 0.0|STATS |Storing feature(s) to FME feature store file `\\\\nyhcbgis09\\gis\\ngrid\\admin_output\\SDE_Landbase\\1_GIS_to_SDE_LOAD_Landbase_log.ffs'

2013-03-01 13:48:25| 16.0| 0.0|FATAL |+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

2013-03-01 13:48:25| 16.0| 0.0|FATAL |Feature Type: `landbase.nm_boundary_polygon_subdivision'

2013-03-01 13:48:25| 16.0| 0.0|FATAL |Attribute(string): `fme_geometry' has value `fme_donut'

2013-03-01 13:48:25| 16.0| 0.0|FATAL |Attribute(string): `rwo_id' has value `{1138336,711718750,533246117}'

2013-03-01 13:48:25| 16.0| 0.0|FATAL |Attribute(string): `sworld_geom_type' has value `sworld_area'

2013-03-01 13:48:25| 16.0| 0.0|FATAL |Attribute(string): `sworld_geometry{0}.sworld_geom_type' has value `sworld_area'

2013-03-01 13:48:25| 16.0| 0.0|FATAL |Attribute(string): `sworld_geometry{0}.sworld_name' has value `subdivision'

2013-03-01 13:48:25| 16.0| 0.0|FATAL |Attribute(string): `sworld_geometry{0}.sworld_sector{0}.sworld_sector_type' has value `sworld_line'

2013-03-01 13:48:25| 16.0| 0.0|FATAL |Attribute(string): `sworld_geometry{0}.sworld_type' has value `sworld_area'

2013-03-01 13:48:25| 16.0| 0.0|FATAL |Attribute(string): `sworld_name' has value `subdivision'

2013-03-01 13:48:25| 16.0| 0.0|FATAL |Attribute(string): `sworld_sector{0}.sworld_sector_type' has value `sworld_line'

2013-03-01 13:48:25| 16.0| 0.0|FATAL |Attribute(string): `sworld_table_name' has value `landbase.nm_boundary_polygon'

2013-03-01 13:48:25| 16.0| 0.0|FATAL |Attribute(string): `sworld_type' has value `sworld_area'

2013-03-01 13:48:25| 16.0| 0.0|FATAL |Geometry Type: Donut (8)

2013-03-01 13:48:25| 16.0| 0.0|FATAL |Total Number of Coords: 19 -- Coordinate Dimension: 2 -- Coordinate System: `'

2013-03-01 13:48:25| 16.0| 0.0|FATAL |Number of Shells: 2

2013-03-01 13:48:25| 16.0| 0.0|FATAL |Outer Shell -- Part Number: 0 -- Number of Coordinates: 18

2013-03-01 13:48:25| 16.0| 0.0|FATAL | (592519346,769049520) (592523618,769011935) (592525057,768999864) (592531586,768947242) (592534573,768921737)

2013-03-01 13:48:25| 16.0| 0.0|FATAL | (592538854,768885176) (592498277,768879762) (592470321,768875954) (592408076,768876485) (592377477,768901448)

2013-03-01 13:48:25| 16.0| 0.0|FATAL | (592312553,768921842) (592312097,768983915) (592364057,769000856) (592386943,769034718) (592412345,769037516)

2013-03-01 13:48:25| 16.0| 0.0|FATAL | (592452287,769041882) (592475831,769044574) (592519346,769049520)

2013-03-01 13:48:25| 16.0| 0.0|WARN |Feature contains invalid holes -- Holes must have at least 4 coordinates

2013-03-01 13:48:25| 16.0| 0.0|FATAL |Inner Shell -- Part Number: 1 -- Number of Coordinates: 1

2013-03-01 13:48:25| 16.0| 0.0|FATAL | (592519346,769049520)

2013-03-01 13:48:25| 16.0| 0.0|FATAL |===========================================================================

2013-03-01 13:48:25| 16.0| 0.0|ERROR |Invalid feature detected. A closed loop was expected in the geometry but searching went to the end of the coordinates and was not found. (The corrupt geometry was discovered by file '%1' at line '%0'.)

2013-03-01 13:48:25| 16.0| 0.0|ERROR |A fatal error has occurred. Check the logfile above for details

2013-03-01 13:48:25| 16.0| 0.0|INFORM|Pipeline empty2 (should never occur)

2013-03-01 13:48:25| 16.0| 0.0|INFORM|Emptying factory pipeline

?

Could it be that it is SmallWorld that returns a geometry that FME considers fatally invalid in some way?

 

 

I would try to redirect all the output data to the Inspector rather than to the SDE writer, to see what happens.

 

 

David
It looks from the log file that there is a polygon feature with an invalid inner ring (hole) that only has 1 coordinate. 

 

 

I would have thought the GeometryValidator would pick this up. I'm using FME 2012 and this has GeometryOGCValidator, which I would expect to pick this issue up. If you're limited to 2011 and the GeometryValidator isn't working, you might have to do something like: 

 

  1. Test for a donut polygon with a tester (eg. fme_geometry = fme_donut).
  2. Redirect any polygons with donuts identified above to a DonutHoleExtractor.
  3. Redirect the Holes output from the DonutHoleExtractor to a tester and check the hole is a polygon (eg. fme_geometry = fme_polygon) and perhaps raise an "Invalid" flag (Y or N) with an attributecreator.
  4. Use a featuremerger to join back the result of the test to the main feature using an unique id.
  5. Reject an features where the flag is "Y" and only direct the valid ones to the sde writer.
Regards

 

 

John
I second John's suggestion.

 

 

Also, consider if it is at all possible to install FME 2013 (you can have both 2011 and 2013 installed on the same machine), as the GeometryValidator has really improved a lot lately.

 

 

Even if you are bound to use FME2011 for production, it could be beneficial to use FME2013 just to isolate the troublesome geometries so that you could correct them in SmallWorld before exporting with FME2011.

 

 

David

Reply