几何列的SRID 0是什么?

时间:2014-08-07 16:51:11

标签: sql sql-server geospatial

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

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

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

2 个答案:

答案 0 :(得分:19)

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转换到另一个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。

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

答案 1 :(得分:0)

SRID是一种考虑到您测量的距离不是在平坦的无限平面上而是在椭圆形椭圆体上的方式。它们对地理数据类型有意义,但不适用于几何。因此,如果您正在进行地理计算(正如您对#34;与我所拥有的地理区域相比的声明),则创建地理点而不是几何点。为了对任何地理空间数据进行计算(例如"找到从这一点到另一点的距离"),所涉及的所有对象的SRID必须相同。

TL; DR:这是笛卡尔平面上的点吗?使用几何。地球上的重点是什么?使用地理。