我不能在MySQL的性能問題發言,但在SQL Server的同一問題工作時,我簡單地驗證爲Lat
和Long
在WHERE
條快速構建基於我distance
比我可以限制結果一箱在邊界內。此時它變成簡單的算術比較。當我縮小結果的數量後,我從原始點檢查Distance
。
首先構建一個盒子的關鍵是減少涉及複雜數學計算的記錄數量。
這是我從SQL Server的例子。原
DECLARE @Lat DECIMAL(20, 13) = 35.7862
,@Long DECIMAL(20, 13) = -80.3095
,@Radius DECIMAL(7, 2) = 5
,@Distance DECIMAL(10, 2)
,@Earth_Radius INT = 6371000;
SET @Distance = @Radius * 1609.344;
DECLARE @NorthLat DECIMAL(20, 13) = @Lat + DEGREES(@distance/@Earth_Radius)
,@SouthLat DECIMAL(20, 13) = @Lat - DEGREES(@distance/@Earth_Radius)
,@EastLong DECIMAL(20, 13) = @Long + DEGREES(@distance/@Earth_Radius/COS(RADIANS(@Lat)))
,@WestLong DECIMAL(20, 13) = @Long - DEGREES(@distance/@Earth_Radius/COS(RADIANS(@Lat)));
SELECT *
FROM CustomerPosition AS cp
WHERE (
cp.Lat >= @SouthLat
AND cp.Lat <= @NorthLat)
AND (
cp.Long >= @WestLong
AND cp.Long <= @EastLong)
結果選擇我把它存儲到臨時表和比對其進行評估,以確定哪些實際Within
指定的距離。
它足夠我[見](http://daviestrachan.co.uk/maps/stationmap8a.php)3K mysql數據庫 –