因此,我有一个表,该表在我的数据库(空间)中包含3个字段(名称,纬度和经度)。我想基于这些字段(纬度和经度)创建一个几何/地理列,但不幸的是没有成功。
我的问题是:我该怎么办?
#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();
创建
Geometry
或Geography
字段,然后使用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
评论
sql-server-helper.com/sql-server-2008/…