我在我的项目中使用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)
代表以下哪三行?
一旦您确定了这三种可能性中的任何一种,您就会发现您无法将其他两种情况建模为
LINESTRING
(尝试一下!)……至少当您将经度限制为(地理上正确的)间隔时[- 180°.. + 180°]!让我们看看放宽该限制会发生什么:
LINESTRING (-180 0, 180 0)
。 (这似乎符合我们的期望,因为经度的增加意味着“向东”。)LINESTRING (-180 0, -540 0)
。 (经度的减小表示“向西”。)LINESTRING (-180 0, -180 0)
。 (坐标不变表示“无距离移动”。)是的,但是为什么他们选择精确地为±15069度呢?
那我不能说。这可能与浮点精度有关(即,如果您指定的某个点“绕”地球旋转超过15069°÷360°= 41,8583…次),或者仅仅是一个任意限制(即,空间计算变得太不精确)他们认为没有人会需要构造一个遍及全局的螺旋约42倍以上)。
如果不限制经度,为什么将纬度限制为[-90°.. + 90°]?
让我们重复上述思想实验:
LINESTRING (0 90, 0 -90)
是什么意思?我们可以排除(3),因为
POINT (0 90)
和POINT (0 -90)
是不同的点:即北极和南极。从一条线到另一条线的长度绝对不为零。我们也可以排除(2),仅因为从北极开始说“向北”没有任何意义。您只能呆在那里,或往南走,那里已经被(1)所涵盖。
因此,我们明确地得出(1)。因此,将纬度限制在对地理位置有意义的[-90°.. + 90°]的原因是,在对接触或穿越地理极点的线进行建模时,永远不会有任何歧义。这是因为不存在像经度那样的突然程度的“跳跃”(其中一个和同一子午线都用-180°和+ 180°来描述)。