3

我在 SQL Server 2008 R2 数据库中有一个表。它包含 X、Y 和 Shape 列,用于存储用于经度和纬度的数字(38、8)以及用于几何类型的计算列。这个想法是每当插入 X 和 Y 时,Shape 列应该自动填充正确的几何数据。

X 和 Y 已填充。但是,我没有成功指定 Shape 列。在 SQL Server Management Studio 中,当我在计算列规范公式中填充以下任一代码时,它给了我验证公式失败的错误:

(STGeomFromText('POINT (' + CAST([x] as varchar(32)) + ' ' + CAST([y] as varchar(32)) + ')', 4283))

OR

([STGeomFromText]('POINT (' + CAST([x] as varchar(32)) + ' ' + CAST([y] as varchar(32)) + ')', 4283))

谁能帮我一把?谢谢!

干杯,亚历克斯

4

2 回答 2

4

我实际上是被这篇文章启发的。

希望它对其他有同样问题的人有所帮助。

ALTER TABLE LOCATION
ADD Shape AS (CONVERT(GEOMETRY, CASE WHEN x<> 0
                                    AND y<> 0
                               THEN GEOMETRY::STGeomFromText('POINT('
                                                          + CONVERT(VARCHAR, x)
                                                          + ' '
                                                          + CONVERT(VARCHAR, y)
                                                          + ')', 4238)
                               ELSE NULL
                          END))
于 2012-06-21T06:22:09.327 回答
3

稍微好一点的解决方案:

ALTER TABLE LOCATION
ADD Shape AS (CONVERT(GEOMETRY, CASE WHEN x IS NOT NULL AND y IS NOT NULL
                               THEN GEOMETRY::Point(x,y,4238)
                               ELSE NULL
                          END))

这节省了两个不必要的转换(从 int 到 varchar),并且还允许赤道(0° 纬度)和本初子午线(0° 经度)相交的点也被认为是“有效的”。

于 2014-06-16T06:49:43.457 回答