SQL - 地理计算
Posted
技术标签:
【中文标题】SQL - 地理计算【英文标题】:SQL - Geography calculations 【发布时间】:2021-10-06 13:42:57 【问题描述】:在 SQL 中,我存储了地理位置。我想检查地理是否覆盖了半个地球以上、地理是否跨越国际日期变更线或地理是否跨越赤道。
我想出了下面的逻辑,现在确定它是否正确。
-
地理覆盖全球一半以上 - 逻辑是否与第 3 点相同
跨越国际日期变更线的地理 - 如果国际日期变更线的坐标在给定坐标范围内,那么它似乎越过了国际日期变更线
穿越赤道的地理 - 如果给定坐标的任何纬度
请纠正有更好的逻辑。
【问题讨论】:
您是说以 0° 0° 为中心的一英里圆形覆盖了地球的一半以上?在我看来,您不能使用 3 的逻辑来回答 1。 好的,那么你有什么建议@Damien_The_Unbeliever 【参考方案1】:不确定您使用的是什么 SQL 数据库,但大多数都有空间功能。语法和纬度/经度顺序可能因数据库而异。
大于半球:
ST_Area(geo) > 地球表面积 / 2
穿越逆子午线(虽然日期线略有不同)
ST_Intersects(geo, ST_GeographyFromText('Linestring(180 -90, 180 0, 180 0)'))
穿越赤道:
ST_Intersects(geo, ST_GeographyFromText('Linestring(-180 0, -60 0, 60 0, 180 0'))
【讨论】:
以上是关于SQL - 地理计算的主要内容,如果未能解决你的问题,请参考以下文章