我有一系列的地方進入一個MySQL數據庫,每個地方都有作爲字段:經緯度和地址。我會從通過地理位置獲得的實際位置計算最近的地方。我會使用這個函數:Google Map - find markers但我怎麼能從數據庫所有的價值,並把JavaScript數組?從我的地理位置計算最近的地方
1
A
回答
2
選項1: 通過切換到支持的GeoIP數據庫做數據庫的計算。
選項2: 做數據庫的計算:如果你使用MySQL,所以下面的存儲過程應該可以幫助
CREATE FUNCTION distance (latA double, lonA double, latB double, LonB double)
RETURNS double DETERMINISTIC
BEGIN
SET @RlatA = radians(latA);
SET @RlonA = radians(lonA);
SET @RlatB = radians(latB);
SET @RlonB = radians(LonB);
SET @deltaLat = @RlatA - @RlatB;
SET @deltaLon = @RlonA - @RlonB;
SET @d = SIN(@deltaLat/2) * SIN(@deltaLat/2) +
COS(@RlatA) * COS(@RlatB) * SIN(@deltaLon/2)*SIN(@deltaLon/2);
RETURN 2 * ASIN(SQRT(@d)) * 6371.01;
END//
方案3: 如果你有一個指數緯度和經度,你可以通過用你選擇的腳本語言(minLat,maxLat,minLong和maxLong)計算一個初始邊界框,並將行限制爲一個子集來減少需要計算的計算次數您的條目基於(WHERE緯度BETWEEN minLat和maxLat和minLong和maxLong之間的經度)。那麼MySQL只需要執行該行子集的距離計算。
如果您使用SQL語句或存儲過程來計算距離,則SQL仍需查看數據庫中的每條記錄,並計算數據庫中每條記錄的距離,然後才能決定是否返回該行或丟棄它。 由於計算執行起來相對較慢,因此如果您可以減少需要計算的行集合,消除明顯超出所需距離的行,那麼會更好,因此我們只執行昂貴的計算爲更少的行數。
使用邊界框就像在地圖上首先繪製一個正方形,左邊,右邊,頂部和底部邊距離我們中心點的適當距離。然後我們的圈子將被繪製在該框內,圓圈上最北端,最東端,最南端和最西端的點與框的邊界接觸。有些行將落在該框之外,所以SQL甚至不打算計算這些行的距離。它僅計算落在邊界框內的那些行的距離,以查看它們是否落入圓內。
1
你可以在mysql中使用cos和sin等數學函數,所以你不需要把整個db變成javascript,你可以在mysql中運行查詢。
我找到了答案在這裏:http://www.movable-type.co.uk/scripts/latlong-db.html(太長,在回答中包括)
相關問題
- 1. 用戶地理位置到最近的地址計算
- 2. 地址數組:地理位置最近的地方iphone地理位置在ios6
- 3. 查找最近的地理位置
- 4. 計算地理位置
- 5. 由地理位置靠近我的人
- 6. android-尋找最近的位置到我目前的地方
- 7. 安卓谷歌地圖顯示最接近當前位置的地理位置
- 8. 在postgresql中計算最合適的地理位置
- 9. 如何從我的當前位置獲取附近的地方
- 10. 如何在我目前的位置附近找到最近的地方?
- 11. 搜索距離我當前位置最近的地方Android地圖
- 12. HTML5查找附近的地理位置
- 13. 距離google地方最近的地方
- 14. Localstorage我的地理位置
- 15. 谷歌的地方API,希望獲得最近的位置
- 16. 定位最近的地方在Google地圖中的JSON響應
- 17. 地理位置查找最近的城市
- 18. 如何返回離地理位置最近的文檔?
- 19. Android地理編碼得到最近的位置
- 20. 高效搜索最近的地理位置
- 21. MySQL的最近成果 - PHP地理位置迴路發出
- 22. 地理位置和WordPress的:最佳插件近距離搜索?
- 23. ,搜索最近的地方
- 24. 「尋找我附近」的導軌地理編碼/地理位置選項
- 25. 什麼是從地理座標計算本地用戶的最有效方式?
- 26. 從我們的位置找到位置最近的位置
- 27. 計算一個位置之間的接近到其他許多地方
- 28. 谷歌地圖距離計算器與地理位置
- 29. 當前位置給定時,獲取最近地點的地圖
- 30. 在google地圖中獲取最近的地鐵站位置android