FME Version
Symptom
FME log file warning: MS SQL Server (Spatial) Writer: Failed to write a feature of type `<name>' to the database.
Full error message:
MS SQL Server (Spatial) Writer: Failed to write a feature of type "name" to the database. Provider error `A .NET Framework error occurred during execution of user-defined routine or aggregate "geography": System.ArgumentException: 24200: The specified input does not represent a valid geography instance.System.ArgumentException: at Microsoft.SqlServer.Types.SqlGeography.ConstructGeographyFromUserInput(GeoData g, Int32 srid) at Microsoft.SqlServer.Types.SqlGeography.GeographyFromBinary(OpenGisType type, SqlBytes binary, Int32 srid).'. SQL Command `DECLARE @WKB varbinary(max); SET @WKB = ?; DECLARE @SRID INTEGER; SET @SRID = ?; DECLARE @G geography; IF @WKB = '' SET @G = NULL ELSE SET @G = geography::STGeomFromWKB(@WKB,@SRID); INSERT INTO [United States] ([STATEFP], [STATENS], [STUSPS], [NAME], [LSAD], [MTFCC], [UR], [FUNCSTAT], [SpatialData]) VALUES (?, ?, ?, ?, ?, ?, ?, ?, @G)'
Cause
The issue is that SQL Server doesn't like the structure of the geometry you're trying to load. This is apparently a relatively common issue with SQL Server Geography - which is very fussy about the geometry structure. When loading spatial data into the SQL Server Geography column, the data must be clean with no self-intersections, duplicate points, spikes, or other inconsistencies. Apparently, this is also a relatively common issue when loading US Census data.
Resolution
FME has several transformers that can be used to clean-up the geometry: SpikeRemover, SelfIntersector, Generalizer (Thin).
Alternatively, you can use the MakeValid() SQL Server tool.
Additional information on using the MakeValid() command and how to set this up as a post-processing step is detailed in FME is loading features with invalid geometries into my Database.
Comments
0 comments
Please sign in to leave a comment.