मैं पोस्टगिस के साथ एक निकटता खोज कैसे करूं?


9

मैंने जियोनैम्स डेटाबेस (शहरों 1000) को डाउनलोड किया और उन्हें अपनी तालिका ( geo_cities) में आयात करने के लिए एक छोटा सा रूबी कार्यक्रम लिखा । मैंने फिर भूगोल कॉलम जोड़ा geog।

तब मैंने सभी लाट / लोन नंबरों का उपयोग करके जियोग कॉलम में बदल दिया:

update public.geo_cities set geog = st_GeogFromText('SRID=4326;POINT(' || longitude || ' ' || latitude || ')');

चीजें अच्छी लग रही हैं। अब मैं जो करना चाहता हूं वह प्राग के 100 मील के भीतर सभी शहरों को ढूंढना है।

तो मुझे प्राग मिल सकता है जैसे:

select * from geo_cities where asciiname = 'Prague' and countrycode = 'CZ';

मैं अभी भी जीआईएस सीख रहा हूं और पोस्टग्रेज करता हूं ताकि कोई मुझे सरल क्वेरी के साथ मदद कर सके?

जवाबों:


13

सबसे पहले, सुनिश्चित करें कि आपके भूगोल कॉलम पर एक इंडेक्स है। यह स्थानिक खोजों को गति देगा:

CREATE INDEX geo_cities_geog_idx ON geo_cities USING GIST geog;
VACUUM ANALYZE geo_cities(geog);

फिर, आप स्व- सम्मिलित क्वेरी पर ST_DWithin (मीलों से मीटर तक रूपांतरण के साथ) का उपयोग कर सकते हैं :

SELECT gc.*, ST_Distance(gc.geog, pt.geog)/1609.344 AS distance_miles
FROM geo_cities gc, geo_cities pt
WHERE pt.asciiname = 'Prague' and pt.countrycode = 'CZ'
  AND ST_DWithin(gc.geog, pt.geog, 160934.4)
ORDER BY ST_Distance(gc.geog, pt.geog);

यदि आप एक अच्छी किताब के लिए बाजार में हैं, तो PostGIS इन एक्शन देखें ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.