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


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.