mysql中point的使用詳解
前言
MySQL中的point用于表示GIS中的地理坐標(biāo),在GIS中廣泛使用,本文主要講解point類(lèi)型的簡(jiǎn)單使用
一.創(chuàng)建帶有point類(lèi)型的表格
CREATE TABLE `test-point` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '序號(hào)', `point` point NOT NULL COMMENT '經(jīng)緯度', `text` varchar(50) DEFAULT NULL COMMENT '描述', PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=10 DEFAULT CHARSET=utf8mb4;
二.添加數(shù)據(jù)
INSERT INTO `test-point` ( point,text ) VALUES ( st_GeomFromText ( 'POINT(1 1)' ),'第1個(gè)點(diǎn)');
INSERT INTO `test-point` ( point,text ) VALUES ( st_PointFromText ( 'POINT(2 2)' ),'第2個(gè)點(diǎn)');
注意:其中st_GeomFromText ,st_PointFromText 是將字符串轉(zhuǎn)換成point類(lèi)型的數(shù)據(jù),這兩個(gè)都可以,其中st_GeomFromText 是父級(jí),st_PointFromText 是子級(jí).
三.查詢數(shù)據(jù)
SELECT id,st_x(point) x,st_y(point) y,point,text FROM `test-point`
update `test-point` set point=st_GeomFromText('POINT(6 6)') where id =10;注意:st_x(point)是獲取POINT(1 2)中的1,st_y(point)是獲取POINT(1 2)中的2,st_AsText(point)是將point類(lèi)型轉(zhuǎn)換成字符串.
四.更新數(shù)據(jù)
update `test-point` set point=st_PointFromText('POINT(5 5)') where id =10;update `test-point` set point=st_GeomFromText('POINT(6 6)') where id =10;
五.查詢一個(gè)點(diǎn)與數(shù)據(jù)庫(kù)其他點(diǎn)之間的距離
SELECT id, st_x ( point ) latitude, st_y ( point ) longitude, round(( ST_DISTANCE_SPHERE ( st_GeomFromText ( 'POINT (1 1)' ), point )), 1 ) AS distance FROM `test-point`
注意:st_distance_sphere函數(shù)是將坐標(biāo)距離轉(zhuǎn)換成米也可以使用st_distancest_distance_sphere函數(shù)的計(jì)算結(jié)果要比st_distance轉(zhuǎn)換為米的結(jié)果更精確。本人測(cè)試st_distance函數(shù)發(fā)現(xiàn),隨著點(diǎn)與點(diǎn)之間的距離增加誤差越來(lái)越大.
六.查詢一個(gè)點(diǎn)為圓心,方圓2000米內(nèi)的數(shù)據(jù)
SELECT id, st_x ( point ) latitude, st_y ( point ) longitude, round(( ST_DISTANCE_SPHERE ( st_GeomFromText ( 'POINT (1 1)' ), point )), 1 ) AS distance FROM `test-point` HAVING distance <=2000
注意
- Mysql5.7版本的語(yǔ)法不需要加"st_"這個(gè)前綴
- POINT(經(jīng)度,緯度) 經(jīng)度和緯度不要寫(xiě)反,5.7查詢不到結(jié)果,8.0版本查詢?yōu)榱?因?yàn)榻?jīng)度范圍是 -180°-180°,緯度是-90°-90°,如果寫(xiě)反,緯度會(huì)超出范圍,導(dǎo)致報(bào)錯(cuò)
- POINT類(lèi)型里面單位是小數(shù),不是度.POINT(12.1 14.6),可以看我以前的文章經(jīng)緯度度數(shù)和小數(shù)之間的轉(zhuǎn)化
到此這篇關(guān)于mysql中point的使用的文章就介紹到這了,更多相關(guān)mysql point使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MySQL筆記之?dāng)?shù)據(jù)類(lèi)型詳解
本篇文章對(duì)mysql數(shù)據(jù)類(lèi)型進(jìn)行了詳細(xì)的介紹,需要的朋友參考下2013-05-05
MySQL無(wú)法啟動(dòng)1067錯(cuò)誤的又一種解決方法(機(jī)房斷電)
今早在對(duì)一張table 創(chuàng)建primay key過(guò)程中發(fā)生了斷電,當(dāng)電腦再次啟動(dòng)時(shí)候,發(fā)現(xiàn)mysql 服務(wù)無(wú)法啟動(dòng),使用 net start 提示 1067錯(cuò)誤,折騰了2個(gè)小時(shí)無(wú)法解決,后來(lái)只能通過(guò)手工刪除數(shù)據(jù)文件,日志文件,再啟動(dòng)服務(wù),然后導(dǎo)入數(shù)據(jù)來(lái)完成2013-01-01
網(wǎng)上提供的最簡(jiǎn)便的MySql數(shù)據(jù)庫(kù)備份的方法
網(wǎng)上提供的最簡(jiǎn)便的MySql數(shù)據(jù)庫(kù)備份的方法...2007-02-02
MySQL為例講解JDBC數(shù)據(jù)庫(kù)連接步驟
這篇文章主要為大家詳細(xì)介紹了MySQL為例講解JDBC數(shù)據(jù)庫(kù)連接步驟,感興趣的小伙伴們可以參考一下2016-08-08
MySQL Workbench工具導(dǎo)出導(dǎo)入數(shù)據(jù)庫(kù)方式
這篇文章主要介紹了MySQL Workbench工具導(dǎo)出導(dǎo)入數(shù)據(jù)庫(kù)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-05-05
關(guān)于mysql init_connect的幾個(gè)要點(diǎn)總結(jié)
下面小編就為大家?guī)?lái)一篇關(guān)于mysql init_connect的幾個(gè)要點(diǎn)總結(jié)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-03-03
十個(gè)實(shí)用且簡(jiǎn)單的MySQL函數(shù)
本文給大家分享了十個(gè)實(shí)用且簡(jiǎn)單的MySQL函數(shù),需要的朋友可以參考下2018-01-01

