MYSQL空間查詢函數


數據寫入

插入時使用ST_GeomFromText,也可使用GeomFromText

INSERT INTO t_customers ( lon_lat_point )
VALUES
    ( GeomFromText ( 'POINT(123 123)' ) )

  查詢數據

查詢空間數據

SELECT
    astext ( lon_lat_point ) 
FROM
    `t_customers`

 

https://blog.csdn.net/xinlingjun2007/article/details/80457079

 

空間查詢函數

  • 包含相關

MBRContains(A,B) –> A包含B
MBRWithin(A,B) –> A在B中
注意:包含關系中,所要驗證的集合必須全部包含在指定的集合中。如果只有部分在其中,應該使用相交

  • 覆蓋相關

MBRCoveredBy(A,B) –> A被B覆蓋
MBRCovers(A,B) –> A覆蓋B

  • 相交相關

MBRDisjoint(A,B) –> A、B不相交
MBRIntersects(A,B) –> A、B相交

  • 接觸

MBRTouches(A,B) –> A、B接觸,接觸的概念類似於相切

  • 重疊

MBROverlaps(A,B) –> A、B重疊

  • 相同

MBREquals(A,B) –> A、B相同

 

空間數據相關方法

  • 點獨有

開始、結束點
ST_StartPoint(A)
ST_EndPoint(A)
獲取x或y
ST_X(A)
ST_Y(A)

  • 凸包

ST_ConvexHull(A) –> 多點A的凸包面

  • 返回矩形

ST_MakeEnvelope(A,B) –> A、B為對角點

  • 線獨有

線是否閉合
ST_IsClosed(A)
線中點數量
ST_NumPoints
線中第n個點
ST_PointN(A,n)
線長度
ST_Length(A)
生成矩形
ST_Envelope(A) –> A只有兩個點,且不是水平或豎直線

  • 面積

ST_Area(A)
面的內外邊界
ST_ExteriorRing(A) –> 獲取A面外環邊界,返回值為LineString
ST_InteriorRingN(A,num) –> 獲取A面中第num個內環邊界,返回值為LineString。num從1開始。
ST_NumInteriorRings(A) –> 獲取A面內環數量(5.7.8后添加ST_NumInteriorRing,效果一樣)
部分geo對象可用

  • 集合

交集
ST_Intersection(A,B)
異或
ST_SymDifference(A,B) –> A、B中獨有的
並集
ST_Union(A,B)
質心
ST_Centroid(A)
距離
ST_Distance(A,B) –> A和B距離
ST_Distance_Sphere(A,B) –> A和B的球面距離
不同
ST_Difference(A,B) –> 返回A中有B中沒有的
抽稀
ST_Simplify(A,mix_distance) –> 將A抽稀,簡化A中兩點距離小於max的值(用起來有點迷。。待研究)

  • 緩沖區

ST_Buffer(A,length) –> 通過A幾何體,生成他周邊范圍為length距離的面

5.7.7后可以添加策略影響緩沖區的計算,設置的語句是ST_Buffer_Strategy()

  • point策略

point_circle –> 點的緩沖區是一個圓(默認)
point_square –> 點的緩沖區是一個正方形,length是點到其中一邊的距離

  • join策略

join_round –> 連接處緩沖區邊界為圓弧(默認)
join_miter –> 連接處緩沖區邊界為尖角

  • end策略

end_round –> 在結束處緩沖區為圓弧(默認)
end_flat –> 在結束處緩沖區為平坦的直線

  • 舉例生成緩沖區

ST_Buffer(point, 5, ST_Buffer_Strategy('point_square'))

ST_Buffer(line, 5, ST_Buffer_Strategy('join_miter', 10), ST_Buffer_Strategy('end_flat'))

  • 相交

ST_Intersects(A,B) –> A和B是否相交
ST_Crosses(A,B) –> A和B是否相交(相交部分不等於A或B)
ST_Disjoint(A,B) –> A和B是否不相交

  • 重疊

ST_Overlaps(A,B)

  • 接觸

ST_Touches(A,B)

  • 包含

ST_Contains(A,B) –> A是否包含B
ST_Within(A,B) –> A是否在B中

  • 驗證數據是否合法

ST_IsValid(A)
ST_Validate(A)

  • geo對象返回格式

ST_AsText(字段名) –> 以文本形式返回
ST_AsBinary(字段名) –> 以二進制形式返回
包含、覆蓋、重疊三個方法不清楚具體的區別

注意:每個方法前的MBR、ST可要可不要,在mysql5.7.6之后,不帶MBR、ST的方法開始棄用

  • 查詢樣例:

- 查詢在指定面中的點
sql
select * from test where MBRContains(ST_GeomFromText('Polygon((0 0,0 5,5 5,5 0,0 0))'),point)

- 查詢所有point點的x坐標
sql
SELECT ST_X(point) FROM test

 

 


免責聲明!

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



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