几何列的SRID 0是什么?

zac*_*ach 12 sql sql-server geospatial

所以我将几何列添加到空间表中并使用一些msdn引用我最终将SRID指定为0,如下所示:

  update dbo.[geopoint] set GeomPoint = geometry::Point([Longitude], [Latitude], 0) 
Run Code Online (Sandbox Code Playgroud)

但是,我认为这是一个错误,但在更新列之前,0实际上是默认值= 4326?只要我在查询中将SRID指定为0,查询就会起作用,但是与我所拥有的地理字段相比,我得到了奇怪的结果...在sys.spatial_reference_systems中不存在SRID 0并且我无法进行查询挖掘它的任何信息.任何帮助,将不胜感激.

Joh*_*ell 21

SRID为0在技术上并不存在,它只是表示没有SRID - 即,如果您忘记设置它,则为默认值.因此,从技术上讲,您仍然可以执行距离,交集和所有其他查询,只要两组几何都具有SRID为0.如果您有一个SRID为0的几何字段和另一个具有实际存在的SRID的集合,你很可能会得到非常奇怪的结果.我记得在没有从空间查询得到任何结果的情况下抓住了我的头,并且SQL Server没有抱怨,只有0结果(对于什么值得Postgis实际上会失败,并且警告不匹配的SRID).

在我看来,你应该始终明确设置您的几何形状(或地区,这自然将永远是4326)的SRID,因为它不仅能防止奇怪的查询结果,但它意味着从一个坐标系到另一个你可以转换.能够从lat/lon(4326)飞行转换为Spherical Mercator(3857),如Google Maps/Bing中所用,以米为单位,或某些本地坐标系,如27700,英国国家网格,以米为单位,非常实用.SQL Server不就我所知,支持转换,从一个SRID到另一个,但由于空间类型基本上是CLR类型,有.NET库可用,您都不需要做,请参阅从一个SRID变换/项目的几何形状到另一个对一个例子.

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

UPDATE your_table SET newGeom = geometry::STGeomFromWKB(oldGeom.STAsBinary(), SRID);
Run Code Online (Sandbox Code Playgroud)

这将创建一个新列或在适当的位置执行:

UPDATE geom SET geom.STSrid=4326;
Run Code Online (Sandbox Code Playgroud)

其中4326只是一个SRID示例.

http://spatialreference.org/上有一个很好的SRID参考,尽管这与您在sys.spatial_reference_systems中找到的信息基本相同.