پایگاه داده مکانی اَبری
زیرساخت مکانی پروژه‌های شما، بدون دردسر راه‌اندازی سرور

چطور نزدیک‌ترین عارضه را با 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: ابزار «نزدیک‌ترین عارضه» (تحلیل‌ها). فاصله‌های دقیق‌تر: فاصله به متر.

آیا این مقاله به شما کمک کرد؟

چه چیزی کم بود؟ (اختیاری)

هنوز جواب نگرفتید؟ به پشتیبانی بگویید.