পোস্ট_জিআইএস-এ স্টিউনিউন ছাড়া অন্য কোনও দ্রবীভূত ফাংশন রয়েছে কি?


22

আমি একটি টেবিলের বহুভুজ বৈশিষ্ট্যগুলির মধ্যে ভাগ করা সীমানা দ্রবীভূত করার জন্য একটি ফাংশন সন্ধান করছি। ST_UNION () প্রায় আমি যা খুঁজছি তা করে তবে এটি একটি সাধারণ সীমানা ভাগ করে নেয় কিনা তা নির্বিশেষে স্তরটির সমস্ত বহুভুজ থেকে বহুভুজ তৈরি করে। আমি বরং কেবল বহুভুজগুলির মধ্যে সীমানা বিভক্ত করতাম যা একে অপরকে স্পর্শ করে। আমি বুঝতে পেরেছি, ST_TOUCHES () ব্যবহার করার কিছু উপায় থাকা উচিত তবে তারপরে কোনও দ্রবীভূত ফাংশনটির প্রয়োজন এত সাধারণ মনে হয় যে এটি অর্জনের জন্য যদি কোনও অন্তর্নির্মিত ফাংশন না থাকে তবে আমি অবাক হয়ে যাব।

ব্যবহারের কেসটি দেখতে এরকম দেখাচ্ছে: আমি একটি বড় ইউরোপীয় দেশের জন্য কোরিন ল্যান্ডকভার ডেটা ডাউনলোড করেছি এবং আমি বিভিন্ন বন ধরণের (প্রায় এক টেবিলের প্রায় 75,000 বহুভুজ) মধ্যে সীমানা দ্রবীভূত করতে চাই। আমি ST_UNION চেষ্টা করেছিলাম, তবে এটি আমাকে "মেমরির বাইরে" ত্রুটি দিয়ে ব্যর্থ করে (30,000 বহুভুজ যদিও কাজ করেছে):

create table corine00 as 
  select st_union(the_geom) as the_geom, 
         sum(area_ha) as area_ha,
         substr(code_00,1,2) as code_00
  from clc00_c31_forests
  group by substr(code_00,1,2)

দ্রষ্টব্য: সমস্ত ফরেস্ট কোডগুলি '31' দিয়ে শুরু হয় এবং আমি পোস্টজিআইএস 1.4, জিওএস সংস্করণ ব্যবহার করছি: 3.2.0-সিএপিআই-1.6.0

উত্তর:


21

ST_MemUnion () একটি নিষ্পাপ এবং ধীর মেমরি বান্ধব প্রক্রিয়া চালাবে। আপনি এটি চেষ্টা করতে পারেন, যদি আপনার সমস্যাটি যথেষ্ট ছোট হয় তবে এটি একটি যুক্তিসঙ্গত সময়ে শেষ হতে পারে। আপনি নিজের সমস্যাটিকে কেবল অর্ধেক ভাঙতে পারেন, তারপরে অর্ধগুলি একসাথে চালান। যেহেতু ফলাফলগুলির কাছে ইনপুটগুলির তুলনায় অনেক কম পয়েন্ট থাকবে আপনি পুরো সমস্যাটিকে সেইভাবে মেমরির সাথে ফিট করতে সক্ষম হতে পারেন। অথবা চূড়ান্ত একীকরণের অর্ধেকগুলিতে দ্রুত স্মৃতি ক্ষুধার্ত রুটিন এবং ধীরে ধীরে রুটিন ব্যবহার করুন।


4
পল আপনাকে এখানে আনার জন্য দুর্দান্ত, আপনাকে অতুলনীয় দক্ষতা আনার জন্য ধন্যবাদ।
fmark

1
ধন্যবাদ, দেখে মনে হচ্ছে আমার সমস্যা যথেষ্ট ছোট নয়। ST_MemUnion () এখন 24 ঘন্টা চলছে। আমি সমস্যা বিভক্ত করার চেষ্টা করব।
আন্ডার ডার্ক

5

আমার বিশ্বাস এস এসডাম্প আপনি যা চান:

এসT_ ডাম্প :

জ্যামিতি_ডাম্পের একটি সেট (জিওম, পাথ) সারিগুলি প্রদান করে, যা জ্যামিতি জি 1 তৈরি করে .... উদাহরণস্বরূপ এটি মাল্টিপলিজোনগুলিকে পোলিজনে বিস্তৃত করতে ব্যবহার করা যেতে পারে। ...

সুতরাং আপনার ক্ষেত্রে:

 SELECT (ST_Dump( ST_Union( the_geom ) )).geom
 FROM clc00_c31_forests
 GROUP BY substr(code_00,1,2)

আমি নিশ্চিত নন যে আপনি যে টেবিল তৈরির চেষ্টা করছেন তার সাথে এটি কীভাবে যোগাযোগ করবে, তবে এটি আপনাকে পৃথক এন্ট্রি হিসাবে জ্যামিতি দেবে। এরপরে জ্যামিতিতে ডেটা সংগ্রহ করার জন্য আপনি দুটি টেবিলের মধ্যে একটি স্থানিক যোগদান করতে সক্ষম হবেন (&& এবং ST_Contains ব্যবহার করে)।


2
দ্রষ্টব্য: আপনি কেবলমাত্র এস এস ইউনিয়নের মেমরি সমস্যাগুলি হ্যান্ডেল করলে এটি কেবল সহায়ক হবে! :)
yhw42

4

আপনার পোস্টজিআইএস জিওএস ৩.১.০+ এর বিপরীতে সংকলিত আছে? এই সংস্করণটির জন্য, একটি দ্রুত ক্যাসকেড ইউনিয়ন কার্যকর করা হয়েছিল, তবে যদি এটি না পাওয়া যায় তবে পুরানো কোডটি ব্যবহার করা হবে যা প্রস্থের ধীরতার আদেশ।

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

  • ডিস্ক অ্যাক্সেস ধীর, তাই ক্যাশে ডেটা আরও মেমরি ব্যবহার করে উচ্চতর কর্মক্ষমতা অর্জন করা যেতে পারে!
    • বৃদ্ধি shared_buffers
    • শারীরিক র‍্যাম - ওএসের * 75% প্রয়োজন
  • বাছাই মেমরিতে দ্রুত হয়
    • বৃদ্ধি work_mem
  • ডিস্ক ক্লিন আপ আরও মেমরির সাথে দ্রুত হয়
    • বৃদ্ধি maintenance_work_mem
  • প্রতি সংযোগ বরাদ্দ
  • এছাড়াও
    • বৃদ্ধি wal_buffers
    • বৃদ্ধি checkpoint_segments
    • কমান random_page_cost

আপনার ক্ষেত্রে, আমি বাড়ানোর চেষ্টা করব shared_buffers, সাধারণ সুপারিশটি একটি ডেটাবেস সার্ভারের জন্য আপনার উপলব্ধ মেমরির 25%, তবে এটির বর্তমান মান 3-4x করে বাড়ানোর চেষ্টা করুন এবং এটি সম্পূর্ণ হয় কিনা তা দেখার জন্য।


postgis_geos_version () প্রত্যাবর্তন করে: 3.2.0-CAPI-1.6.0 ... আমি মনে করি এটি ঠিক আছে। ধন্যবাদ, এস 07 সংগ্রহ করুন।
underdark

হ্যাঁ, এসT_ সংকলন কোনও সীমানা দ্রবীভূত করে না বলে মনে হয় এবং এটি একটি বিশালাকার বহুগুণও তৈরি করে।
আন্ডার ডার্ক

হ্যাঁ, আমি পৃষ্ঠাটি এসT_ সংকলনের জন্য ভুলভাবে পড়েছি। পোস্টগ্রিসের স্মৃতি ব্যবহারের জন্য আরও নির্দিষ্ট পরামর্শ দেওয়ার জন্য আমি আমার উত্তর আপডেট করেছি।
10w
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.