首页 > 解决方案 > SQL - 地理计算

问题描述

在 SQL 中,我存储了地理位置。我想检查地理是否覆盖超过半个地球,地理是否跨越国际日期变更线或地理是否跨越赤道。

我想出了以下逻辑,现在确定它是否正确。

  1. 地理覆盖全球一半以上 - 逻辑是否与第 3 点相同
  2. 跨越国际日期变更线的地理 - 如果国际日期变更线的坐标在给定的坐标范围内,那么它似乎越过了国际日期变更线
  3. 穿越赤道的地理 - 如果给定坐标的任何纬度 <= 0,那么它似乎穿越了赤道

请纠正有任何更好的逻辑。

标签: sqlgeographysqlgeography

解决方案


不确定您使用的是什么 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'))


推荐阅读