چطور نزدیکترین عارضه را با SQL پیدا کنم؟
پاسخ کوتاه
از عملگر فاصله <-> با ORDER BY و LIMIT استفاده کنید؛ از نمایه مکانی بهره میبرد و سریع است. برای فاصله دقیق به متر از ST_Distance روی geography استفاده کنید.
نزدیکترین ۵ عارضه به یک نقطه
SELECT name,
ST_Distance(geom::geography,
ST_SetSRID(ST_MakePoint(51.389, 35.689), 4326)::geography) AS meters
FROM schools
ORDER BY geom <-> ST_SetSRID(ST_MakePoint(51.389, 35.689), 4326)
LIMIT 5;
<-> از نمایه مکانی استفاده میکند؛ بدون نمایه کند است. توجه: مختصات به ترتیب (طول، عرض) است.
برای هر عارضه یک لایه، نزدیکترین عارضه لایه دیگر
SELECT h.gid, s.name,
ST_Distance(h.geom::geography, s.geom::geography) AS meters
FROM houses h
CROSS JOIN LATERAL (
SELECT name, geom FROM schools
ORDER BY geom <-> h.geom LIMIT 1) s;
بدون SQL: ابزار «نزدیکترین عارضه» (تحلیلها). فاصلههای دقیقتر: فاصله به متر.
آیا این مقاله به شما کمک کرد؟
هنوز جواب نگرفتید؟ به پشتیبانی بگویید.