从x和y字段创建地理/几何列-SQL Server 2008


26

我是SQL Server 2008的新手,希望您能理解我的问题/需求。

因此,我有一个表,该表在我的数据库(空间)中包含3个字段(名称,纬度和经度)。我想基于这些字段(纬度和经度)创建一个几何/地理列,但是不幸的是没有成功。

我的问题是:我该怎么做?


Answers:


36

您可以像这样添加计算列

alter table yourTable add geographyColumn as geography::STGeomFromText('POINT('+convert(varchar(20),Long)+' '+convert(varchar(20),Lat)+')',4326)

我添加了lng或lat的转换,因为我将经度和纬度存储为数字。


3
感谢您的回答,我设法使用以下命令解决了我的问题:更新yourdatabase SET geometry_column = geometry :: Point([ColX],[ColY],SRID)
Tudor

3
是否可以为此创建触发器?就像当您使用信息填充字段(X和Y列)时,上述脚本将运行。
2012年

10

看起来您想要STGeomFromText()or STPointFromText()SQL方法:

DECLARE @g geography;
SET @g = geography::STGeomFromText('POINT(-122.34900 47.65100)', 4326);
SELECT @g.ToString();

要么

DECLARE @g geography;
SET @g = geography::STPointFromText('POINT(-122.34900 47.65100)', 4326);
SELECT @g.ToString();

创建您的GeometryGeography字段,然后使用SQL使用您的经/纬度值填充该字段。


相反,使用以下方法会有什么区别……DECLARE @g geometry; SET @g = geometry::STPointFromText('POINT (100 100)', 0);
awesomo

@awesomo-是的,实际上,您可以使用那个。
乍得·库珀


1

如果在使用该CONVERT(VARCHAR,语句时对原始的Long / Lat值进行舍入。

尝试使用:

GeoData = geometry:: STGeomFromText('POINT(' + CAST(CAST(X AS decimal(13, 2)) AS varchar) + ' '  + CAST(CAST(Y AS decimal(13, 2)) AS varchar) + ')', 4326)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.