地球の表面上の距離を求めることは、Haversine公式(Spherical Cosine Law formula)とも呼ばれる大円距離を使用することを意味します。Postgres拡張機能を使って半径を検索するには?
問題は次のとおりです。緯度と経度のある場所のテーブルが与えられていますが、それらの位置のうちのどれが特定の場所に最も近いのでしょうか?
私は、次のクエリがあります:クエリで私の複雑な数式を変更するearthdistance
拡張子を使用する方法
SELECT z.id,
z.latitude, z.longitude,
p.radius,
p.distance_unit
* DEGREES(ACOS(COS(RADIANS(p.latpoint))
* COS(RADIANS(z.latitude))
* COS(RADIANS(p.longpoint - z.longitude))
+ SIN(RADIANS(p.latpoint))
* SIN(RADIANS(z.latitude)))) AS distance
FROM doorbots as z
JOIN ( /* these are the query parameters */
SELECT 34.0480698 AS latpoint, -118.3589196 AS longpoint,
2 AS radius, 111.045 AS distance_unit
) AS p ON 1=1
WHERE z.latitude between ... and
z.longitude between ...
を?
同等の変更ですか?
SELECT z.id,
z.latitude, z.longitude,
p.radius,
round(earth_distance(ll_to_earth(p.latpoint, p.longpoint), ll_to_earth(z.latitude, z.longitude))::NUMERIC,0) AS distance
FROM doorbots as z
JOIN ( /* these are the query parameters */
SELECT 34.0480698 AS latpoint, -118.3589196 AS longpoint,
2 AS radius, 111.045 AS distance_unit
) AS p ON 1=1
WHERE z.latitude between ... and
z.longitude between ...
'earth_distance(ll_to_earth ll_to_earth(z.latitude、z.longitude)、($ 1、$ 2))<$ 3'または'ポイント(z.longitude、z.latitude)<@>点($ 2、$ 1)<$ 3' - ドキュメントについて「地球の距離」は私には明らかです。あなたは正確に何を理解していないのですか? - いくつかのインデックスを関与させたいでしょうか? – pozs
あなたの更新のために:はい、それは同等の変化のようですが、 'z.latitude between ...とz.longitude between ... 'は半径内を探索しません。むしろ「矩形」内にある(実際には、矩形ではなく、球面のような矩形の領域です)。 – pozs