বহুভুজগুলির মধ্যে প্রবাহ (সংযোগগুলি + মান) স্থানান্তরিত হচ্ছে


14

কিউজিআইএসে কোষ এবং একটি অতিরিক্ত স্তরের মধ্যে চলমান ডেটার প্রতিনিধিত্বকারী দুটি শেফফিল রয়েছে, নীচের চিত্রটি দেখুন

Example_of_shapefiles


স্থানান্তরিত ডেটা দ্বারা সংজ্ঞায়িত:

  • বহুভুজ "LayerA"(লাল রূপরেখা সহ স্বচ্ছ স্কোয়ার)। এছাড়াও এটি "LayerA"জিওসেন্ট্রয়েডের অবস্থানের উপর ভিজ্যুয়ালাইজ করা কক্ষের মধ্যে গতিবিধির প্রতিনিধিত্বকারী চেনাশোনাগুলির সাথে সম্পর্কিত ।

    LayerA_AT

  • পললাইন স্তর "Flows"(হলুদ / ধূসর তীর), "LayerA"বৈশিষ্ট্যগুলির জিওসেন্ট্রয়েডগুলির মধ্যে সংযোগের মাধ্যমে মানগুলি বোঝায়

    Flows_AT


লক্ষ্য স্তর:

  • বহুভুজ "LayerB"(গা dark় ধূসর রূপরেখা সহ হালকা লিলাক বৈশিষ্ট্য)।

    LayerB_AT

উপরন্তু, আমি ইতিমধ্যে স্থানান্তরিত করেছেন "FLUX"আন্দোলন মান কোষের মধ্যে থেকে এবং "LayerA"মধ্যে "LayerB"বহুভুজ, আমার আগের প্রশ্নের দেখুন: QGIS মধ্যে বহুভুজ মধ্যে ইনহেরিটেড মূল্য দেন? । এটি ব্যবহার করা হয়েছিল %এর $areaহিসাব।


একটা অর্থপূর্ণ সমাধান / হস্তান্তর পদ্ধতির হতে পারে / প্রেরণ / রূপান্তর প্রবাহিত সংযোগ দ্বারা প্রতিনিধিত্ব "Flows"সম্পর্ক থেকে এবং তার মান "LayerA"সম্পর্ক মধ্যে "LayerB"

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

অতিরিক্তভাবে, নতুন প্রবাহগুলি এর অনুরূপ শৈলীর উত্তরাধিকারী হবে "Flows"

অনুরোধ দ্বারা, আমি ডেটা একটি নমুনা প্রদান করতে পারেন।

প্রবাহের বৈশিষ্ট্যগুলির মধ্যে নয় "LayerA", তবে বৈশিষ্ট্যের মধ্যে রয়েছে "LayerB" । মূল লক্ষ্যটি হ'ল টেবিল / অরিজিন-গন্তব্য ম্যাট্রিক্স হিসাবে সম্ভাব্য "FLUX"সংযোগের জন্য গুণটি (অর্থাত্ / থেকে) অর্জন করা "LayerB"


কিছু প্রয়োজনীয়তা / মানদণ্ড রয়েছে যা মেনে চলা উচিত:

1. একই ঘরে বৈশিষ্ট্যগুলির অংশগুলির (হলুদ রঙে নির্বাচিত) মধ্যে কোনও প্রবাহ সংযোগ নেই

condition_1

২. একই বৈশিষ্ট্যের মধ্যে কোনও সংযোগ নেই এমনকি এর অংশগুলি বিভিন্ন কোষে রয়েছে

condition_2

৩. বৈশিষ্ট্যগুলির অংশগুলির মধ্যে সংযোগগুলি বিদ্যমান "LayerB"( "Union"আউটপুট ভিত্তিক ) যদি সেগুলি পুরোপুরি দুটি স্বতন্ত্র "LayerA"কক্ষের বৈশিষ্ট্যের মধ্যে থাকে

condition_3

৪. নতুন "FLUX"মূল্য যা পৌঁছে যাচ্ছে, তা নিচের চিত্রটিতে প্রদর্শিত হিসাবে গণনা করা হবে।

উদাহরণস্বরূপ, দুটি কোষের মধ্যে একটি সংযোগ রয়েছে Iএবং IIযেখানে "FLUX"রয়েছে 100। অন্যান্য মানগুলি ধরে নিলে, এর "NEW_FLUX"মধ্যবর্তী A'এবং B''প্রায় হবে 1.5625100শুধুমাত্র একটি উদাহরণ।

condition_4


তথ্যসূত্র:


1
সম্পাদনার জন্য ধন্যবাদ, আমি বুঝতে শুরু করি তবে খুব নিশ্চিত না। প্রত্যাশিত ফলাফল যুক্ত করতে আপনি কি আরও একবার নিজের মূল পোস্টটি সম্পাদনা করতে পারবেন? (উদাহরণস্বরূপ: নীচে এই ক্ষেত্রগুলির সাথে বহুভুজ_ বি সেন্ট্রোয়েডগুলির মধ্যে রেখা স্তর: - "ফিল্ড 1": ব্যাখ্যা, চেষ্টা করা ডাতাস ইত্যাদি)
জে মন্টিকোলো

1
স্পষ্টতার জন্য, আমরা এই জিএসই চ্যাট রুমে আরও নিখরচায় আলোচনা করতে পারি: chat.stackexchange.com/rooms/92038/… ?
জে মন্টিকোলো

1
প্রযুক্তিগত দিক থেকে সবকিছু করণীয়, তবে আপনি আসলে কী অর্জন করার চেষ্টা করছেন? আমার কাছে মনে হচ্ছে যে আপনি একটি সাধারণীকরণ গ্রিড থেকে আরও সূক্ষ্ম দানাদার ভূগোল থেকে ডেটা বিভক্ত করার চেষ্টা করছেন। আমি আপনাকে ভুল না করলে এটি খুব বিভ্রান্তিকর ফলাফলের দিকে নিয়ে যেতে পারে। যদি আপনার কাছে "স্তর বি" স্তরে প্রবাহ সম্পর্কে ডেটা না থাকে তবে কোনও গাণিতিক কৌশল তাদের পুনরায় তৈরি করতে পারে না। এটি পিক্সেল স্তরের জুম করার সমতুল্য এবং একটি ত্রুটিযুক্ত পুলিশ মুভিতে কম রেজোলিউশন চিত্র ব্যবহার করে একটি 3 ডি ঘূর্ণন করুন।
মারহফ

উত্তর:


4

ভার্চুয়াল স্তরগুলির সাথে, তাত্ত্বিকভাবে, এটি সম্ভব (শেফফায়ালগুলি সহ, প্রক্রিয়াটি অতিরিক্ত দীর্ঘ হবে, তবে স্তরগুলি যদি একটি স্পেসিয়াল ডেটাবেসে থাকে তবে আমি মনে করি এটি অনেক দ্রুত)।

এখানে কোড:

WITH inter_ab AS ( 
--create intersection between LayerA and LayerB 
SELECT LayerA.id || '_' || LayerB.FLAECHEID AS id, 
LayerA.id AS id_a, 
ST_AREA(LayerA.geometry) AS area_a, 
LayerB.FLAECHEID AS id_b, 
ST_INTERSECTION(LayerB.geometry, LayerA.geometry) AS geom 
FROM LayerA, LayerB 
WHERE ST_INTERSECTION(layerB.geometry, layerA.geometry) IS NOT NULL 
),

--calculation of the new flux value 
new_flux AS (SELECT t1.id_b AS origine, 
t2.id_b AS dest, 
SUM(Flows.flux * ST_AREA(t1.geom) / t1.area_a * ST_AREA(t2.geom) / t2.area_a) AS value  
FROM inter_ab t1, inter_ab t2, flows 
-- no connection between the same feature 
WHERE t1.id <> t2.id 
-- rule 1 
AND t1.id_a <> t2.id_a 
-- rule 2 
AND t1.id_b <> t2.id_b 
-- get flow data 
AND flows.origine = t1.id_a 
AND flows.dest = t2.id_a 
GROUP BY t1.id_b, t2.id_b
)

--create flows between original layerB features
SELECT new_flux.origine,
new_flux.dest,
new_flux.value AS flux,
make_line(ST_CENTROID(t3.geometry), ST_CENTROID(t4.geometry)) AS geom --ST_MakeLine under postGIS
FROM LayerB t3,
LayerB t4,
new_flux
WHERE t3.FLAECHEID = new_flux.origine
AND t4.FLAECHEID = new_flux.dest

গ্রাফিকাল আউটপুট মত দেখতে হবে

আউটপুট

ফলাফলটি নিজেই পরীক্ষা করা হয়েছিল। "FLUX"মানগুলির মধ্যে পার্থক্য অবহেলাযোগ্য।

চূড়ান্ত আউটপুট স্টাইলগুলি উত্তরাধিকার সূত্রে প্রাপ্ত হবে "Flow"এবং দেখতে হবে

Output_Final

আমি এটি কয়েকটি ডেটা দিয়ে পরীক্ষা করার পরামর্শ দিচ্ছি, এবং যদি এটি বড় ডেটা সেটগুলির জন্য খুব বেশি সময় নেয়, তবে পদক্ষেপগুলি ( "inter_ab"- "new_flux") পর্যায়ক্রমে কার্যকর করুন এবং ফলাফলটি সংরক্ষণ করুন এবং পরবর্তী কোয়েরিটি কার্যকর করুন।


1
দুঃখিত, আমি ফরাসি এবং আমি Polygon_bস্তর হিসাবে একটি ওপেন ফরাসি জনপদ ডেটাবেস ব্যবহার করি এবং এটির মূল ক্ষেত্রটি id_geofla। আমি সংশোধন করেছি।
জে মন্টিকোলো

1
আমি ব্যাখ্যা যোগ করেছি, আশা করি এটি সাহায্য করবে।
জে মন্টিকোলো

1
হ্যাঁ বহুভুজ থাকা সঠিক। পুরো বহুভুজ_ বি স্তর এবং বহুভুজ_এর জন্য আমি সংশোধন করেছি * ** মান ** যদি কোনও প্রবাহ কোনও সংযোগ তৈরি করে। আমার জন্য, ফলাফলটি কোনও লাইন স্তর নয়, তবে প্রবাহ স্তর দ্বারা আমদানি করা বহুভুজ_এ মান সহ সরাসরি বহুভুজ_ বি স্তর।
জে মন্টিকোলো

4

আপনি তিনটি স্তরগুলির মধ্যে একটি জোড় করতে পারেন, তারপরে মোট layerB। ভার্চুয়াল স্তরগুলি সম্ভবত ব্যবহার করা যেতে পারে। আমি নিশ্চিত নই যে গুরুত্বপূর্ণ ডেটাটি লেয়ারে রয়েছে layerAবা flowনেই .. এখানে একটি (অপরিবর্তিত) সম্ভাবনা রয়েছে:

SELECT b.id, b.geometry, sum(a.myVar)
FROM layerB b
LEFT JOIN flow f
   ON ST_Intersects(ST_EndPoint(f.geometry),b.geometry)
 JOIN layerA a
   ON ST_Intersects(ST_StartPoint(f.geometry),a.geometry)
GROUP BY b.id

আমি এই সমাধানটি কাজ করে চেষ্টা করেছি। গুরুত্বপূর্ণ তথ্য আছে "Flows"
তারাস

@ তারাস দুর্দান্ত! আপনি সামগ্রিকগুলি যেমন sum(f.flow_var)বা এমনকি হিসাবেও ব্যবহার করতে পারেনsum(fl.flow_var * a.poly_var)
জেজিএইচ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.