因此,我向空间表中添加了几何列,并使用了某些msdn引用,最终将SRID指定为0,如下所示:

  update dbo.[geopoint] set GeomPoint = geometry::Point([Longitude], [Latitude], 0)


但是,我相信这是一个错误,但是在必须更新列之前,0实际是默认值= 4326吗?只要我在查询中将SRID指定为0,该查询就可以工作,但是与我拥有的地理位置字段相比,我得到的结果很奇怪... sys.spatial_reference_systems中不存在SRID 0,并且我无法挖掘有关的任何信息。任何帮助,将不胜感激。

最佳答案

从技术上讲,SRID为0并不存在,仅表示没有SRID,即如果您忘记设置它,则为默认值。因此,从技术上讲,只要两组几何的SRID为0,您仍然可以执行距离,交集和所有其他查询。如果您的一个几何字段的SRID为0,而另一组的SRID实际上存在,您很可能会得到非常奇怪的结果。我记得在这种情况下,即使没有从空间查询中获得任何结果时,我也挠挠过头,SQL Server也没有抱怨,只有0个结果(对于值得付出的代价,Postgis实际上会失败,并发出关于不匹配SRID的警告)。

在我看来,您应该始终明确设置几何(或地理,自然总是4326)的SRID,因为它不仅可以防止出现奇怪的查询结果,而且还意味着您可以从一个坐标系转换为另一个坐标系。能够即时从经纬度(4326)转换为球形墨卡托(3857),如以米为单位的Google Maps / Bing或其他局部坐标系(例如27700,British National Grid)以米为单位,可能非常有用。据我所知,SQL Server不支持从一种SRID转换为另一种SRID,但是由于空间类型本质上是CLR类型,因此您可以根据需要使用.NET库,请参见Transform/ Project a geometry from one SRID to another

如果您决定更改几何形状,则可以执行以下操作:

UPDATE your_table SET newGeom = geometry::STGeomFromWKB(oldGeom.STAsBinary(), SRID);


这将创建一个新列或就位:

UPDATE geom SET geom.STSrid=4326;


其中4326只是示例SRID。

尽管与sys.spatial_reference_systems中的信息基本相同,但http://spatialreference.org/上的SRID有很好的参考。

关于sql - 几何列的SRID 0是多少?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25188020/

10-10 23:47