MySQL 空間擴展:根據緯度/經度選擇圓內的點
背景:
MySQL 可以使用其空間擴充來儲存地理空間資料。這允許高效查詢和操作空間對象,包括點、線和多邊形。一項常見任務是從給定位置選擇指定半徑內的點。
使用地理空間擴展:
為了執行此任務,MySQL 提供了多種地理空間函數,包括Buffer (),它在點或線周圍創建緩衝區。但是,需要注意的是,MySQL 本身並不支援基於緯度和經度的鄰近計算。
替代方法:
根據緯度和經度,需要不同的方法。大圓距離公式可用來計算地球表面上兩點之間的距離。這可以合併到 MySQL 查詢中以過濾指定半徑內的點。
範例查詢:
以下查詢示範如何使用大圓距離公式選擇給定緯度和經度100 公尺半徑內的標誌:
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)
在此查詢中,latpoint longpoint參數代表使用者的位置。 r 和units 參數指定半徑(以公尺為單位)和每度緯度的距離單位。
其他注意事項:
透過這種方法,您可以根據緯度和經度有效地選擇圓內的點,從而實現您可以使用 MySQL 空間擴展創建基於位置的應用程式。
以上是如何使用 MySQL Spatial Extensions 和緯度/經度選擇圓內的點?的詳細內容。更多資訊請關注PHP中文網其他相關文章!