MYSQL支持空间数据类型,包括:
Geometry:可以存储所有的几何类型
Point:简单点
LINESTRING:简单线
POLYGON:简单面
MULTIPOINT:多点
MULITILINESTRING:多线
MUILITIPOLYGON:很多方面
GEOMETRYCOLLECTION:任何几何集合
简单的点数据一般表示为POINT(X Y);
简单的面数据则由多个点坐标组成POLYGON((X Y, X Y, X Y…))
多面数据比较复杂MUILITIPOLYGON(((X Y,X Y, X Y, X Y…..)))
如下可以通过点数据point与半径radius求以point点为圆心,radius为半径的圆范围内的数据。
SELECT A.* FROM mapTable A WHERE INTERSECTS(A.GEO, GEOMFROMTEXT(CONCAT('POLYGON((',
X(GEOMFROMTEXT(#{point})) - #{radius}, ' ', Y(GEOMFROMTEXT(#{point})) - #{radius}, ',',
X(GEOMFROMTEXT(#{point})) + #{radius}, ' ', Y(GEOMFROMTEXT(#{point})) - #{radius}, ',',
X(GEOMFROMTEXT(#{point})) + #{radius}, ' ', Y(GEOMFROMTEXT(#{point})) + #{radius}, ',',
X(GEOMFROMTEXT(#{point})) - #{radius}, ' ', Y(GEOMFROMTEXT(#{point})) + #{radius}, ',',
X(GEOMFROMTEXT(#{point})) - #{radius}, ' ', Y(GEOMFROMTEXT(#{point})) - #{radius}, '))'
)))
INTERSECTS为计算包含关系的函数方法,若参数1被参数2包含(实际是判断两个几何的MBR是否相交),则表示TRUE
除此之外也可以用ST_Contains来表示几何之间的包含关系。
GEOMFROMTEXT函数表示将字符串类型的数据转化成空间数据类型。
更多方法