[英]Calculating the distance between two location coordinates fetching from SQL server
我正在創建一個Android應用程序,它應該從sql表中獲取數據。 在我的sql表中,我存儲了緯度和經度坐標。 而且我能夠將當前位置坐標從我的應用程序傳遞到PHP代碼。 現在,我想獲取記錄,其中當前位置坐標與存儲的坐標之間的距離必須<= 50 km 。 我該怎么做。
我已經使用GET
方法從android應用程序中獲取當前位置。
提前致謝。
一般來說,您應該盡力讓SQL為您完成工作。 這樣,您可以最大程度地減少返回到PHP的結果數。
您正在尋找的是Haversine公式 。
要在SQL中完成查找,您需要將兩個緯度和經度點傳遞到SQL查詢中。 這是在公里中進行距離查找所需的SQL的示例:
DECLARE @MyLat DECIMAL(18,6) = 50.066388;
DECLARE @MyLong DECIMAL(18,6) = -5.714722;
DECLARE @PointLat DECIMAL(18,6) = 58.643888;
DECLARE @PointLong DECIMAL(18,6) = -3.069999;
SELECT 6371 * ACOS(COS(RADIANS(@MyLat))
* COS(RADIANS(@PointLat))
* COS(RADIANS(@MyLong) - RADIANS(@PointLong))
+ SIN(RADIANS(@MyLat))
* SIN(RADIANS(@PointLat))) AS [DISTANCE_KM];
因此,您可以像這樣來分隔數據庫查詢:
SELECT *
FROM LOOKUPTABLE
WHERE (6371 * ACOS(COS(RADIANS(@MyLat))
* COS(RADIANS(PointLat))
* COS(RADIANS(@MyLong) - RADIANS(PointLong))
+ SIN(RADIANS(@MyLat))
* SIN(RADIANS(PointLat)))) <= 50
編輯:只要您正在運行SQL Server 2008或更高版本,就可以使用地理數據類型來完成此操作。 通過這種方式,您可以獲得基於地理位置的更准確結果:
DECLARE @MyLoc geography = geography::STGeomFromText('POINT(50.066388 -5.714722)', 4326);
DECLARE @MapLoc geography = geography::STGeomFromText('POINT(58.643888 -3.069999)', 4326);
SELECT @MyLoc.STDistance(@MapLoc)/1000;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.