GeoHash是一种地址编码方式,能够将二维经纬度数据转换为一个字符串

Mysql中的使用

MySql在5.7及以上版本中支持了GeoHash相关函数

数据结构:

示例 说明
POINT POINT(120 30) 点,常表示坐标
LINESTRING LineString(84.070 33.801,99.52 30.292) 线,常表示路径信息
POLYGON POLYGON((120 30, 121 31, 122 32, 120 30)) 多边形,常表示区域信息

多边形为封闭图形,首位点坐标保持一致

二维坐标转geohas函数ST_GEOMFROMTEXT

1
2
3
4
5
6
7
8
-- 常量
SELECT (ST_GEOMFROMTEXT('POINT(120,19)'));

-- 变量
SELECT
ST_GEOMFROMTEXT(CONCAT('POINT(',longitude,' ',latitude,')')
FROM
coordinates_table where id = 1;

查询两点之间距离

1
2
3
4
5
6
SELECT ST_Distance(POINT(1,2),POINT(2,2));
+------------------------------------+
| ST_Distance(POINT(1,2),POINT(2,2)) |
+------------------------------------+
| 1 |
+------------------------------------+

查询一个几何形状是否完全包含另一个几何形状

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
-- 0: 不包含  1: 包含

-- 常量
SELECT MBRContains(
ST_GEOMFROMTEXT('POLYGON((175 150, 20 40, 50 60, 125 100, 175 150))'),
ST_GEOMFROMTEXT('POINT(174 149)')
)

-- 变量
SELECT
MBRContains(
ST_GEOMFROMTEXT(CONCAT('POLYGON( ( ', #{wkt},' ) )')),
ST_GEOMFROMTEXT(CONCAT('POINT(',plaza.baidu_lng,' ',plaza.baidu_lat,')'))
)
FROM
coordinates_table where id = 1;



参考:

https://www.jianshu.com/p/2fd0cf12e5ba
https://www.jianshu.com/p/2fd0cf12e5ba
https://juejin.cn/post/7003165795857465374
https://mariadb.com/kb/en/geometry-relations/

001Q9HNlgy1h0pp70lotoj61hb0u041v02

月球喷气机