পোস্টগিজ সহ আইসোলাইনগুলি আইসোপলিগনে রূপান্তর কীভাবে?


9

আমার কাছে একটি টেবিল রয়েছে আইসোলিনগুলির একটি পোস্টগিস টেবিল যা এটি সংজ্ঞায়িত করা হয়েছে:

CREATE TABLE myisolines
(
  gid serial NOT NULL,
  isotime timestamp without timezone,
  val numeric(10,4),
  geom geometry(LineString,4326)
);

দৃশ্যত এই লাইনস্ট্রিং অবজেক্টগুলি এর মতো দেখায়:

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

আমি আমার ডেটার স্থানিক ব্যাপ্তি জানি, তাই আমি একটি বক্সও যুক্ত করতে পারি, যাতে লাইনস্ট্রিংগুলি ধরণের বন্ধ হয়ে যায়।

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

আমি বহুভুজ সহ টেবিল myisopolygonsথেকে আইসোপলিগনগুলির একটি টেবিল তৈরি করতে চাই myisolines, এটি অবিচ্ছিন্ন হবে না তবে একটি অবিচ্ছিন্ন পৃষ্ঠ তৈরি করবে এবং valসর্বনিম্ন valআইসোলিনগুলির সাথে একটি কলাম থাকবে, যেখান থেকে বহুভুজ গঠিত হয়েছিল। আমি বুঝতে পারি এটি স্ব-বদ্ধ আইসোলিন (দ্বীপ) থেকে তৈরি হতে পারে, বা বক্স সহ আইসোলিন বন্ধ হয়ে যায়, সেক্ষেত্রে valসেই নির্দিষ্ট আইসোলিন থেকে নেওয়া উচিত। দৃশ্যত এটি দেখতে এইরকম হওয়া উচিত:

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

আমি ভেবেছিলাম যে আমি কোনওভাবে টপোলজি তৈরি করতে পারি এবং তারপরে বহুভুজগুলিতে মুখগুলি রূপান্তর করতে পারি, তবে কীভাবে এটি সঠিকভাবে করবেন তা আমি বুঝতে পারি না। কিভাবে এই কাজ করা যেতে পারে?

আরেকটি বিকল্প হ'ল বারবার এবং প্রতিটি তৈরি বহুভুজ মধ্যে পার্থক্য ফাংশন পুনরাবৃত্তভাবে ব্যবহার করা হবে, তবে আমি অনুমান করি যে এটি করার সঠিক উপায় নয় এবং স্পষ্টতই এগুলি মোটেও দ্রুত নয়।


ST_Split বা ST_ বিল্ডারিয়া আপনার সমস্যার পক্ষে ভাল প্রার্থী
0'11 এ

উত্তর:


3

এখানে একটি সমাধান ব্যবহার করে ST_Polygonize। এটি প্রতিটি সীমানার জন্য বহুভুজ তৈরি করে এবং বহুভুজ দ্বারা আচ্ছাদিত সর্বনিম্ন এবং সর্বাধিক উচ্চতা সরবরাহ করে। অ্যালগরিদম শিখর এবং হতাশার মধ্যে পার্থক্য করতে পারে না এবং এই ক্ষেত্রে ন্যূনতম এবং সর্বাধিক উভয়ের জন্য একই উচ্চতা ফিরে আসবে।

WITH closed_contours AS (
    SELECT 
      ST_Union(geom) AS geom 
    FROM 
      (SELECT geom FROM contours 
       UNION ALL 
       SELECT ST_SetSRID(ST_Boundary(ST_Expand(ST_Extent(geom), -1e-10)), 4326) 
       FROM contours) 
sq)

SELECT
  poly_id, 
  min(polys.geom) AS geom, 
  min(elevation)  AS min_elev, 
  max(elevation)  AS max_elev
FROM
  (SELECT row_number() OVER () AS poly_id, geom FROM
      (SELECT 
         (ST_Dump(ST_Polygonize(geom))).geom
       FROM closed_contours) dump
  ) polys
INNER JOIN contours ON ST_Intersects(polys.geom, contours.geom)
GROUP BY poly_id;

WITHধারা ক্যোয়ারী তাদের বিদ্যমান contours এবং সামান্য-সংকুচিত ব্যাপ্তি সঙ্গে unioning দ্বারা "বন্ধ" কোনো খোলা contours এবং। (ব্যাপ্তিটি যে কোনও ST_Extentএকক-নির্ভুলতা বাক্স তৈরি করে, যার ফলে ST_Polygonizeডলবে-নির্ভুলতার মধ্যে পুরোপুরি বন্ধ এবং নোড দেওয়া ইনপুটগুলির প্রয়োজন হয়) এর ফলে যে কোনও গোল-অফ ত্রুটিগুলি ধুয়ে ফেলতে চুক্তি করা হয় ) যদি আপনার রূপগুলি ইতিমধ্যে বন্ধ হয়ে গেছে (যেমন, আপনি একটি দ্বীপের সাথে কাজ করছেন), তবে এই পদক্ষেপটি বাদ দেওয়া যেতে পারে।


0

আমি খুব বেশি অভিজ্ঞ নই, তবে আমি জ্যামিতি এসT_ মেকপলিগন (জ্যামিতি আউটর্লিনস্ট্রিং, জ্যামিতি [] অভ্যন্তরীণ স্তরের) চেষ্টা করব;


এটি সত্যই প্রশ্নের সম্পূর্ণ উত্তর দেয় না।
জন পাওয়েল

0

আপনার ববক্স ব্যবহার করে এবং প্রতিটি কনট্যুর লাইনে পুনরাবৃত্তি করে, আপনি ST_ConcaveHullপ্রতিটি অঞ্চলকে বহুভুতে রূপান্তর করতে ব্যবহার করতে পারেন ।

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