পোস্টজিআইএসে রাস্টার পরিসংখ্যান গণনায় পারফরম্যান্স


9

পোস্টগ্র্রেএসকিউএল / পোস্টজিআইএস ব্যবহার করে ভেক্টর স্তরের প্রতিটি বহুভুজটির জন্য রাস্টার পরিসংখ্যান (সর্বনিম্ন, সর্বোচ্চ, গড়) গণনা করার চেষ্টা করছি।

বহুভুজ এবং রাস্টার এর মধ্যবর্তী ছেদটি গণনা করে এবং তারপরে একটি ওজনযুক্ত গড় গণনা করে কীভাবে এটি করবেন তা এই জিআইএস.এসই উত্তরটি বর্ণনা করে: 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

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


1
আমি আমার উত্তর সম্পাদনা করেছি। আমি বলতে ভুলে গেছি যে আমার উত্তরের ছেদটি কম সঠিক।
স্টিফান

উত্তর:


11

আপনি ঠিক বলেছেন, ST_Intersectionআপনার ক্যোয়ারীটি লক্ষণীয়ভাবে ধীর করে দিচ্ছে।

ব্যবহারের পরিবর্তে ST_Intersectionএটা ক্লিপ (করাই ভালো ST_Clip) বহুভুজ (আপনার ক্ষেত্রগুলিতে) সঙ্গে আপনার রাস্টার এবং বহুভুজ যেমন ফলাফলের ডাম্প ( ST_DumpAsPolygons)। সুতরাং প্রতিটি রাস্টার সেল স্বতন্ত্র মানগুলির সাথে একটি সামান্য বহুভুজ আয়তক্ষেত্রে রূপান্তরিত হবে।

ডাম্পগুলি থেকে ন্যূনতম, সর্বোচ্চ বা গড় প্রাপ্তির জন্য আপনি একই বিবৃতি ব্যবহার করতে পারেন।

এই ক্যোয়ারিতে কৌশলটি করা উচিত:

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_DumpAsPolygons(ST_Clip(rast, 1, geom, true)) AS gv
    FROM topo_area_su_region,dem 
        WHERE ST_Intersects(rast, geom)) AS foo 
            GROUP BY toid 
            ORDER BY toid;

বিবৃতিতে ST_Clipআপনি রাস্টার থাকে, তবে রাস্টার ব্যান্ড (= 1), বহুভুজ সংজ্ঞায়িত এবং যদি ফসল সত্য বা মিথ্যা হতে হবে।

এছাড়াও আপনি avg((gv).val)গড় মান গণনা করতে ব্যবহার করতে পারেন ।

সম্পাদনা

আপনার পদ্ধতির ফলাফল আরও সঠিক, তবে ধীর। সংমিশ্রণের ফলাফলগুলি ST_Clipএবং ST_DumpAsPolygonsতাদের আকারের 50% (বা 51%) এর চেয়ে কম ছেদ করা রাস্টার কোষগুলিকে উপেক্ষা করছে।

একটি করিন ল্যান্ড ব্যবহার চৌরাস্তা থেকে এই দুটি স্ক্রিন শট পার্থক্য দেখায়। প্রথম ছবি সহ ST_Intersection, দ্বিতীয় একটি ST_Clipএবং এর সাথে ST_DumpAsPolygons

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

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

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