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 - 地理计算的主要内容,如果未能解决你的问题,请参考以下文章

使用sql oracle计算地理点之间的距离

利用SQL计算两个地理坐标(经纬度)之间的地表距离

SQL2008 中用于地理数据类型的距离算法

如何让地理字段填充半径值

T-SQL:这个地理距离算法是不是没有考虑地球曲率

sql server, 已知两组地理位置数据,求第一组每个地理位置2km以内第二组地理位置的个数