2014年8月22日 星期五

MySQL使用Spatial point type計算點與點間的距離

因為目前專案需要做有關LBS的運用,故尋找了一下Mysql儲存地理資訊(Location Based Data)的資料型態與函式,方法如下: 假使有一張Table稱spatialTable,有兩個資料欄位分別為placeName、geoPoint。

INSERT INTO spatialTable (placeName, geoPoint) VALUES( "London Eye", GeomFromText( ‘POINT(51.5033 -0.1197)’ ));

INSERT INTO spatialTable (placeName, geoPoint) VALUES( "London School of Economics", GeomFromText( ‘POINT(51.514 -0.1167)’ ));

INSERT INTO spatialTable (placeName, geoPoint) VALUES( "London Bridge", GeomFromText( ‘POINT(51.5081 -0.0878)’ ));

INSERT INTO spatialTable (placeName, geoPoint) VALUES( "Tower of London", GeomFromText( ‘POINT(51.5081 -0.0761)’ ));
我們存入這四筆資料方便我們之後做距離的計算,而我們可以使用以下SQL Syntax去找每筆資料的geoPoint。
SELECT X(geoPoint), Y(geoPoint) FROM spatialTable;
而計算距離的方式如下,假設我們以POINT(52.5177,-0.0968)做為我們所在位置經緯度,去計算既有在spatialTable裡與每一筆資料的距離,並遞增排列(由近到遠)。
SELECT
placeName,
(GLength(
LineStringFromWKB(
LineString(
geoPoint,
GeomFromText(‘POINT(51.5177 -0.0968)’)
)
)
))
AS distance
FROM spatialTable
ORDER BY distance ASC

沒有留言:

張貼留言