পোস্টগিসের সাথে আমি কীভাবে নৈকট্য অনুসন্ধান করব?


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);

আপনি যদি কোনও ভাল বইয়ের জন্য বাজারে থাকেন তবে পোস্টজিআইএস ইন অ্যাকশনটি দেখুন ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.