一、前言
mysql實施了ogc建議的具有geometry型別的sql環境的乙個子集。該術語指的是用一組集合型別擴充套件的環境。具有幾何值的sql列是作為擁有集合型別的列實施的。該規範描述了sql幾何型別集合,以及作用在這些型別上用於建立和分析幾何值的函式。關於mysql空間儲存和查詢的概念介紹,可以參考這篇部落格,寫的很詳細:
二、資料格式
point
字段型別: point
樣例: point(1 1)
multipoint
字段型別: multipoint
樣例: multipoint (1 1,2 2,3 3)
裡面是多個point
linestring
字段型別: linestring
樣例: linestring(1 1,2 2,3 3)
multilinestring
字段型別: multilinestring
樣例: multilinestring ((1 1,2 2,3 3),(2 2,2 3,2 4))
polygon
字段型別: polygon
樣例:單面 polygon((1 1,1 2,2 2,2 1,1 1))
鏤空面 polygon((1 1,,,),(2 2,,,),(3 3,,,))
會從第乙個麵中,去除後面的面
使用st_area方法計算面積時,只會算出幾個面的面積,用第乙個面減,如果後面的面有超過了第乙個面範圍的部分,會將超出的數值一併減掉。單純的面積減面積。
注意:首末點要相同,用於連線成乙個閉合的面
multipolygon
字段型別: multipolygon
樣例: multipolygon(((1 1,1 2,2 2,2 1,1 1)),((2 2,2 3,3 2,2 2)))
裡面是多個polygon
三、資料插入
insert into 表明(欄位名) values(st_geomfromtext('上方列舉的資料格式'))
1以插入乙個point為例:
insert into test(point) values(st_geomfromtext('point(5 5)'))
1插入時使用st_geomfromtext,也可使用geomfromtext,區別暫時沒有研究。該方法是返回源字串的相應型別的幾何值
四、空間查詢方法
空間查詢相關方法
包含相關
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'))12
3上部分中的空間查詢相關方法的判斷方法,返回值是是否
相交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中
etc驗證資料是否合法
st_isvalid(a)
st_validate(a)
geo物件返回格式
st_astext(欄位名) –> 以文字形式返回
st_asbinary(欄位名) –> 以二進位制形式返回
包含、覆蓋、重疊三個方法不清楚具體的區別
注意:每個方法前的mbr、st可要可不要,在mysql5.7.6之後,不帶mbr、st的方法開始棄用
查詢樣例:
- 查詢在指定麵中的點
sqlselect * from test where mbrcontains(st_geomfromtext('polygon((0 0,0 5,5 5,5 0,0 0))'),point)
MySql 表空間查詢
show variableslike datadir 查所有資料庫占用空間大小 select table schema,concat truncate sum data length 1024 1024,2 mb as data size,concat truncate sum index leng...
MySQL的空間查詢
mysql實施了ogc建議的具有geometry型別的sql環境的乙個子集。該術語指的是用一組集合型別擴充套件的環境。具有幾何值的sql列是作為擁有集合型別的列實施的。該規範描述了sql幾何型別集合,以及作用在這些型別上用於建立和分析幾何值的函式。關於mysql空間儲存和查詢的概念介紹,可以參考這篇...
mysql查詢使用空間 查詢MYSQL庫表使用空間
1.檢視所有資料庫各容量大小 select table schema as 資料庫 sum table rows as 記錄數 sum truncate data length 1024 1024,2 as 資料容量 mb sum truncate index length 1024 1024,2 ...