2016-08-02 81 views
0

我已经有了一个完整的WKT(熟知文本)在一个varchar(max)列的表获取从VARCHAR(最大值)的几何形状。这与格式完全相同。所以,例如,其中一个值是:在更新查询

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)更改为geometry。

我在同一个表(MyGeometry)中创建了一个空白几何列,但我试图转换它失败。这是我的代码(其中2193是我正在处理的CRS)。 WKT是我的varchar(max)字段,MyGeometry是我的新几何字段。

UPDATE  MY_TABLE 
SET    MyGeometry = geometry::STPolyFromText('' + WKT + '', 2193) 

编辑 - 当前回来说WKT无效(System.FormatException 24111 - 输入无效)。

,因为它与其他一些投入我在它是如何完美的风格相匹配这是奇怪的。

回答

1

这样做: UPDATE 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

UPDATE MY_TABLE SET MyGeometry = geometry :: STPolyFromText(WKT,2193) – cungiderm

+0

WKT上不需要双引号。 WKT已经是一个文本。 (假设WKT是你的列名) – cungiderm

+0

已经试过'UPDATE MY_TABLE SET MyGeometry = GEOMETRY :: STPolyFromText(WKT,2193)'(还有STGeomFromText),但仍然没有运气。也许我在那里有一些无效的几何图形,但我怀疑它。 – user25730

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的空间工具

http://sqlspatialtools.codeplex.com/

以下是方法解决我的问题。

IsValidGeographyFromText(串inputWKT,INT SRID)

检查是否一个输入WKT可以代表一个有效的地理。该函数要求WTK坐标值是经度/纬度值,并按照该顺序提供有效的地理SRID值。该功能即使在边缘条件下也不会抛出异常(即经度/纬度坐标与纬度/经度相反)。

SqlGeography MakeValidGeographyFromText(串inputWKT,INT SRID)

转换一个输入WKT到一个有效的地理实例。此功能要求WKT坐标值是经度/纬度值,并按顺序提供有效的地理SRID值。

+0

您的问题是否解决? – Webdev