我想找到X里程附近的人讓我正確解釋。路線圖執行接近性選擇
我有沒有以下
1) it shows user's current location on a google map with a radius circle of 3 miles.
2) when ever user uses this application its current location will get stored into MySQL database
as follows
ID Name currLat currLan radius (in miles)
--------------------------------------------------------------------
34334 John 23.039574 72.56602 3
而且,當過一個新的用戶將使用相同的應用他的當前位置也將獲得商店在上表中的應用程序。
因此,當任何用戶訪問此應用程序時,服務器端代碼將檢查它與當前位置的距離,以確定其他用戶是否在他身邊。
我谷歌,但我真的don't know what's the approach to match and perform proximity search
我已閱讀了一些公式,但真的不知道執行它的程序。
到目前爲止,我已經使用下面的代碼到PHP中,它返回最大和最小經緯度lan,但我真的不知道如何處理它,因爲m全新的鄰近搜索,所以任何人都可以告訴我the road map to do that
$radius = 600;
$longitude = (float) $lan;
$latitude = (float) $lat;
$lng_min = $longitude - $radius/abs(cos(deg2rad($latitude)) * 69);
$lng_max = $longitude + $radius/abs(cos(deg2rad($latitude)) * 69);
$lat_min = $latitude - ($radius/69);
$lat_max = $latitude + ($radius/69);
$data ["lat"] = $lng_min . '/' . $lng_max . PHP_EOL;
$data ["lan"] = $lat_min . '/' . $lat_max;
我真的希望這一次它不是一個虛幻的問題,如果有人想任何進一步的信息,然後隨便問
到目前爲止,我已經做了
有型的創建表POINT欄位大空間索引後,它
CREATE TABLE userstatus (
id varchar(100) NOT NULL,
userid varchar(100) NOT NULL,
username varchar(100) NOT NULL,
currLoc POINT NOT NULL,
radius INT(10),
SPATIAL INDEX(currLoc)
)ENGINE = MYISAM
後一個過程來計算距離
DELIMITER $$
CREATE FUNCTION distance (a POINT, b POINT) RETURNS double DETERMINISTIC
BEGIN
RETURN 6371 * 2 * ASIN(SQRT(POWER(SIN(RADIANS(ABS(X(a)) - ABS(X(b)))), 2) + COS(RADIANS(ABS(X(a)))) * COS(RADIANS(ABS(X(b)))) * POWER(SIN(RADIANS(Y(a) - Y(b))), 2)));
END $$
DELIMITER ;
現在將使用誰我compare my user's lat , lat and radius with above function
我插入我的數據我不知道
$userStatusInsert = "INSERT INTO userstatus (id,userid,username,currLoc,radius)
VALUES('".$id."','".$uid."','".$uname."',GeomFromText('POINT(".$lat." ".$lan.")'),'".$radius."')";
我發起了查詢in cdist < 10,value 10是一個半徑?
SELECT userid, username, distance(userstatus.currLoc, GeomFromText('POINT(23.039574 72.56602)')) AS cdist FROM userstatus HAVING cdist < 10 ORDER BY cdist LIMIT 10
結果如下,但我真的不知道包含了什麼cdist列,我的意思是 如何確定一個人是在範圍
id username cdist
-----------------------------------
1115 John 4.52726116114886
1111 Hunt 6.2734062677772
1112 Raul 7.55266860461263
1113 Nizam 7.55480140608532
1114 John 7.76912596719722
你應該用mysql來做,而不是用php代碼。這個問題以前已經解決了很多次。這裏是一個示例教程:http://vinsol.com/blog/2011/08/30/geoproximity-search-with-mysql/您還可以搜索「mysql geo proximity search」來查找其他許多 – 2012-02-25 07:17:17
我同意。使用空間擴展到mysql或postgresql。我實際上更喜歡使用postgresql,因爲它不使用mbr(最小邊界矩形)和像mysql一樣的地理空間函數(至少在v5.6可用之前)。就像查看一個點是否在奇數形狀的多邊形內一樣。 – 2012-02-25 07:25:49
@本·李在你的例子中,他們使用多邊形有沒有一種方法來定義圓? – Hunt 2012-02-25 09:51:04