建表指令碼
creategeometry型別好像不能為null,所以建表時必須為not null。table
`z_gis` (
`id`
bigint(20) not
null
, `name`
varchar(100) character
set utf8mb4 collate utf8mb4_0900_ai_ci not
null comment '姓名'
, `gis` geometry
notnull comment '
空間位置資訊',
`geohash`
varchar(20) generated always as (st_geohash(`gis`,8
)) virtual,
`item_id`
bigint(20) default
null,
primary
key(`id`),
unique
key`id` (`id`),
spatial
key`idx_gis` (`gis`),
key`name` (`name`),
key`idx_geohash` (`geohash`)
) engine
=innodb default charset=utf8mb4 collate=utf8mb4_0900_ai_ci comment=
'空間位置資訊
';
插入表資料
insert1. 查詢張三的經緯度資訊into z_gis(id,name,gis,item_id) values
(880000,'
張三',st_geomfromtext('
point(108.9498710632 34.2588125935)
'), 100),(
890000,'
李四',st_geomfromtext('
point(108.9465236664 34.2598766768)
'), 101);
#496 張三 point(108.9465236664注:st_astext()函式是將geometry型別轉化為字串34.2598766768
)select id, name, st_astext(gis) gis from z_gis where name ='張三
';
2. 修改張三的位置資訊
update z_gis set gis = st_geomfromtext('3. 查詢張三和李四之間的距離point(108.9465236664 34.2598766768)
') where name ='張三
';
注:st_distance_sphere()函式是計算兩點之間距離,所以傳兩個引數,都是geometry型別的,floor()函式是把計算出的距離取整,以公尺為單位。
--4. 查詢距離張三500公尺內的所有人計算廈門到安溪的距離,單位公尺
select
floor
(st_distance_sphere(
point(
118.03394,24.48405), --
廈門經緯度
point(118.18685,25.05544) --
安溪經緯度
)) distance
--查詢張三和李四之間的距離
select
floor
(st_distance_sphere(
(select gis from z_gis where name='張三
'),gis
)) distance
from z_gis where name='李四
';
張三資料資訊:(id, name, gis, geohash)(183 張三 point(120.259718前面說過geohash是把經緯度轉成字串,建表的時候我定義讓它轉成8位字元,當兩個點離得越近時,它生成的geohash字串前面相同的位數越多,所以我在這裡先用left()擷取前6位字元,前6位相同的誤差在±600公尺左右,然後模糊查詢,查出大概符合條件的資料,最後再精確比較,下面是geohash官方文件對geohash長度和距離誤差的說明:30.138463) wtme2wd3 53)--
point(120.259718,30.138463) 張三的經緯度
--wtme2w 張三的geohash值
--183 張三的主鍵id
select
name,
--推薦用經緯度傳入,不要子查詢
--floor(st_distance_sphere((select gis from z_gis where name = '張三'), gis)) distance,
floor(st_distance_sphere(point(120.259718,30.138463
), gis)) distance,
st_astext(gis) point
from
z_gis
where
geohash
like
'wtme2w%
'and
st_distance_sphere(point(
120.259718,30.138463), gis) <
5000
andid
<>
183;
注意:用geohash 查詢會有邊界問題,所以查詢出來的結果又可能不準確,可以用程式(例如j**a**)先查出當前點周圍8個範圍的geohash值,然後再匹配這9個範圍的所有資料,這樣就解決了geohash 的邊界問題。
orical空間資料型別GEOMETRY使用乾貨
最近專案應用到了根據geometry型別資料範圍內查詢更新資料的操作,對於此種資料型別的小白,在這兩天惡補了一些相關知識,做一些簡單的分享。geometry資料型別簡介 可以參考這篇文章和以上了解基本資料格式和內容,下面直接上應用乾貨。在專案應用中多為構建多邊形與位置資料,或通過位置資訊對資料進行操...
地理空間資料庫
地理空間資料庫 課程介紹地理空間資料庫的空間資料型別 空間分析操作和空間索引,幫助學生理解ogc的簡單要素訪問規範 空間資料庫的基本概念和基本設計方法,通過幾何物件模型和空間網路模型在postgresql postgis pgrouting上的應用實踐,掌握地理資訊資料建庫 空間關聯分析 最短路徑查...
地理空間資料免費獲取(一)
2.地理空間資料雲 主要模組包括 1.映象資料 引進的國際原始資料資源比如modis landsat srtm等 2.資料產品 在映象資料及科學資料中心存檔資料的基礎上,利用國內外權威的資料處理方法或科學資料中心自行研發的資料處理方法加工生產的高質量資料產品 3.國家綜合地球觀測資料共享平台 國家綜...