পোস্টজিআইএস ব্যবহার করে টপোলজিকাল সম্পর্ক চিহ্নিত করা


16

আমি পোস্টজিআইএস ব্যবহার করে একটি বেসিক টাইপোলজি বিশ্লেষণ করার চেষ্টা করছি। আমার উদ্দেশ্য হ'ল অন্যান্য বহুভুজকে স্পর্শ করে এমন বহুভুজ খুঁজে পাওয়া। এটি করতে, আমি ভেবেছিলাম ST_GetFaceEdgesকাজ করবে ( রেফারেন্স )। আমি আমার ডাটাবেসে প্রতিটি বহুভুজ পরীক্ষা করতে এবং এটি স্পর্শ করা অন্যান্য বহুভুজগুলির তালিকা করতে চাই list নীচের চিত্রটিতে আমি ফলাফলটি আশা করব যে বহুভুজগুলির মধ্যে দুটি (যা ভবনগুলি) একটি বিল্ডিংয়ের স্পর্শ করে এবং অন্য 4 টির ফলাফল বলতে তারা 0 টি বহুভুজ স্পর্শ করে।

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

তবে কী করতে হবে তা বুঝতে আমার কিছুটা সমস্যা হচ্ছে। আমি উদাহরণটি অনুলিপি করার চেষ্টা করার সময় এর কয়েকটি অংশ ছিল যা আমি বুঝতে পারি নি।

-- Returns the sequence, edge id
-- , and geometry of the edges that bound face 1
-- If you just need geom and seq, can use ST_GetFaceGeometry
SELECT t.seq, t.edge, geom
FROM topology.ST_GetFaceEdges('tt',1) As t(seq,edge)
    INNER JOIN tt.edge AS e ON abs(t.edge) = e.edge_id;

আমি নিশ্চিত নন যে topologyকোনও টেবিল, কলাম বা ফাংশনের কোনও অংশের নাম কিনা । আমি ধরে নিয়েছিলাম যে এটি টেবিল, তবে আমি নিশ্চিত নই।

-- try out on sample of data
-- Table is called 'TestArea', column used is 'fid_1'
SELECT t.seq, t.edge, geom
FROM  TestArea.ST_GetFaceEdges('fid_1', 1) As t(seq,edge)
    INNER JOIN tt.edge AS e ON abs(t.edge) = e.edge_id;

আমিও নিশ্চিত নই যে অভ্যন্তরীণ যোগদানের ক্রিয়াকলাপটি কী - এটি কি আসল বস্তুর ফলাফলতে যোগ দেয়?


4
আমি জানি আন্ডার ডার্ক তার চরিত্রগতভাবে পরিষ্কার ডায়াগ্রাম দিয়ে এর জবাব দিয়েছে, তবে আমি নিশ্চিত নই যে আপনার বহুভুজটি প্রথম স্থানে টপোলজিকভাবে সম্পর্কিত কিনা। টপোলজি, এক্ষেত্রে সত্তাগুলির মধ্যে তাদের লৌকিক উপস্থাপনা থেকে পৃথক হিসাবে একটি যৌক্তিক সম্পর্ককে বোঝায় CreateTopologyএবং ( পোস্টজিআইএসে ) এর সাথে একটি স্কিমা স্থাপন করা প্রয়োজন ( বিট.ইলি / ওএলক 8 কিওয়াই ) তবে আপনার বিল্ডিংগুলি যেভাবে ডিজিটাইজড করা হয়েছে তা আমার কাছে দেখায় looks তাদের প্রান্তের চাক্ষুষ ঘনিষ্ঠতা সত্ত্বেও এগুলি টপোলজিকভাবে স্বতন্ত্র। ভবিষ্যতের প্রশ্নকারীদের সচেতন হওয়ার জন্য কেবল কিছু।
মিরসিভিকিং

এর অর্থ কি AddTopoGeometryColumnক্যোয়ারী চালানোর আগে আমার টেবিলে একটি যুক্ত করা দরকার ? ST_Touchesমানগুলি থেকে প্রাপ্ত ফলাফলের ভিত্তিতে আমি বুদ্ধিমানভাবে যাচাই করেছি তবে সম্ভবত এটি ছিল যথাযথ।
djq

1
কেবল আপনাকে কল করার দরকার নেই AddTopoGeometryColumn, তবে আপনার ডেটা টপোলজিক্যালি সুসংগত উপায়ে ডিজিটালাইজড করা দরকার। উদাহরণস্বরূপ, traditionতিহ্যগতভাবে আপনি দুটি বহুভুজ হিসাবে দুটি আধা বিচ্ছিন্ন ঘরগুলি ডিজিটালাইজ করবেন এবং ভাগ করে নেওয়া প্রাচীরের ছোঁয়াকে নিশ্চিত করতে আপনার জিআইএসে "স্ন্যাপ টু প্রান্তকে" ব্যবহার করবেন তবে এটি প্রতিটি প্রান্তে কাকতালীয় পয়েন্ট সহ দুটি কাকতালীয় লাইন হিসাবে সংরক্ষণ করা হবে। তবে টপোলজিকভাবে এগুলি ডিজিটাইজ করার অর্থ এই যে ভাগ করা প্রাচীরটি সত্যিকার অর্থে প্রতিটি বহুভুজ দ্বারা ভাগ করা কেবল একটি লাইন এবং দুটি নোড। ST_Touchesটপোলজিকাল নয়, কেবল ঘনিষ্ঠতার জন্য একটি স্থানিক পরীক্ষা করে।
MerseyViking

উত্তর:


19

পরিবর্তে আপনি এসT_ টাচ ব্যবহার করতে পারেন :

ST_Touches - জ্যামিতির কমপক্ষে একটি বিন্দুতে মিল থাকলে, সত্য প্রদান করে তবে তাদের অভ্যন্তরগুলি ছেদ না করে।

ST_ টাচগুলি উদাহরণস্বরূপ সত্য প্রদান করে

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

গণনা পাওয়ার জন্য এই জাতীয় কিছু কাজ করা উচিত:

SELECT a.id, count(*)
FROM polygon_table as a
JOIN polygon_table as b
  ON ST_Touches(a.the_geom,b.the_geom)
GROUP BY a.id

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

1
আমি ঠিক বুঝতে পেরেছি যে এটি প্রতিটি ক্ষেত্রে সত্য / মিথ্যা মান দেয় তাই আমাকে যতটা করতে হবে তা হ'ল কত সত্য মান রয়েছে তা গণনা করা। ধন্যবাদ!
djq

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