我在我的项目中使用Microsoft.SqlServer.Types DLL来验证纬度和经度。

资料库会验证-15069至15069度之间的经度值,而不是-180至180度。
谁能解释Microsoft检查经度值在-15069至15069度之间的重要性或原因是什么?

Microsoft在此网站上列出了地理空间标准的标准,其中提到“经度”值必须在-15069至15069度(含)之间。

https://msdn.microsoft.com/en-us/library/ee301753(v=sql.105).aspx

您对理解这一概念的投入将不胜感激!

最佳答案

为什么经度不限于[-180°.. + 180°]?

这是一个简短的思想实验。LINESTRING (-180 0, 180 0)代表以下哪三行?

  • 沿着赤道在整个地球上向东延伸的线。
  • 一条线,沿着赤道向西遍及全局。
  • 长度为0的线,因为-180°纬度表示与+ 180°纬度相同的子午线。

  • 一旦您确定了这三种可能性中的任何一种,您就会发现您无法将其他两种情况建模为LINESTRING(尝试一下!)……至少当您将经度限制为(地理上正确的)间隔时[- 180°.. + 180°]!

    让我们看看放宽该限制会发生什么:
  • 现在可以将向东在全局范围内延伸的线建模为LINESTRING (-180 0, 180 0)。 (这似乎符合我们的期望,因为经度的增加意味着“向东”。)
  • 现在,向西延伸到全局的线变为LINESTRING (-180 0, -540 0)。 (经度的减小表示“向西”。)
  • 长度为0的行变为LINESTRING (-180 0, -180 0)。 (坐标不变表示“无距离移动”。)

  • 是的,但是为什么他们选择精确地为±15069度呢?

    那我不能说。这可能与浮点精度有关(即,如果您指定的某个点“绕”地球旋转超过15069°÷360°= 41,8583…次),或者仅仅是一个任意限制(即,空间计算变得太不精确)他们认为没有人会需要构造一个遍及全局的螺旋约42倍以上)。

    如果不限制经度,为什么将纬度限制为[-90°.. + 90°]?

    让我们重复上述思想实验:LINESTRING (0 90, 0 -90)是什么意思?
  • 沿着本初子午线向南绕地球一半的线。
  • 沿着本初子午线向北绕地球一半的线。
  • 长度为0的线。

  • 我们可以排除(3),因为POINT (0 90)POINT (0 -90)是不同的点:即北极和南极。从一条线到另一条线的长度绝对不为零。

    我们也可以排除(2),仅因为从北极开始说“向北”没有任何意义。您只能呆在那里,或往南走,那里已经被(1)所涵盖。

    因此,我们明确地得出(1)。因此,将纬度限制在对地理位置有意义的[-90°.. + 90°]的原因是,在对接触或穿越地理极点的线进行建模时,永远不会有任何歧义。这是因为不存在像经度那样的突然程度的“跳跃”(其中一个和同一子午线都用-180°和+ 180°来描述)。

    09-10 16:14
    查看更多