mysql中 地里位置搜尋 (抄)

2022-08-23 15:21:12 字數 2906 閱讀 7581

關注0.1892018.08.09 10:31:48字數 304閱讀 4,012

create table `z_gis` (

`id` varchar(45) not null,

`name` varchar(10) not null comment '姓名',

`gis` geometry not null comment '空間位置資訊',

`geohash` varchar(20) generated always as (st_geohash(`gis`,8)) virtual,

primary key (`id`),

unique key `id` (`id`),

spatial key `idx_gis` (`gis`),

key `idx_geohash` (`geohash`)

) engine=innodb default charset=utf8mb4 comment='空間位置資訊'

insert into z_gis(id,name,gis) values

(replace(uuid(),'-',''),'張三',geomfromtext('point(108.9498710632 34.2588125935)')),

(replace(uuid(),'-',''),'李四',geomfromtext('point(108.9465236664 34.2598766768)')),

(replace(uuid(),'-',''),'王五',geomfromtext('point(108.9477252960 34.2590342786)')),

(replace(uuid(),'-',''),'趙六',geomfromtext('point(108.9437770844 34.2553719653)')),

(replace(uuid(),'-',''),'小七',geomfromtext('point(108.9443349838 34.2595663206)')),

(replace(uuid(),'-',''),'孫八',geomfromtext('point(108.9473497868 34.2643456798)')),

(replace(uuid(),'-',''),'十九',geomfromtext('point(108.9530360699 34.2599476152)'));

geomfromtext()函式是將字串格式的點座標,轉化成geometry型別,還有個字段geohash是根據gis欄位的值自動生成的,可以仔細看看建表指令碼。

select name, astext(gis) gis from z_gis where name = '張三';

astext()函式是將geometry型別轉化為字串

update z_gis set gis = geomfromtext('point(108.9465236664 34.2598766768)') where name = '張三';
select floor(st_distance_sphere(

(select gis from z_gis where name= '張三'),

gis)) distance from z_gis where name= '李四';

sql執行結果

select 

name,

floor(st_distance_sphere((select

gisfrom

z_gis

where

name = '張三'),

gis)) distance,

astext(gis) point

from

z_gis

where

st_distance_sphere((select

gisfrom

z_gis

where

name = '張三'),

gis) < 500

and name != '張三';

sql執行結果

name distance point

李四 329 point(108.9465236664 34.2598766768)

王五 198 point(108.947725296 34.2590342786)

十九 317 point(108.9530360699 34.2599476152)

如果表中資料非常多時,這樣查效率會非常低,這時就會用到geohash欄位查詢

select 

name,

floor(st_distance_sphere((select

gisfrom

z_gis

where

name = '張三'),

gis)) distance,

astext(gis) point

from

z_gis

where

geohash like concat(left((select geohash from z_gis where name = '張三'),6),'%')

and st_distance_sphere((select

gisfrom

z_gis

where

name = '張三'),

gis) < 500

and name != '張三';

mysql中布林搜尋 MySQL全文搜尋之布林搜尋

利用in boolean mode修改程式,mysql 也可以執行布林全文搜尋 mysql select from articles where match title,body against mysql yoursql in boolean mode id title body 1 mysql ...

MySQL中萬用字元 佔幾個位置

今天學習萬用字元 發現問題 佔幾個字元?幾乎所有的資料上所的都是乙個,若是資料庫中有字段的值為 李勇 那麼你想搜尋出來就需要用 李 可是在mysql上面實驗的結果是 李 搜尋不到,而 李 確搜尋出來了。這樣貌似 佔兩個字元。再有,若資料庫中全是英文比如 abcdefg 那麼你輸入 abcd fg 肯...

tp5 中使用 mongoDB 空間位置搜尋

在很多場景我們都會使用位置範圍服務 如 查詢附近的單車 旅店 飯店等等。tp5框架的使用還是比挺多的,關於tp5中的查詢條件已經預設擁有了near查詢處理了,但結果並不能滿足我們的一些需求。參考到一篇文章,所以對 tp5中的範圍查詢進行記錄,希望可以幫助到有同等需求的小夥伴們。需要了解mongodb...