要執行基於經緯度的空間查詢,需要使用地理空間函數擴充 MySQL。然而,值得注意的是,MySQL 缺乏專門為涉及這些座標的距離計算而設計的內建空間函數。
相反,地球表面上的鄰近圓需要使用大圓距離公式,可以使用半正矢或其他適當的演算法來實現。 MySQL 5.6 提供了一個未記錄的st_distance(p1, p2) 函數,用於計算平面形狀內的笛卡爾距離,但由於笛卡爾距離引入的扭曲,這不適合基於緯度和經度的計算。
對於實際應用,考慮一個查詢來查找給定緯度/經度十法定英里內的所有標誌point:
SELECT id, coordinates, name, r, units * DEGREES(ACOS(LEAST(1.0, COS(RADIANS(latpoint)) * COS(RADIANS(latitude)) * COS(RADIANS(longpoint) - RADIANS(longitude)) + SIN(RADIANS(latpoint)) * SIN(RADIANS(latitude))))) AS distance FROM flags JOIN ( SELECT 42.81 AS latpoint, -70.81 AS longpoint, 10.0 AS r, 69.0 AS units ) AS p ON (1=1) WHERE MbrContains(GeomFromText ( CONCAT('LINESTRING(', latpoint-(r/units),' ', longpoint-(r /(units* COS(RADIANS(latpoint)))), ',', latpoint+(r/units) ,' ', longpoint+(r /(units * COS(RADIANS(latpoint)))), ')')), coordinates)
在此查詢中:
要將結果限制為圓內的點並按鄰近程度排序,請將查詢括在另一個查詢中查詢:
SELECT id, coordinates, name FROM ( /* the above query, pasted in here */ ) AS d WHERE d.distance <= d.r ORDER BY d.distance ASC
以上是如何使用 MySQL 找出給定經緯度半徑內的點?的詳細內容。更多資訊請關注PHP中文網其他相關文章!