从更新查询中的varchar(max)获取几何

时间:2016-08-02 06:12:17

标签: sql-server geometry

我在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 - 输入无效)。

这很奇怪,因为它与我的风格如何完美匹配。

2 个答案:

答案 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值。