MySQL 空間計算 空間查詢

2022-07-24 21:57:40 字數 3780 閱讀 9673

一、前言

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 ...