4

I'm using Sql server 2012 and google maps client-side, I use SRID 3785, as it's mercator that maps uses. I use geometry point data type to store locations. I read geometry is faster than geography. But when I'm trying to calculate distance between points and when I use STDistance in particular, I get a distance ... in decimal degrees... which is great .. but I really need meters to display them to users... So, when you know your SRID, when you know which location on Earth your targeting exactly, how can you convert the distance in decimal degrees to meters ? I know geography deals with meter... but how do you get meters from geometry distances calculations ? I really wonder how developers were doin' before geography types appeared... thank you !!

4

2 回答 2

7

听起来你在这里有几个问题:

首先,谷歌地图投影的正确 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 是谷歌地图用来显示空间数据的投影坐标系,但其 API 中的操作使用标准 WGS84 (SRID 4326),因此使用它来存储数据可能是有意义的。

非常简单:如果您想要以米为单位的结果,您应该使用以度为单位输入坐标的地理数据类型,或以米为单位输入坐标的几何数据类型。

于 2013-11-12T16:56:50.307 回答
1

Geography 数据类型的目的是让您可以毫不费力地执行这些类型的计算。几何数据类型适用于平面,因此它执行的计算相当简单,这可能是它们稍微快一些的原因。

给定正确的 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

于 2013-11-07T22:30:30.823 回答