2011-09-09 65 views
0

其中一個更新爲mysql表中的字段的值是類型'point'的'位置'。mysql空間字段

當我們選擇字段

select *,AsText(location) from somtable 

如何我們在腳本中使用這個領域?我們需要找到兩點之間的半徑或距離。

+0

看到這個問題:http://stackoverflow.com/questions/2411528/query-points-within-a-given-radius-in-mysql – Johan

回答

0

通常,您需要將兩個位置之間的距離作爲另一個字段返回,而不是位置,因爲這是點本身而不是距離。喜歡的東西: 例如:

$sql = 'SELECT *, (3959 * acos(cos(radians(' . $lat1 . ')) * cos(radians(location.lat)) * cos(radians(location.lng) - radians(' . $lng1 . ')) + sin(radians(' . $lat1 . ')) * sin(radians(location.lat)))) AS distanceFromUser FROM somtable WHERE....'; 

但如果你是一個點的數據類型滾動,然後使用一些MySQL的空間功能來代替。其中一個受歡迎的是MBRContains。這使得您的查詢是這樣的:

select * from somtable where 
MBRContains(
    GeomFromText('Polygon((swLat swLon, neLat swLon, neLat neLon, swLat neLon, swLat swLon))'), location); 

其他座標指定一個邊界框,其中您的位置點必須存在。所以在第二種情況下,你只是在框內返回點數。在第一種情況下,您將距離返回到表中的每個點。

0

此鏈接可以爲半徑的具體例子:

http://howto-use-mysql-spatial-ext.blogspot.in/2007/11/using-circular-area-selection.html

它建立在@ dRocking的MBRContains的例子,還說明了如何建立從給定的點的多邊形。