我在varchar(max)列中有一个充满WKT(众所周知的文本)的表。其格式与几何完全相同。因此,例如,其中一个值是:
POLYGON ((174.893529167059 -37.0260462162965,174.89351593407 -37.0260221329151,174.893508034056 -37.0260077002766,174.893444415879 -37.0258916500588,174.893416916056 -37.0258414997842,174.893481733297 -37.0258186834198,174.893492016755 -37.0258150663863,174.89349653254 -37.025823316032,174.893512415978 -37.0258522827285,174.893556883897 -37.0259333832477,174.893591032956 -37.0259956661343,174.893604265986 -37.0260197504078,174.893575149738 -37.0260300006258,174.893529167059 -37.0260462162965))
但是,我需要将此varchar(max)字段转换为几何字段。不幸的是,SQL Server需要有一些其他信息才能做到这一点,因此我不能只将字段的类型从varchar(max)更改为几何。
我在同一个表格中创建了一个空白几何列(MyGeometry),但我没有尝试转换它。这是我的代码(其中2193是我正在处理的CRS)。 WKT是我的varchar(max)字段,MyGeometry是我的新几何字段。
UPDATE MY_TABLE
SET MyGeometry = geometry::STPolyFromText('' + WKT + '', 2193)
编辑 - 目前回来说WKT无效(System.FormatException 24111 - 输入无效)。
这很奇怪,因为它与我的风格如何完美匹配。
答案 0 :(得分:1)
这样做: 更新MY_TABLE SET MyGeometry =几何:: STGeomFromText(“POLYGON((174.893529167059 -37.0260462162965,174.89351593407 -37.0260221329151,174.893508034056 -37.0260077002766,174.893444415879 -37.0258916500588,174.893416916056 -37.0258414997842,174.893481733297 -37.0258186834198,174.893492016755 -37.0258150663863,174.89349653254 -37.025823316032,174.893512415978 -37.0258522827285,174.893556883897 - 37.0259333832477,174.893591032956 -37.0259956661343,174.893604265986 -37.0260197504078,174.893575149738 -37.0260300006258,174.893529167059 -37.0260462162965))',0)
您可以将'POLYGON ....'更改为VARCHAR(MAX)字段。
最后0,SRID仅在您使用地理位置时才相关。
答案 1 :(得分:0)
您也可以尝试: -
UPDATE MY_TABLE SET MyGeometry = GEOMETRY::STGeomFromText('POLYGON ((174.893529167059 -37.0260462162965,174.89351593407 -37.0260221329151,174.893508034056 -37.0260077002766,174.893444415879 -37.0258916500588,174.893416916056 -37.0258414997842,174.893481733297 -37.0258186834198,174.893492016755 -37.0258150663863,174.89349653254 -37.025823316032,174.893512415978 -37.0258522827285,174.893556883897 -37.0259333832477,174.893591032956 -37.0259956661343,174.893604265986 -37.0260197504078,174.893575149738 -37.0260300006258,174.893529167059 -37.0260462162965))',4326);
传递的SRID值应为4326而不是0
您可以查看以下网址。我在另一个类似的问题(较旧的帖子)中发现了这些信息,因此粘贴它没有任何更改
我找到了解决方案,SQL Server Spatial Tools
http://sqlspatialtools.codeplex.com/
以下是解决我问题的方法。
IsValidGeographyFromText(string inputWKT,int srid)
检查输入WKT是否可以代表有效的地理位置。此功能要求WTK坐标值按此顺序为经度/纬度值,并且提供有效的地理SRID值。即使在边缘条件下(即经度/纬度坐标与纬度/经度相反),此函数也不会抛出异常。
SqlGeography MakeValidGeographyFromText(string inputWKT,int srid)
将输入WKT转换为有效的地理实例。此功能要求WKT坐标值按此顺序为经度/纬度值,并且提供有效的地理SRID值。