所以我有一個模型可以保存 latlong 資料。我想做一個方法,我給出一個 point_x, point_y ,看看我的 Location 模型是否有一個接近 500m 或更小的點。
這是一個點的例子:
Location.longlat.x = 43.3233
Location.lonlat.y = 23.3233
point_x = 32.3233
point_y = 23.323
我使用 postgis 為我的模型存盤這些 longlat 坐標。到目前為止,我知道它將它們保存為球形點并且是o。那么有沒有一種方法可以將它們定義為平面點并計算它們是否接近 500m 或更短?
編輯:這就是我在模型中存盤 longlat 坐標的方式:
t.geography "longlat", limit: {:srid=>4326, :type=>"st_point", :geographic=>true}
uj5u.com熱心網友回復:
您可以通過以下方式獲得球體上兩點之間的距離(以米為單位)ST_DistanceSphere:
SELECT ST_DistanceSphere(
ST_MakePoint(43.3233, 23.3233),
ST_MakePoint(32.3233, 23.323)
);
--> 1122927.11865462
要選擇 500 米內的所有位置,您可以使用以下內容:
SELECT *
FROM locations
WHERE ST_DistanceSphere(
ST_MakePoint(x, y),
ST_MakePoint(32.3233, 23.323)
) <= 500;
locations你的桌子在哪里和x/y是你的緯度/長列。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/464552.html
