gpt4 book ai didi

sql - 几何列的 SRID 0 是什么?

转载 作者:行者123 更新时间:2023-12-02 08:26:11 25 4
gpt4 key购买 nike

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

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

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

最佳答案

从技术上讲,SRID 0 并不存在,它只是意味着没有 SRID——即,如果您忘记设置它,则为默认值。因此,从技术上讲,您仍然可以执行距离、交集和所有其他查询,只要两组几何图形的 SRID 均为 0。如果您有一个几何图形字段的 SRID 为 0,而另一组几何图形的 SRID 实际存在,你很可能会得到非常奇怪的结果。我记得有一次在这种情况下,当没有从空间查询中得到任何结果时,我感到很挠头,而且 SQL Server 没有提示,只有 0 个结果(对于值得的东西,Postgis 实际上会失败,并发出有关不匹配 SRID 的警告)。

在我看来,您应该始终显式设置几何图形(或地理区域,自然总是 4326)的 SRID,因为它不仅可以防止奇怪的查询结果,而且意味着您可以从一个坐标系转换为其他。能够即时从纬度/经度 (4326) 转换为球面墨卡托 (3857),如 Google map /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 中找到的信息本质上相同。

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com