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

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

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

评论

sql-server-helper.com/sql-server-2008/…

#1 楼

您可以添加这样的计算列

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


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

评论


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

–都铎王朝
2012年3月2日在6:49



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

–都铎王朝
2012年3月2日在7:28

#2 楼

看起来像您想要STGeomFromText()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使用您的经/纬度值填充该字段。

评论


改为使用以下方法会有什么区别? SET @g = geometry :: STPointFromText('POINT(100 100)',0);

–awesomo
2012年3月1日18:32



@awesomo-是的,实际上,您可以使用那个。

–乍得·库珀
2012年3月1日18:59

#3 楼

SQL Server 2012

您可以这样操作,

SELECT geography::Point(lat, long, 4326)


有关更多信息,请参见我在数据库管理员中的文章“ SQL Server Point Constructor”。或ST_Point(x,y)的版本?“

评论


如果Point的构造函数采用x,y参数,则您将需要像这样切换顺序:geography :: Point(long,lat,4326)。经度是x,纬度是y。

– carusot42
20 Dec 1'在15:53

#4 楼

如果使用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)


评论


我对使用此方法感到担心,因为它会丢失位置精度。

–普拉文·库玛(Praveen Kumar)
20 Dec 18'在3:49