-1
我的應用中有很多用戶,他們都有一個固定的位置點,我想創建一個新的部分,用戶可以在其中看到附近的其他用戶,就像Messenger Wichet和Bitalk ,我怎樣才能將這些地方和craeat json列表進行比較?查找附近的人在php
我的應用中有很多用戶,他們都有一個固定的位置點,我想創建一個新的部分,用戶可以在其中看到附近的其他用戶,就像Messenger Wichet和Bitalk ,我怎樣才能將這些地方和craeat json列表進行比較?查找附近的人在php
爲了從任何緯度和經度給定的距離找到附近的點,我們使用球面三角學方程稱爲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/
你能告訴我們你是如何存儲用戶的位置? –
你必須編碼。說真的,我們來幫你解決特定的編程問題,而不是爲你編寫代碼。向我們展示您到目前爲止所嘗試的內容,與我們分享您的想法,我們會爲您提供幫助 - 但沒有人會爲您編寫代碼。 – Twinfriends
從數學角度講,你有** Lat **&** Lon **,你可以指定一個**半徑**並進行數學計算,以獲得該區域中的所有用戶。 – teeyo