Sql Server 空间数据类型几何、STDistance 和单位:如何获取米?

4

我正在使用Sql server 2012和Google地图客户端,我使用SRID 3785,因为它是地图所使用的墨卡托投影。我使用几何点数据类型来存储位置。我读到几何比地理更快。但是当我尝试计算两个点之间的距离并使用STDistance时,我得到了一个以十进制度为单位的距离...这很好...但我真的需要将其转换为米来显示给用户... 因此,当您知道您的SRID,当您知道您要精确定位的地球上的位置时,如何将十进制度的距离转换为米? 我知道地理学涉及米...但是如何从几何距离计算中获得米?我真的想知道在地理类型出现之前开发人员是如何做的... 谢谢!!


你确定这个 SRID 吗?当我查询本地 2012 实例的 sys.spatial_reference_systems 时,我没有看到这个 ID... - Ben Thul
@Ben Thul - 你在那里找不到该SRID的原因有两个:1.) 因为它应该是3857,而不是3785 (http://alastaira.wordpress.com/2011/01/23/the-google-maps-bing-maps-spherical-mercator-projection/) 2.) 因为sys.spatial_reference_systems表仅记录大地空间参考系统 - EPSG:3857是一个投影参考系统。 - Alastair Aitchison
2个回答

7
听起来您有几个问题:
首先,Google Maps投影的正确EPSG代码是3857,而不是3785。请参阅我的博客文章http://alastaira.wordpress.com/2011/01/23/the-google-maps-bing-maps-spherical-mercator-projection/,了解该代码背后相当复杂的历史。
其次,如果您正确使用该SRS,则您的坐标应已经以米为单位。例如,在EPSG:3857中,伦敦的大本钟坐标应该约为(-13900, 6710330)。如果您有像(51.5, -0.12)这样的坐标,则这些是WGS84经纬度,并且您应该使用具有SRID:4326的地理数据类型。
第三,3857是Google Maps用于显示空间数据的投影坐标系,但其API中的操作使用标准WGS84(SRID 4326),因此可能最好将其用于存储数据。
简而言之:如果您希望结果以米为单位,请使用具有以度为单位输入的坐标的地理数据类型,或者使用以米为单位输入的坐标的几何数据类型。

1
地理数据类型的目的是让您能够轻松执行这些类型的计算。几何数据类型旨在用于平面表面,因此它执行的计算相当直接,这可能是为什么它们略微快一些的原因。
地理数据类型,给定正确的SRID,将考虑地球的曲率并给出精确结果。根据您的两个对象之间的距离,该曲率可能会导致相当大的差异。
我在MSDN上找到了一篇很好的解释文章。请查看用户问题的第二个响应。有一个“经验法则”计算公式可用于将STDistance结果从度转换为米,但它不会非常精确。

http://social.msdn.microsoft.com/Forums/en-US/4f4648ef-9ef3-4a5c-974a-f34c5a325971/huge-difference-between-geography-and-geometry-results?forum=sqlspatial


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