MySql版本 > 5.6
# 计算两个坐标点之间的距离
# st_distance 计算的结果单位是度,需要乘111195(地球半径6371000*PI/180)是将值转化为米。
# /1000000 是将值转化为Km
SELECT b.*, (st_distance (point (b.lng,b.lat),point (116.368368,40.035424))*111195/1000000 )as juli FROM test_table b HAVING juli < 14 ORDER BY juli ASC
# 判断坐标点是否在多个面中 ST_Contains 的结果 1:表示在面内,0:不在面内
SELECT (ST_Contains (ST_GeomFromText("MultiPolygon (((116.244539 40.076175,116.244909 40.075457,116.245446 40.074242,116.250338 40.075551,116.249281 40.07762,116.248664 40.077677,116.247908 40.077677,116.247291 40.077608,116.246519 40.077415,116.245945 40.077181,116.245532 40.07698,116.245113 40.076713,116.244539 40.076175)))"),point (b.lng,b.lat)))as state, b.* FROM test_table b HAVING state = 1 ORDER BY id
知识拓展:
在MySQL中支持地理空间位置的几何表示,可存储的数据类型包括Geometry,Point、MultiPoint、LineString、MultiLineString、Polygon、MultiPolygon、GeometryCollection。其中Geometry可以支持任何一种空间类型的表示。
如下是各种空间几何对象的坐标文本表示(Well-known text, WKT):
常见的几何图形元素:
多个同类或异类元素间的组合:
对于空间几何数据的存储和传输,除了WKT这种文本标记语言,MySQL中还常用到一种二进制格式(Well-Known Binary ,WKB),以及数据库内部存储的几何格式。这些格式最初是由Open Geospatial Consortium(OGC)组织定义的,遵循OGC标准,MySQL对中其SQL with Geometry Types环境下的一个子集实现了空间扩展。
常用的空间计算函数
1、判断两点之间的距离
ST_Distance(g1,g2),返回g1和g2之间的距离。如果任一参数是NULL或空几何,则 return value 为NULL。
2、图形1是否完全包含图形2
ST_Contains(g1,g2),返回 1 或 0 以指示g1是否完全包含g2。还可以用ST_Within(g2,g1)达到相同的效果。
3、不相交
ST_Disjoint(g1,g2),返回 1 或 0 以指示g1是否在空间上与(不相交)g2不相交。