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
您对理解这一概念的意见将不胜感激!
这是一个简短的思想实验。\n以下三行LINESTRING (-180 0, 180 0)
代表哪一行?
沿着赤道向东绕地球一周的线。
沿着赤道向西绕地球一周的线。
长度为 0 的线,因为 -180\xc2\xb0 纬度表示与 +180\xc2\xb0 纬度相同的子午线。
一旦您决定了三种可能性中的任何一种,您就会发现您无法将其他两种情况建模为LINESTRING
(尝试一下!)\xe2\x80\xa6 至少当您将经度限制为(地理上正确的) 区间 [-180\xc2\xb0..+180\xc2\xb0]!
让我们看看当我们放宽该限制时会发生什么:
\n\n现在可以将向东绕地球一周的线建模为LINESTRING (-180 0, 180 0)
。(这似乎符合我们的预期,因为增加经度意味着“向东走”。)
向西绕地球一周的线现在变为LINESTRING (-180 0, -540 0)
。(经度递减表示“向西行进”。)
长度为 0 的线变为LINESTRING (-180 0, -180 0)
。(坐标没有变化意味着“没有移动距离”。)
那个,我不能说。它可能与浮点精度有关(即,如果您指定一个“环绕”地球超过 15,069\xc2\xb0 \xc3\xb7 360\xc2\xb0 = 41 的点,空间计算就会变得太不精确,8583\xe2\x80\xa6 次)或只是任意限制(即他们认为没有人需要能够构造一个绕地球超过大约 42 圈的螺旋)。
\n\n让我们重复一下上面的思想实验:什么LINESTRING (0 90, 0 -90)
意思?
沿着本初子午线向南绕半个地球的线。
沿着本初子午线向北绕半个地球的线。
长度为 0 的线。
我们可以排除(3),因为POINT (0 90)
和POINT (0 -90)
是不同的点:即北极和南极。从一处到另一处的直线长度肯定不为零。
我们也可以排除(2),因为从北极出发时说“向北”没有任何意义。你只能留在那里,或者向南走,这已经被(1)覆盖了。
\n\n所以我们最终明确地得到(1)。因此,纬度被限制为具有地理意义的 [-90\xc2\xb0..+90\xc2\xb0] 的原因是,在对接触或穿过地理极点的线进行建模时,永远不会有任何歧义。这是因为不存在像经度那样的突然度数“跳跃”(其中同一条子午线由 -180\xc2\xb0 和 +180\xc2\xb0 描述)。
\n