2017-09-25 87 views
-1

我的應用中有很多用戶,他們都有一個固定的位置點,我想創建一個新的部分,用戶可以在其中看到附近的其他用戶,就像Messenger Wichet和Bitalk ,我怎樣才能將這些地方和craeat json列表進行比較?查找附近的人在php

+0

你能告訴我們你是如何存儲用戶的位置? –

+1

你必須編碼。說真的,我們來幫你解決特定的編程問題,而不是爲你編寫代碼。向我們展示您到目前爲止所嘗試的內容,與我們分享您的想法,我們會爲您提供幫助 - 但沒有人會爲您編寫代碼。 – Twinfriends

+0

從數學角度講,你有** Lat **&** Lon **,你可以指定一個**半徑**並進行數學計算,以獲得該區域中的所有用戶。 – teeyo

回答

0

爲了從任何緯度和經度給定的距離找到附近的點,我們使用球面三角學方程稱爲haversine公式:

R = earth’s radius (mean radius = 6,371km) 
Δlat = lat2− lat1 
Δlong = long2− long1 
a = sin²(Δlat/2) + cos(lat1).cos(lat2).sin²(Δlong/2) 
c = 2.atan2(√a, √(1−a)) 
d = R.c 
Angles need to be in radians to pass to Trigonometric functions 

而不專家的數學家,這主要轉換爲下面的MySQL查詢:

SELECT *, 
(3959 * acos(cos(radians(55.864237)) * cos(radians(latitude)) 
* cos(radians(longitude) - radians(-4.251806)) + sin(radians(55.864237)) 
* sin(radians(latitude)))) AS distance 
FROM postcodes HAVING distance < 20 
ORDER BY distance LIMIT 1; 

我在上面檢查20英里範圍內的任何區域,但是您可以根據需要將其設置爲短或長。查詢開始時的3959數字是用於里程的數字,如果您使用的是公里,則應將此數字更改爲6371。我已將它限制爲1行,因爲我只想要最接近的匹配,但是您可能想在其他情況下更改此設置!

這是從一個小博客文章我寫提醒自己我是怎麼做的,你可以在這裏閱讀:https://delboy1978uk.wordpress.com/2014/08/04/geolocate-your-visitors/