几何列的SRID 0是什么意思?

20

我向空间表添加了几何列,并参考了一些 MSDN 文档,最终将 SRID 指定为 0,代码如下:

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

然而,我认为这是一个错误,在更新列之前,0实际上是默认值= 4326吗?只要在查询中指定SRID为0,查询就起作用,但与我拥有的地理字段相比,结果很奇怪... SRID 0不存在于sys.spatial_reference_systems中,我也没有找到任何相关信息。任何帮助将不胜感激。

2个回答

34

SRID为0在技术上并不存在,它只是表示没有SRID - 也就是说,如果您忘记设置它,它将使用默认设置。因此,从技术上讲,只要两组几何图形都有SRID为0,您仍然可以执行距离、交集和所有其他查询。如果您有一个带有SRID为0的几何字段和另一组具有实际存在的SRID的几何图形,则很可能会得到非常奇怪的结果。我记得曾经在这种情况下进行空间查询时,没有得到任何结果,而SQL Server没有抱怨,只是返回了0个结果(Postgis会失败,并显示有关不匹配SRIDs的警告)。

我认为,您应该始终明确设置几何图形的SRID(或地理信息,它们自然将始终为4326),因为这不仅可以防止奇怪的查询结果,而且意味着可以将一个坐标系转换为另一个坐标系。能够在lat/lon(4326)与Google Maps/Bing中使用的Spherical Mercator(3857)之间进行即时转换,后者以米为单位,或者像英国国家网格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。

有一个很好的SRID参考网站http://spatialreference.org/,但这基本上是与sys.spatial_reference_systems中找到的相同信息。


你刚才接受了这个答案,然后又取消了接受(显然这是你的权利)。我问这个问题是因为我的编辑同时消失了,所以我不知道是SO出现了临时故障,还是你认为这个答案在某些方面存在缺陷。 - John Powell
谢谢,重新编码列就可以了 :-) -- 我之前接受了然后取消了再重新接受是因为我本来要发跟进问题的,但是我现在没有数据可以问下一个问题了 -- 我最初添加几何列的原因是使用地理信息运行多个点半径计数时得到了非常奇怪的结果,而使用几何信息(SRID为0)的结果实际上只有那个结果的10%... 但是我会等待重新转换列之后再进行操作。 - zach
设置SRID绝对是个好主意,但几何与地理的问题又是另一个问题。如果你还没有阅读过的话,我建议你阅读这篇文章:http://msdn.microsoft.com/en-us/library/bb964711.aspx。 - John Powell
明白了,一旦我重新编码完成,如果仍然看到奇怪的结果,我会跟进的。如果在我的目的范围内在正负5%之间,那就可以了,使用0 SRID时我达到了+120% :P。 - zach
MSDN文档声称:
为了返回非空结果,geometry1和geometry2必须具有相同的空间参考标识符(SRID)。否则,该方法将返回 NULL。
- Nenad
显示剩余2条评论

1

SRID是一种考虑到你测量的距离不在一个平面上而是在一个椭球体上的方法。它们对于地理数据类型有意义,但对于几何数据类型则没有意义。因此,如果您正在进行地理计算(如您所述的“与我拥有的地理字段相比较”),请创建地理点而不是几何点。为了对任何地理空间数据进行计算(例如“找到从这个点到另一个点的距离”),所有涉及对象的SRID需要相同。

简而言之:点是否在笛卡尔平面上?使用几何。点是否在地球上?使用地理。


1
我非常确定这不正确。几何和地理都有STSrid方法(http://msdn.microsoft.com/en-us/library/bb933851.aspx和http://msdn.microsoft.com/en-us/library/cc280766.aspx)。有许多使用笛卡尔平面的投影SRID的示例,例如UTM,州平面等。此外,请纠正我如果我错了,我相信您可以使用地理(以及几何)来进行投影坐标,但是您不能使用几何来进行大地坐标。 - sovemp
我很愿意在这里犯错。但是出于教育的精神,一个人在哪里可以找到几何示例中SRID的定义?也就是说,SRID 13和23的WKT在哪里?它们肯定不在sys.spatial_reference_systems中,而且谷歌搜索也没有找到任何信息。 - Ben Thul
是的,那些不是有效的SRID,我认为它们只是自定义的SRID。我进行了一个实验来检查,我实际上能够将地理SRID(在这种情况下为4326)插入到几何列中,这对我来说非常奇怪。然而,这确实表明我上面说的部分是不正确的。尽管如此,我仍然会反驳你的观点,即对于几何类型使用SRID没有意义,因为在投影的SRID中的任何操作都只是普通的欧几里得几何。 - sovemp

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接