我正在使用以下代码将一系列点(从ESRI地理服务接收)转换为Geography
。它可以在99%的情况下工作,但有时会失败。我不确定我可以在此处附加带有字符串的文件(〜300kb文本),因为它很大,可以作为文本发布。
DECLARE @Route Geography
BEGIN TRY
SELECT @Route = geography::STGeomFromText('LINESTRING(' + @i_Route + ')', 4269);
END TRY
BEGIN CATCH
DECLARE @error Int, @message NVarChar(4000), @xstate Int;
SELECT @error = ERROR_NUMBER(), @message = ERROR_MESSAGE(), @xstate = XACT_STATE();
PRINT CAST(@error AS NVarChar(10)) + ' - ' + @message
END CATCH
偶尔会出现以下错误:
6522-执行用户定义的例程期间发生.NET Framework错误 或汇总“地理位置”:System.ArgumentException:24200: 指定的输入不代表有效的地理实例。采用 MakeValid将实例转换为有效实例。注意 MakeValid可能导致空间实例的点移动 略。 System.ArgumentException:在 Microsoft.SqlServer.Types.SqlGeography..ctor(GeoData g,Int32 srid)
在 Microsoft.SqlServer.Types.SqlGeography.GeographyFromText(OpenGisType 类型,SqlChars标记的文本,Int32 srid)
不确定在哪里必须使用MakeValid()
。我尝试将其添加到行尾,但结果没有差异,相同的错误。