为什么SQL Server GEOGRAPHY允许-15069°和+ 15069°之间的经度?为什么±15069°?

Roh*_*rve 12 sql sql-server geospatial latitude-longitude sqlgeography

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

图书馆验证-15069和15069度之间的经度值,而不是-180到180.有人可以解释微软检查经度值在-15069和15069度之间的意义或原因是什么?

Microsoft已在此网站上列出了Geo Spatial标准的标准,其中提到经度值必须介于-15069和15069度之间(包括端点).

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

您对理解这一概念的意见将不胜感激!

sta*_*ica 2

为什么经度不限于[-180\xc2\xb0..+180\xc2\xb0]?

\n\n

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

\n\n
    \n
  1. 沿着赤道向东绕地球一周的线。

  2. \n
  3. 沿着赤道向西绕地球一周的线。

  4. \n
  5. 长度为 0 的线,因为 -180\xc2\xb0 纬度表示与 +180\xc2\xb0 纬度相同的子午线。

  6. \n
\n\n

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

\n\n

让我们看看当我们放宽该限制时会发生什么:

\n\n
    \n
  • 现在可以将向东绕地球一周的线建模为LINESTRING (-180 0, 180 0)。(这似乎符合我们的预期,因为增加经度意味着“向东走”。)

  • \n
  • 向西绕地球一周的线现在变为LINESTRING (-180 0, -540 0)。(经度递减表示“向西行进”。)

  • \n
  • 长度为 0 的线变为LINESTRING (-180 0, -180 0)。(坐标没有变化意味着“没有移动距离”。)

  • \n
\n\n

是的,但是为什么他们选择了 \xc2\xb115069 度呢?

\n\n

那个,我不能说。它可能与浮点精度有关(即,如果您指定一个“环绕”地球超过 15,069\xc2\xb0 \xc3\xb7 360\xc2\xb0 = 41 的点,空间计算就会变得太不精确,8583\xe2\x80\xa6 次)或只是任意限制(即他们认为没有人需要能够构造一个绕地球超过大约 42 圈的螺旋)。

\n\n

如果经度不受限制,为什么纬度限制为 [-90\xc2\xb0..+90\xc2\xb0]?

\n\n

让我们重复一下上面的思想实验:什么LINESTRING (0 90, 0 -90)意思?

\n\n
    \n
  1. 沿着本初子午线向南绕半个地球的线。

  2. \n
  3. 沿着本初子午线向北绕半个地球的线。

  4. \n
  5. 长度为 0 的线。

  6. \n
\n\n

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

\n\n

我们也可以排除(2),因为从北极出发时说“向北”没有任何意义。你只能留在那里,或者向南走,这已经被(1)覆盖了。

\n\n

所以我们最终明确地得到(1)。因此,纬度被限制为具有地理意义的 [-90\xc2\xb0..+90\xc2\xb0] 的原因是,在对接触或穿过地理极点的线进行建模时,永远不会有任何歧义。这是因为不存在像经度那样的突然度数“跳跃”(其中同一条子午线由 -180\xc2\xb0 和 +180\xc2\xb0 描述)。

\n