更新 sql server 中的地理列与常规字段(varchar ....)有什么不同吗?您能否提供一份示例声明来执行此操作。谢谢。
我不确定这是否是您正在寻找的答案 - 但正如我所说,主要区别在于更新“常规字段”时,您通常直接提供新值 - 例如:
UPDATE mytable SET name = 'John' WHERE id = 1
更新地理列时,您可能无法直接提供该值(因为它是一个非常长的十六进制数字,它对地理信息进行编码),但您需要从其他一些值(可以但不必)计算它是同一个表的列),例如:
UPDATE mytable SET gps=geography::STPointFromText('POINT(' + lng + ' ' + lat + ')', 4326)
其中
lng
和 lat
是以“人类可读”格式指定 GPS 坐标的 varchar 值(如 lat = '48.955790'
、lng = '20.524500'
) - 在这种情况下,它们也是 mytable
的列。
如果您有 Latitude 和 Longitude 作为小数,您可以更新地理列,如下所示:
DECLARE @latitude DECIMAL(15,6)
,@longitude DECIMAL(15,6);
SET @latitude = 29.938580;
SET @longitude = -81.337384;
UPDATE Properties
SET Geog = GEOGRAPHY::Point(@latitude, @longitude, 4326)
WHERE PropertyID = 858;
4326 是代表 WGS 84(世界大地测量系统 1984)的空间参考标识符。它基本上是用于平坦地球测绘或圆形地球测绘的特定椭球体。