Postgis ডাটাবেস ক্যোয়ারী অপ্টিমাইজেশন


10

আমার কাছে ডিটিইডি ফর্ম্যাটে রাস্টারগুলির একটি সেট রয়েছে যা আমি রেস্টার 2pgsql কমান্ড লাইন সরঞ্জামটি ব্যবহার করে পোস্টজিআইএস ডাটাবেসে লোড করি।

প্রতিটি রাস্টার কেবল একটি সারিতে সংরক্ষণ করা হয় এবং মুক্তি এবং রাস্টার ফর্ম্যাটটির মান দ্বারা বর্ণিত।

এখন, আমি একটি ডাটাবেস ফাংশন তৈরি করতে চাই যা একটি বিন্দুর দ্রাঘিমাংশ এবং দ্রাঘিমাংশ নেয় এবং এই পয়েন্টের সাথে পিক্সেলের মান প্রদান করে।

আমার সমস্যাটি হ'ল এটি করতে বেশ সময় লাগে (3-4 সেকেন্ড) কারণ ডেটাবেস ওড্রয়েড বোর্ডে কাজ করে।

আমি জানি যে আমি প্রক্রিয়াকরণটি ডেটাসেটটি বেশ বড় (রাস্টাররা পুরো ইউকে অঞ্চল জুড়ে) তবে পোস্টগ্র্রেএসকিউএল এবং পোস্টজিআইএস-এর সাথে আমি খুব বেশি পরিচিত না বলে আমি সন্দেহ করি যে এটি আরও দ্রুত করা যায় can

আমি এ পর্যন্ত এটিই করেছি:

SELECT ST_Value(rast, ST_GeomFromText(CONCAT('POINT(', $1, ' ', $2, ')'), 4326))
FROM (
    SELECT * FROM rasters
    WHERE rast && ST_GeomFromText(CONCAT('POINT(', $1, ' ', $2, ')'), 4326)
) x;

$1এবং $2যথাক্রমে দীর্ঘ এবং ল্যাট হয়।


2
পোস্টগিসে আমদানি করার সময় আপনি কি রাস্টারকে টাইলসে কাটলেন? (প্যারামিটার -t প্রস্থ x উচ্চতা)?
mutolisp

হ্যা, আমি করেছিলাম. এটি কিছুটা পারফরম্যান্সের উন্নতি করেছে। আমার সম্ভবত এটিও যুক্ত করা উচিত যে ডাটাবেসটি অড্রয়েড বোর্ডে রয়েছে, সুতরাং এটি ডেস্কটপ পিসির চেয়ে উল্লেখযোগ্যভাবে ধীর গতিতে কাজ করে। আমি কেবল ভাবছিলাম যে আমি কোনওভাবে রাস্টার প্রসেসিংয়ের পদ্ধতির পরিবর্তন করতে পারি যাতে এটি কম অপ্রয়োজনীয় গণনা করে। উদাহরণস্বরূপ, প্রথমদিকে, আমি সমস্ত রেস্টারদের উপর ST_Value ফাংশনটি কল করছিলাম এবং তারপরে আমি সারিটির সন্ধান করব যাতে কিছুটা মূল্য রয়েছে। এটি ছিল সহজতম পদ্ধতির তবে অনেক ধীর গতিতে কাজ করেছে।
zedadead

2
ব্যবহার ST_SetSRID(ST_MakePoint($1, $2),4326)স্ট্রিং concats পরিবর্তে যদি আপনি যথেষ্ট পুনরাবৃত্তিও হয় কিছু সময় বাঁচাতে পারেন।
স্ক্রো

1
এটি অনেক সাহায্য করবে বলে মনে হয় না তবে আপনাকে ধন্যবাদ। আমি যখন অন্য একটি কলাম যুক্ত করার কথা ভাবছিলাম যখন টেবিলটি তৈরি করা হয় যা কেবলমাত্র একটি রাস্টারের জন্য কেবল একটি বাউন্ডিং বাক্স ধারণ করে। সম্ভবত এইভাবে একটি ডান রাস্টারটি আরও দ্রুত পাওয়া যেতে পারে ... এছাড়াও, আমি ভাবছিলাম যে কোণার স্থানাঙ্কের ভিত্তিতে রাস্টারটিতে পিক্সেল অবস্থানের প্রাক-গণনা এবং দীর্ঘ / ল্যাটের পিক্সেল ধাপে সহায়তা করতে পারে ... যদি কারও কাছে থাকে সেগুলি নিয়ে তাদের ধন্যবাদ জানাতে আমি কৃতজ্ঞ হব :)
zedsdead

2
বোতল ঘাড় কোথায় আছে তা পরীক্ষা করতে আপনি "ব্যাখ্যা" ব্যবহারের চেষ্টা করতে পারেন।
মিটোলিস্প

উত্তর:


1

আপনি এটি চেষ্টা করতে পারেন:

--calculate and store geom point just One time
WITH point_geom AS 
(
    SELECT ST_setsrid(ST_GeomFromText('POINT('|| $1 || ' '|| $2 || ')'), 4326) as geom
)
-- Your subquery is maybe useless , alias "x" isn't used
SELECT ST_Value( rast, point_geom.geom )
FROM rasters
WHERE rast && point_geom.geom;

তবে আসল সমস্যা হ'ল রাস্টার জিজ্ঞাসাবাদ; ডেটাসেটটি টাইলিংয়ের সাথে প্রশ্নগুলি দ্রুত করা উচিত। আপনি PostGIS WKT রাস্টার ব্যবহার করার চেষ্টা করতে পারেন এবং এই টিউটোরিয়ালটি অনুসরণ করতে পারেন ।

আমি আশা করি এটি কার্যকর হবে,

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