MYSQL 空間數據類型用法


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的點集合交集


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM