mysql - MariaDB:以km为单位计算2点之间的距离
问题描述
我尝试在 mariaDB 中的 2 个点之间获得一些近似距离。
我使用那个 SQL:
SELECT st_distance(POINT(50.6333,3.0667),p) from p
它输出结果,例如:
0
1.9128040446888426
8.103248262271125
似乎 mariaDB 不处理 SRID。有没有办法将这些值转换为 km ?(看起来乘以 110 是非常正确的)
我的目标是避免处理诸如 sin、cos、atan 之类的数学运算,并且近似结果对我来说是可以的。
解决方案
st_distance 返回的结果不是公里而是分钟。对于 d = 40.075 公里的赤道周长,两分钟之间的距离为 d / 360 = 111,319公里。
虽然纬度之间的距离是恒定的,但从赤道到极帽的经度之间的距离不断减小。根据您的示例,一个位置的点必须位于法国某处,经度之间的距离约为 70 公里。
由于您不想使用Haversine 公式,您还可以使用勾股定理来获得更准确的结果:
# Distance between Eiffel tower and Lille
SELECT ST_DISTANCE(GeomFromText("Point(50.6333 3.0669)"), GeomFromText("Point(48.853. 2.348)")) * 111.38;
-> 213.84627307672486
select sqrt(pow((50.63333 - 48.853) * 111.38,2) + pow((3.0669 - 2.348) * 70, 2));
->204.57903071304386
推荐阅读
- ios - IOS 设备上从 App Center 安装后如何查看应用版本?
- openid - OIDC 到 SAML 选项?
- python - 使用相同的 x 轴为多个数据集绘制 1 行
- html - 我不知道如何在它之前的文本下获取此文本
- r - R中的栅格:使用像素值进行提取()操作
- python - 向滚动条添加命令将删除所有文本
- amazon-web-services - 一台笔记本电脑上的两个 AWS 账户
- python - 在python的嵌套组列表中仅执行最终命令单击
- node.js - 此处出错 TypeError [ERR_INVALID_ARG_TYPE]:“路径”参数必须是字符串类型。接收到的类型对象
- javascript - 有没有办法在 javascript/JSX(React 框架)中使用字符串来引用常量