在開發(fā)中,有時(shí)需要存儲(chǔ)地理位置信息,如經(jīng)緯度。而MySQL是一款常用的關(guān)系型數(shù)據(jù)庫(kù),那么如何在MySQL中存儲(chǔ)經(jīng)緯度信息呢?
通常有兩種方法:使用Decimal類型和使用Point類型。
-- Decimal類型示例 CREATE TABLE `location`( `id` INT AUTO_INCREMENT PRIMARY KEY, `longitude` DECIMAL(10, 8) NOT NULL COMMENT '經(jīng)度', `latitude` DECIMAL(10, 8) NOT NULL COMMENT '緯度' );
-- Point類型示例 CREATE TABLE `location`( `id` INT AUTO_INCREMENT PRIMARY KEY, `position` POINT NOT NULL COMMENT '經(jīng)緯度' );
使用Decimal類型存儲(chǔ)經(jīng)緯度時(shí),需要指定精度,表示小數(shù)點(diǎn)后的位數(shù)。例如DECIMAL(10, 8)表示總共10位,小數(shù)點(diǎn)后8位。使用Point類型存儲(chǔ)經(jīng)緯度時(shí),只需要一個(gè)字段,使用ST_GeomFromText()函數(shù)將經(jīng)緯度轉(zhuǎn)化為Point類型即可。
-- 插入數(shù)據(jù) INSERT INTO location(longitude, latitude) VALUES(116.397128, 39.916527); INSERT INTO location(position) VALUES(ST_GeomFromText('POINT(116.397128 39.916527)'));
使用Point類型存儲(chǔ)經(jīng)緯度可以使用MySQL的空間索引,實(shí)現(xiàn)簡(jiǎn)單的空間查詢。例如查詢距離指定經(jīng)緯度不超過1000米的所有位置:
SELECT id, ST_X(position), ST_Y(position), ST_Distance_Sphere(position, POINT(116.397128, 39.916527)) FROM location WHERE ST_Distance_Sphere(position, POINT(116.397128, 39.916527))<= 1000;
總之,使用Decimal類型或Point類型都可以存儲(chǔ)地理位置信息。Decimal類型相對(duì)簡(jiǎn)單,但無法使用空間索引;Point類型功能更強(qiáng)大,可以使用MySQL的空間索引實(shí)現(xiàn)空間查詢。