Geometry主要相關類
Geometry
是所有此擴展中類型得基類,其他類型如Point,LineString,Polygon都是Geometry的子類。Geometry有一些屬性,這些屬性是所有其他幾何類的共有屬性:
- type: 類型(Point, LineString,...)
- SRID: 該值確定了用於描述定義幾何對象的坐標空間的空間坐標系統,參考鏈接:https://www.cnblogs.com/Joetao/articles/2086846.html
- coordinates: 坐標值
- interior, boundary, exterior: interior是幾何對象所展空間的部分,boundary是幾何對象的邊界,exterior是幾何對象未占有的空間。
- MBR: 能夠覆蓋幾何對象的最小矩形,可以想象成信封,它由幾何對象中最大最小的坐標值組合而成:((MINX MINY, MAXX MINY, MAXX MAXY, MINX MAXY, MINX MINY))
- simple/nonsimple: 幾何對象是否簡單
- closed/not closed: 幾何對象是否封閉
- dimension: 維度數(Point: 0, LineString: 1, Polygon: 2)
其他
Point: 顧名思義就是點,有一個坐標值,沒有長度、面積、邊界。
LineString: 線,由一系列點連接而成。
如果線從頭至尾沒有交叉,那就是簡單的(simple)
如果起點和終點重疊,那就是封閉的(closed)
Polygon:多邊形。可以是一個實心平面形,即沒有內部邊界,也可以有空洞,類似紐扣。
集合類: MultiPoint, MultiLineString, MultiPolygon, GeometryCollection .這4種類型都是集合類,是多個Point、LineString或Polygon組合在一起而成。
WKT(最常用的幾何對象數據格式)
1, Point: POINT(121.213342 31.234532).經度(longitude)在前,維度(latitude)在后,用空格分隔
2, LineString: LINESTRING(121.342423 31.542423,121.345664 31.246790,121.453178 31.456862). 點與點之間用逗號分隔;一個點中的經緯度用空格分隔,與POINT格式一致
3, Polygon: POLYGON((121.342423 31.542423,121.345664 31.246790,121.453178 31.456862),(121.563633 31.566652,121.233565 31.234565,121.568756 31.454367)). 由一個表示外部邊界的LineString和0個或多個表示內部邊界的LineString組成,最簡單的就是只有一個外邊界的情況:POLYGON((0 0,10,0 10 10, 0 10))
4, 集合類格式
MULTIPOINT(0 0, 20 20, 60 60)
MULTILINESTRING((10 10, 20 20), (15 15, 30 15))
MULTIPOLYGON(((0 0,10 0,10 10,0 10,0 0)),((5 5,7 5,7 7,5 7, 5 5)))
GEOMETRYCOLLECTION(POINT(10 10), POINT(30 30), LINESTRING(15 15, 20 20))
幾何對象創建函數
MYSQL中幾何對象都有特定的格式,一般我們會將WKT串轉換為對應格式,才能使用MYSQL提供的函數進行存儲計算.常用的有(集合類的不常用暫不說明)
1, GeomFromText(wkt): 創建一個任何類型的幾何對象Geometry
2, PointFromText(wkt): 創建一個Point對象
3, LineStringFromText(wkt): 創建一個LineString對象
4, PolygonFromText(wkt): 創建一個Polygon對象
常用SQL處理方式
1, 創建字段類型為geometry
2, 插入時使用"幾何對象創建函數"將WKT串轉換后存儲,方便使用空間函數計算
3, 查詢時使用AsText()函數將幾何對象轉換為WKT串,方便查看
常用處理空間關系的函數
st_contains(g1, g2)
返回1: g1完全包含g2;返回0: g1未包含g2
# 判斷點在多邊形內
SELECT st_contains(POLYGONFROMTEXT('POLYGON ((109.37258720397949 35.771076679229736,109.3732738494873 35.744125843048096,109.4192361831665 35.74468374252319,109.41404342651367 35.777857303619385,109.37220096588135 35.7754111289978,109.37258720397949 35.771076679229736))'),
GEOMFROMTEXT(CONCAT('Point(',m.gps_x,' ',m.gps_y,')'))) AS res
FROM biz_general_map m
st_crosses(g1, g2), st_intersects(g1, g2)
返回1: g1與g2相交;返回0:g1與g2未相交
st_disjoint(g1, g2)
是st_crosses的反函數
st_within(g1, g2)
g1在g2內則返回1,否則返回0
常用處理函數
st_union(g1, g2)
將g1和g2合並為一個集合類對象
st_difference(g1, g2)
返回幾何對象,該對象表示了幾何值g1與g2的點集合差異
st_intersection(g1,g2)
返回幾何對象,該對象表示了幾何值g1與g2的點集合交集