sql - SQL - 地理计算
问题描述
在 SQL 中,我存储了地理位置。我想检查地理是否覆盖超过半个地球,地理是否跨越国际日期变更线或地理是否跨越赤道。
我想出了以下逻辑,现在确定它是否正确。
- 地理覆盖全球一半以上 - 逻辑是否与第 3 点相同
- 跨越国际日期变更线的地理 - 如果国际日期变更线的坐标在给定的坐标范围内,那么它似乎越过了国际日期变更线
- 穿越赤道的地理 - 如果给定坐标的任何纬度 <= 0,那么它似乎穿越了赤道
请纠正有任何更好的逻辑。
解决方案
不确定您使用的是什么 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'))
推荐阅读
- javascript - 如何从与 Javascript Traverson HAL 的链接中获取 JSON 对象
- google-cloud-vertex-ai - 如何删除在 Google Vertex AI 中创建的元存储
- java - @PostMapping 在 Postman 中工作但不在浏览器中
- r - 单击任何按钮时采取行动 Shiny R
- mcedit - 如何在 BASH 环境的文本编辑器上复制和粘贴代码字符串
- go - 执行命令行二进制并连续读取标准输出
- node.js - 使用带有 Next.js 的 Typescript 找不到具有相应类型声明的模块
- javascript - 当我将鼠标悬停在链接的部分周围时,我想更改超链接的类别
- graphql - 来自 useStaticQuery 的 Gatsby 结果未定义
- angular - Ngrx 选择返回未定义