কিউজিআইএস ব্যবহার করে প্রতিবেশী বহুভুজগুলির মান সংক্ষিপ্তকরণ?


11

আমি আশা করি আপনি নিম্নলিখিত সমস্যাটি সম্পর্কে আমাকে সহায়তা করতে পারেন: আমার একটি ভেক্টর (বহুভুজ) স্তর রয়েছে। আমি স্তরটিতে একটি বৈশিষ্ট্য যুক্ত করতে চাই যা - প্রতিটি বহুভুজের জন্য - তার সমস্ত প্রতিবেশী বহুভুজের একটি নির্দিষ্ট ক্ষেত্রের মান পূরণ করে।

আরও দৃ concrete় উদাহরণ দিতে: আমার কাছে জনসংখ্যার তথ্য সম্বলিত জেলাগুলির একটি বহুভুজ স্তর রয়েছে। এখন, প্রতিটি জেলার জন্য আমি জানতে চাই যে এর পার্শ্ববর্তী সমস্ত জেলায় কত লোক বাস করে।

আমার 300 টিরও বেশি জেলা থাকায় আমি প্রতিটি জেলার জন্য হাত দিয়ে এটি করতে পারি না।

কিউজিআইএস-এ আরও দক্ষতার সাথে এটি করার কোনও উপায় আছে কি?

উত্তর:


8

এই জাতীয় জিনিস স্পেশালাইটাল এবং এসকিউএল দিয়ে সর্বাধিক সম্পন্ন হয়।

প্রথমে আপনাকে একটি স্পাটিয়ালাইট ডাটাবেসে আপনার ডেটা লোড করতে হবে যা কিউআইজিএস দিয়ে জাহাজী ডিবিম্যানেজার প্লাগইন ব্যবহার করে করতে পারে। আমদানি ক্লিক করুন Layer/File button

একটি ডাটাবেসে আপনার ডেটা দিয়ে আপনি SQLবোতামটি ব্যবহার করে নিম্নলিখিত কোয়েরিটি চালাতে পারেন। আপনার ডেটা অনুসারে আপনাকে কলাম এবং টেবিলের নাম পরিবর্তন করতে হবে।

SELECT COALESCE(SUM(a2.pop),0) as pop_neighbours, 
        a1.pop, 
        a1.name, 
        a1.id, 
        a1.geomm FROM areas a1
LEFT OUTER JOIN areas a2 ON NOT a1.id = a2.id 
                            AND intersects(a2.geomm, a1.geomm)
GROUP BY a1.id

ক্যোয়ারী সরঞ্জামটিকে আপনার অনন্য আইডি কলাম (আইডি) এবং জ্যামিতি কলাম (জিম) বলুন, তারপরে কেবল লোডটি ক্লিক করুন।

আপনার অবশ্যই এটির মতো কিছু হওয়া উচিত, একবার আপনি অবশ্যই অবশ্যই এটির লেবেল করুন

এখানে চিত্র বর্ণনা লিখুন

কোয়েরি ব্রেকডাউন

আমরা স্তরটি নিজেই এতে যুক্ত হয়েছি:

LEFT OUTER JOIN areas a2 ON NOT a1.id = a2.id 
                            AND intersects(a2.geomm, a1.geomm)

তবে কেবল যেখানে জ্যামিতিগুলি ছেদ করে এবং আইডিস এক হয় না, অন্যথায় আমরা প্রতিটি বহুভুজের জন্য দু'বার একই রেকর্ডটি সহ শেষ করি। আমরা এমনও ব্যবহার করছি LEFT OUTER JOINযাতে আমরা রেকর্ডগুলি অন্তর্ভুক্ত করি যা যোগদান করে না অর্থাৎ কোনও প্রতিবেশী নেই have

নির্বাচন অংশে:

SELECT COALESCE(SUM(a2.pop),0) as pop_neighbours, 
            a1.pop, 
            a1.name, 
            a1.id, 
            a1.geomm

আমরা (কোনও প্রতিবেশী নয়) অন্যথায় তারা থাকার COALESCEজন্য রূপান্তর করতে ব্যবহার করছি ।NULLS0NULL

তারপরে আমরা কেবল GROUP BY a1.idযাতে প্রতিটি বহুভুজের জন্য একটি একক রেকর্ড পাই।


নাথান, আপনার উত্তর এবং সহায়ক ব্যাখ্যার জন্য অনেক ধন্যবাদ। এটি মোট স্থানিক এবং বর্গক্ষেত্রের জন্যও কাজ করেছিল!
অ্যালেক্স

+1 "ক্যোয়ারী ব্রেকডাউন" বিভাগটি দুর্দান্তভাবে করা হয়েছে এবং খুব সহায়ক।
হোবার

@ অ্যালেক্স ভাল জিনিস। গ্রহণ বোতামটি টিক দিতে ভুলবেন না।
নাথান ডাব্লু

2

এটি করার আরেকটি উপায় হ'ল গ্রাসে (গ্রাস টুলবক্স ব্যবহার করে বা সরাসরি গ্রাসে)। নীচের উদাহরণে, স্তর EA হ'ল দেশগুলির সাথে একটি ভেক্টর স্তর এবং বৈশিষ্ট্য সারণীতে প্রতি জনসংখ্যার সাথে কলামে একটি কলাম। আরও বিশদ ব্যাখ্যার জন্য এই পোস্টটি দেখুন ।

পদক্ষেপ 1) সীমানার সাথে যুক্ত এট্রিবিউট টেবিল সহ নতুন স্তর তৈরি করুন, যথাক্রমে বাম এবং ডানদিকে সীমানা রেখার সীমানাযুক্ত বহুভুজগুলির আইডি সহ দুটি কলাম রয়েছে

v.category EA out=EAc layer=2 type=boundary option=add
v.db.addtable EAc layer=2 col="left integer,right integer"
v.to.db EAc option=sides col=left,right layer=2 type=boundary

পদক্ষেপ 2) একটি সারণী তৈরি করতে একটি এসকিউএল চালান যা দেশী আইডিকে সমস্ত প্রতিবেশী দেশের জনসংখ্যার যোগফলের সাথে যুক্ত করে:

db.execute sql="CREATE TABLE tmp AS
SELECT ID, sum(pop) as population FROM (
SELECT DISTINCT EAc_2.left as ID, EAc.pop as pop
FROM EAc_2
LEFT JOIN EAc ON EAc_2.right = EAc.cat
WHERE EAc_2.left > -1 AND EAc_2.right > -1
UNION
SELECT DISTINCT EAc_2.right as ID, EAc.pop as pop
FROM EAc_2
LEFT JOIN EAc ON EAc_2.left = EAc.cat
WHERE EAc_2.left > -1 AND EAc_2.right > -1
) GROUP BY ID"

পদক্ষেপ 3) আসল অ্যাট্রিবিউট টেবিলের সাথে নতুন টেবিল টিম্পে যোগ দিন।

v.db.join map=EA@ConsStat layer=1 column=cat otable=tmp ocolumn=ID

আপনার ভেক্টর স্তরটির অ্যাট্রিবিউট টেবিলটিতে এখন সমস্ত প্রতিবেশী দেশগুলির সংখ্যার সংখ্যার সাথে অতিরিক্ত কলাম থাকা উচিত।


2

@ নাথান দ্বারা দুর্দান্ত উত্তর । আমি পাইকগিস এবং সুদৃশ্য ব্যবহার করে এটি করার চেষ্টা করেছি। স্কিরিপটি ডাউনলোড করার জন্য এই পোস্টটি দেখুন এবং এটি QGIS এ চালান। এই পদ্ধতির একটি সুবিধা হ'ল বৈশিষ্ট্য সারণীর অংশ হিসাবে আপনি ফলাফলগুলি পান।

এখানে চিত্র বর্ণনা লিখুন

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