পোস্টগ্র্রেএসকিউএল / পোস্টজিআইএস ব্যবহার করে ভেক্টর স্তরের প্রতিটি বহুভুজটির জন্য রাস্টার পরিসংখ্যান (সর্বনিম্ন, সর্বোচ্চ, গড়) গণনা করার চেষ্টা করছি।
বহুভুজ এবং রাস্টার এর মধ্যবর্তী ছেদটি গণনা করে এবং তারপরে একটি ওজনযুক্ত গড় গণনা করে কীভাবে এটি করবেন তা এই জিআইএস.এসই উত্তরটি বর্ণনা করে: https://gis.stackexchange.com/a/19858/12420
আমি নিম্নলিখিত কোয়েরিটি ব্যবহার করছি ( dem
আমার রাস্টারটি কোথায় , topo_area_su_region
আমার ভেক্টর এবং toid
একটি অনন্য আইডি:
SELECT toid, Min((gv).val) As MinElevation, Max((gv).val) As MaxElevation, Sum(ST_Area((gv).geom) * (gv).val) / Sum(ST_Area((gv).geom)) as MeanElevation FROM (SELECT toid, ST_Intersection(rast, geom) AS gv FROM topo_area_su_region,dem WHERE ST_Intersects(rast, geom)) foo GROUP BY toid ORDER BY toid;
এটি কাজ করে তবে এটি খুব ধীর। আমার ভেক্টর স্তরের 2489k বৈশিষ্ট্য রয়েছে, প্রতিটি প্রত্যেকে 90 মিটার প্রক্রিয়া করতে নেয় - পুরো স্তরটি প্রক্রিয়া করতে কয়েক দিন সময় লাগে। আমি যদি কেবলমাত্র ন্যূনতম এবং সর্বাধিক (যা ST_Area- এ কলগুলি এড়িয়ে চলে) গণনা করি তবে গণনার গতি উল্লেখযোগ্যভাবে উন্নত বলে মনে হচ্ছে না।
যদি আমি পাইথন (জিডিএল, নুমপি এবং পিআইএল) ব্যবহার করে অনুরূপ গণনা করি তবে ডেটা প্রসেস করতে যে পরিমাণ সময় লাগে তা আমি উল্লেখযোগ্যভাবে হ্রাস করতে পারি, যদি রাস্টারকে ভেক্টরাইজিংয়ের পরিবর্তে (এস 07 ইনট্রেকশন ব্যবহার করে) আমি ভেক্টরকে রাস্টারাইজ করি। কোডটি এখানে দেখুন: https://gist.github.com/snorfalorpagus/7320167
আমার আসলে ওজনযুক্ত গড়ের দরকার নেই - একটি "যদি এটি স্পর্শ করে তবে এটি এর মধ্যে রয়েছে" পদ্ধতির যথেষ্ট ভাল - এবং আমি যুক্তিযুক্ত নিশ্চিত যে এটিই হ'ল জিনিসগুলি ধীর করে দিচ্ছে।
প্রশ্ন : পোস্টজিআইএসের মতো আচরণ করার কোনও উপায় আছে কি? অর্থাত্ রাস্টার থেকে সমস্ত কোষের মানগুলি প্রত্যাবর্তন করতে যা একটি বহুভুজ স্পর্শ করে, সঠিক ছেদটি না করে।
পোস্টগ্র্রেএসকিউএল / পোস্টজিআইএস-এ আমি খুব নতুন, তাই হয়তো অন্য কিছু আছে যা আমি ঠিক করছি না। আমি উইন্ডোজ ((২.৯ গিগাহার্টজ আই,, ৮ জিবি র্যাম) এ পোস্টগ্রিজ এসকিউএল ৯.৩.১ এবং পোস্টজিআইএস ২.১ চালাচ্ছি এবং এখানে প্রস্তাবিত ডাটাবেস কনফিগারেশনটি টুইট করেছে: http://postgis.net/workshops/postgis-intro/tuning.html