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


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.