পোস্টজিআইএস: স্তর বি এর নিকটতম বিন্দুতে স্তর বিন্দুর আইডি নির্ধারণ করুন


15

এটি আমার অন্য প্রশ্নের একটি সুস্পষ্ট পূর্ববর্তী হতে হবে (যা আমি জিজ্ঞাসা করি নি): পোস্টজিআইএসে মাকড়সা ডায়াগ্রাম (হাব লাইন) কীভাবে তৈরি করবেন?

আমি যদি স্তর A (স্টোর) এবং পয়েন্ট বি স্তর (গ্রাহক) এর একটি বিন্দুর মধ্যে সম্পর্ক না জানি তবে আমি সাধারণত বলতে চাই যে "গ্রাহক 1 নিকটস্থ স্টোর দ্বারা পরিবেশন করা হয়।" আমি বুঝতে পারি যে এই সত্যটি সত্য নাও হতে পারে, তবে এটি শালীন সারোগেট হতে পারে।

পোস্টজিআইএস ব্যবহার করে, স্তর বি (গ্রাহক) এর প্রতিটি পয়েন্টে স্তর এ (স্টোর) এর নিকটতম পয়েন্টের আইডি নির্ধারণ করার সবচেয়ে কার্যকর উপায় কী। আমি যে আউটপুটটি সন্ধান করছি তা নীচের মতো।

Customer | Store
    1    |   A
    2    |   A
    3    |   B
    4    |   C

উত্তর:


6

একইভাবে:

এআইডি কে সিএসএসআইডি হিসাবে নির্বাচন করুন, (বি অর্ডার থেকে বিআইডি নির্বাচন করুন st_distance দ্বারা (A.geom, B.geom) সীমা 1) এ থেকে স্টোর_আইডি হিসাবে


এই কাজটি সম্পাদনের সেরা উপায় ছিল। আমি ব্যবহার করা প্রকৃত কোডের জন্য নীচে আমার নোটটি দেখুন।
রায়ানকডালটন

8

দেখে মনে হচ্ছে আপনার স্টোর করার চেয়ে যদি আপনার আরও অনেক বেশি গ্রাহক থাকে তবে স্টোরগুলির জন্য ভোরোনাই বহুভুজগুলির একটি স্তর তৈরি করা আরও কার্যকর হতে পারে , তারপরে স্টোর বহুভুজগুলির বিরুদ্ধে গ্রাহকদের একটি স্থানিক যোগদান করুন।


1
আমি এই পদ্ধতির পছন্দ!
underdark

ভোরোনাই পোলগুলি তৈরি করা কোন পদ্ধতির সবচেয়ে সহজ হবে? এখানে অন্যান্য বিকল্প রয়েছে যা এখানে উল্লেখ করা হয়েছে: বোস্টংগিস. com
বোস্টংগিস.

আমি মনে করি দ্বিতীয় টিউটোরিয়ালে ডেলাউন ট্রায়ানগুলেশন এবং ডিরিচলেট প্যাকেজ উপযুক্ত হবে, যদিও এটি সবচেয়ে সহজ কিনা তা নিশ্চিত নন।
কर्क কুইকেনডাল


5

Http://www.bostongis.com/?content_name=postgis_narerest_neighbor থেকে :

যদি কোনও টেবিলে সমস্ত রেকর্ডের জন্য আপনার নিকটতম প্রতিবেশী হওয়া প্রয়োজন, তবে আপনার কেবল প্রত্যেকটির জন্য প্রথম নিকটতম প্রতিবেশী প্রয়োজন, তবে আপনি পোস্টগ্র্রেএসকিউএল এর স্বতন্ত্র ডিস্টিন্ট অন বাক্য গঠন ব্যবহার করতে পারেন। যা দেখতে এরকম কিছু দেখাচ্ছে:

SELECT DISTINCT ON(g1.gid)  g1.gid As gref_gid, 
       g1.description As gref_description, 
       g2.gid As gnn_gid, 
       g2.description As gnn_description  
FROM sometable As g1, sometable As g2   
WHERE g1.gid <> g2.gid 
      AND ST_DWithin(g1.the_geom, g2.the_geom, 300)   
ORDER BY g1.gid, ST_Distance(g1.the_geom,g2.the_geom) 

এটি 300 ইউনিট পর্যন্ত সর্বনিম্ন দূরত্ব পাবে। সুতরাং, আপনাকে প্রথমে আপনার ডেটা পরীক্ষা করতে হবে এবং আপনার ন্যূনতম দূরত্বগুলি কতটা বড় হতে চলেছে তা খুঁজে বের করতে হবে।


3

আপনাকে একটি অনুসন্ধান বাক্সে সবচেয়ে সংক্ষিপ্ত জুটি খুঁজে পেতে হবে এবং যদি বাক্সটিতে কিছু না থাকে তবে এটি প্রসারিত করুন। এটি সুন্দর নয় তবে এটি কাজ করে। এখানে PL / PgSQL কোডের উদাহরণ রয়েছে http://trac.osgeo.org/postgis/wiki/UserWikiNarerest


3

প্রত্যেকের ইনপুট জন্য ধন্যবাদ। আমি শেষ পর্যন্ত এপ্র্যান্ডস এবং আন্ডারডार्কের পরামর্শগুলির সংমিশ্রণ নিয়ে চলেছি। আমার ব্যবহৃত চূড়ান্ত কোডটি ছিল:

CREATE TABLE closest_point as
SELECT DISTINCT ON (A.GID) A.GID AS CUST_ID, 
      (SELECT B.GID FROM "STORES" as B 
       ORDER BY ST_Distance(A.the_geom, B.the_geom) limit 1) as STORE_ID, 
       A.the_geom 
FROM "CUSTOMERS" as A, "STORES" as B;

এরপরে ফলাফলগুলি সঠিকভাবে কাজ করেছে তা নিশ্চিত করার জন্য আমি স্টোর স্তরে ভোরোনাই চিত্রটি তৈরি করেছি, অবশ্যই তারা কোনটি করেছে। সব মহান কাজের জন্য ধন্যবাদ!

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