मैं कुछ रैस्टर / बहुभुज चौराहों को करने के लिए PostGIS2.0 का उपयोग कर रहा हूं । मुझे यह समझने में कठिनाई हो रही है कि मुझे किस ऑपरेशन का उपयोग करना चाहिए, और यह प्रदर्शन करने का सबसे तेज़ तरीका क्या है। मेरी समस्या इस प्रकार है:
- मेरे पास एक बहुभुज और एक रेखापुंज है
- मैं उन सभी पिक्सेल को खोजना चाहता हूं जो बहुभुज के भीतर आते हैं, और पिक्सेल मूल्य का योग प्राप्त करते हैं
- और (अपडेट की गई समस्या): मैं कुछ पिक्सेल के लिए बड़े पैमाने पर मान प्राप्त कर रहा हूं जो क्वेरी करते समय मूल रेखापुंज में मौजूद नहीं होते हैं
मुझे यह समझने में कठिनाई हो रही है कि मुझे इसका उपयोग करना चाहिए ST_Intersects()
या नहीं ST_Intersection()
। मुझे यह भी पता नहीं है कि मेरे पिक्सल को समेटने के लिए सबसे अच्छा तरीका क्या है। यहाँ पहला तरीका है जिसे मैंने (# 1) आज़माया है:
SELECT
r.rast
FROM
raster as r,
polygon as p
WHERE
ST_Intersects(r.rast, p.geom)
यह rast
मानों की एक सूची देता है , जो मुझे यकीन नहीं है कि क्या करना है। मैंने सारांश आँकड़ों का उपयोग करके गणना करने की कोशिश की, ST_SummaryStats()
लेकिन यह निश्चित नहीं है कि यह सभी पिक्सेल के भारित-योग है जो बहुभुज के भीतर स्थित हैं।
SELECT
(result).count,
(result).sum
FROM (
SELECT
ST_SummaryStats(r.rast) As result
FROM
raster As r,
polygon As p
WHERE
ST_Intersects(r.rast, p.geom)
) As tmp
अन्य दृष्टिकोण जो मैंने कोशिश की है (# 2) का उपयोग करता है ST_Intersection()
:
SELECT
(gv).geom,
(gv).val
FROM
(
SELECT
ST_Intersection(r.rast, p.geom) AS gv
FROM
raster as r,
polygon as p
WHERE
ST_Intersects(r.rast, p.geom)
) as foo;
यह ज्यामिति की एक सूची देता है जिसका मैं आगे विश्लेषण करता हूं, लेकिन मुझे लगता है कि यह कम कुशल है।
मैं स्पष्ट नहीं हूं कि ऑपरेशन का सबसे तेज क्रम कौन सा है। क्या मुझे हमेशा बहुभुज को रैस्टर में चुनना raster, polygon
या polygon, raster
बदलना चाहिए , ताकि यह हो raster, raster
?
संपादित करें: मैंने दृष्टिकोण 2 को कुछ R.K.
लिंक के विवरण के साथ अद्यतन किया ।
# 2 दृष्टिकोण का उपयोग करते हुए, मैंने परिणामों में निम्नलिखित त्रुटि देखी है जो इस कारण का हिस्सा है कि मुझे आउटपुट समझ में नहीं आया। यहाँ मेरे मूल रेखापुंज की छवि है, और बहुभुज की एक रूपरेखा है जिसका उपयोग इसे अंतर करने के लिए किया जा रहा है:
और यहाँ PostGIS का उपयोग कर चौराहे का परिणाम है:
परिणाम के साथ समस्या यह है कि 21474836 के मूल्य वापस किए जा रहे हैं, जो मूल रेखापुंज में नहीं हैं। मुझे नहीं पता कि ऐसा क्यों हो रहा है। मुझे संदेह है कि यह छोटी संख्याओं से संबंधित है (लगभग 0 से विभाजित), लेकिन यह गलत परिणाम देता है।
ST_SummaryStats()
# 1 का उपयोग किया है , लेकिन यह सुनिश्चित नहीं है कि यह # 2 के लिए कैसे किया जाए।