mysql中g(shù)eometry類型的簡單使用

      網(wǎng)友投稿 1035 2025-04-02

      mysql中g(shù)eometry類型的簡單使用


      編寫本文的目的:

      mysql中g(shù)eometry類型的簡單使用

      讓和兩天前的我一樣的初學(xué)者,能夠更快的使用geometry類型存儲(chǔ)空間點(diǎn)數(shù)據(jù)

      也是為了自己加深印象,更熟練的使用geometry類型

      建表腳本

      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='空間位置信息'

      這里我創(chuàng)建了一張位置信息表,每個(gè)人對(duì)應(yīng)的經(jīng)緯度都會(huì)以geometry類型存在表中,geohash字段是把坐標(biāo)系分成很多小方格,然后將經(jīng)緯度轉(zhuǎn)化成字符串,其原理可自行百度,在這里就不多說了。

      哦,對(duì)了,geometry類型好像不能為null,所以建表時(shí)必須為not null。

      插入表數(shù)據(jù)

      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)'));

      名字是我隨便起的,不要噴我哦,經(jīng)緯度是我在地圖上隨便取的點(diǎn),geomfromtext()函數(shù)是將字符串格式的點(diǎn)坐標(biāo),轉(zhuǎn)化成geometry類型,還有個(gè)字段geohash是根據(jù)gis字段的值自動(dòng)生成的,可以仔細(xì)看看建表腳本。

      接下來是幾個(gè)簡單的查詢例子

      1. 查詢張三的經(jīng)緯度信息

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

      astext()函數(shù)是將geometry類型轉(zhuǎn)化為字符串

      sql執(zhí)行結(jié)果

      2. 修改張三的位置信息

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

      我用的Mysql Workbench工具,修改時(shí)報(bào)錯(cuò)如下:

      You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column To disable safe mode, toggle the option in Preferences -> SQL Editor and reconnect.

      好像是除了用id修改,其他修改都會(huì)報(bào)這個(gè)錯(cuò),下面這樣設(shè)置一下就OK了 。

      set sql_safe_updates = 0;

      3. 查詢張三和李四之間的距離

      select floor(st_distance_sphere( (select gis from z_gis where name= '張三'), gis )) distance from z_gis where name= '李四';

      本來想格式化sql語句的,但是發(fā)現(xiàn)格式化之后的sql 基本全變成大寫的了,我覺得辨識(shí)度更低了,所有大家就這樣將就看吧,st_distance_sphere()函數(shù)是計(jì)算兩點(diǎn)之間距離的,所以傳兩個(gè)參數(shù),都是geometry類型的,floor()函數(shù)是把計(jì)算出的距離取整。

      sql執(zhí)行結(jié)果

      4. 查詢距離張三500米內(nèi)的所有人

      SELECT name, FLOOR(ST_DISTANCE_SPHERE((SELECT gis FROM z_gis WHERE name = '張三'), gis)) distance, astext(gis) point FROM z_gis WHERE ST_DISTANCE_SPHERE((SELECT gis FROM z_gis WHERE name = '張三'), gis) < 500 AND name != '張三';

      sql執(zhí)行結(jié)果

      如果表中數(shù)據(jù)非常多時(shí),這樣查效率會(huì)非常低,這時(shí)就會(huì)用到geohash字段查詢

      sql語句如下:

      SELECT name, floor(ST_DISTANCE_SPHERE((SELECT gis FROM 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 gis FROM z_gis WHERE name = '張三'), gis) < 500 AND name != '張三';

      MySQL SQL

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:項(xiàng)目計(jì)劃書模板包含哪些內(nèi)容?為什么需要項(xiàng)目計(jì)劃書模板?
      下一篇:如何快速將整個(gè)工作簿的公式轉(zhuǎn)換為數(shù)值?
      相關(guān)文章
      国产精品亚洲美女久久久| 亚洲av无码av在线播放| 亚洲免费在线观看| 亚洲av无码专区在线电影天堂| wwwxxx亚洲| 精品久久久久久亚洲精品| 亚洲欧洲日产韩国在线| 亚洲国产精品网站久久| 亚洲av永久无码精品三区在线4| 亚洲另类春色国产精品| 久久精品亚洲AV久久久无码| 亚洲免费在线观看视频| 亚洲AV无码精品蜜桃| 亚洲免费一级视频| 亚洲中文无码卡通动漫野外| 亚洲色丰满少妇高潮18p| 亚洲爆乳无码精品AAA片蜜桃| 成a人片亚洲日本久久| 亚洲av无码不卡私人影院| 五月天婷亚洲天综合网精品偷| 亚洲AV无码一区二区三区国产 | 亚洲国产精品一区二区九九| 亚洲精品美女久久久久99小说| 亚洲熟妇少妇任你躁在线观看无码 | 免费亚洲视频在线观看| 亚洲精品线路一在线观看| 国产亚洲日韩在线三区| 亚洲av永久无码精品国产精品| 久久久久亚洲AV无码专区体验| 亚洲成人高清在线观看| 亚洲人成www在线播放| 亚洲av无码偷拍在线观看| 亚洲国产成人精品女人久久久 | 国产亚洲视频在线观看| 中文亚洲AV片在线观看不卡 | 老司机亚洲精品影院| 亚洲国产av美女网站| 亚洲人成人伊人成综合网无码| 亚洲成av人片不卡无码久久| 中国亚洲女人69内射少妇| 亚洲欧洲国产精品你懂的|