کوئریهای مکانی پرکاربرد
بافر، فاصله، تقاطع، نمایه مکانی و چند مثال واقعی
ساخت جدول مکانی
CREATE TABLE schools (
id serial PRIMARY KEY,
name text NOT NULL,
geom geometry(Point, 4326)
);
CREATE INDEX schools_geom_idx ON schools USING gist (geom);
INSERT INTO schools (name, geom)
VALUES ('مدرسه نمونه', ST_SetSRID(ST_MakePoint(51.3890, 35.6892), 4326));
نزدیکترین عوارض به یک نقطه
SELECT name, ST_Distance(geom::geography, ST_MakePoint(51.42, 35.70)::geography) AS meters
FROM schools
ORDER BY geom <-> ST_SetSRID(ST_MakePoint(51.42, 35.70), 4326)
LIMIT 5;
عوارض داخل یک محدوده
SELECT s.name, d.name AS district
FROM schools s
JOIN districts d ON ST_Intersects(s.geom, d.geom);
بافر ۵۰۰ متری
SELECT id, ST_Buffer(geom::geography, 500)::geometry AS buffer_geom FROM schools;
اگر کوئری با خطای statement timeout متوقف شد، اول بررسی کنید نمایه gist ساخته شده باشد، سپس با
EXPLAIN مسیر اجرا را ببینید.