PostGIS रेखापुंज योग (नक्शा बीजगणित)


14

मेरे पास विशेष दिनों में यात्रा के समय समकालिकता का प्रतिनिधित्व करने वाले बहुभुजों की एक तालिका है। प्रत्येक मूल बिंदु के लिए, पांच आइसोक्रोन ज्यामितीय (अलग-अलग पंक्तियों में संग्रहीत) हैं। प्रत्येक मूल बिंदु के लिए, मैं पांच आइसोक्रिंसेस (एक बाइनरी NULL या 1) को व्यवस्थित करना चाहता हूं, और फिर उन्हें एक ही रेखापुंज परत में संयोजित करता हूं। इस रेखापुंज परत के लिए एक साधारण मानचित्र बीजगणित की आवश्यकता होती है: योग / 5, ताकि अंत में प्रत्येक मूल एक रेखापुंज परत के साथ जुड़ा हो, जिसमें मान हो [NULL, 0.2, 0.4, 0.6, 0.8, 1], कितने के आधार पर घटक परतें ओवरलैप होती हैं। यह एक संभावना सतह है।

मेरा डेटा पोस्टग्रेज 9.3 (पोस्टजीआईएस के साथ) में संग्रहीत है। मेरी समस्या यह है कि जब मैं PostGIS रेखापुंज का उपयोग करना सीखना चाहता हूं, तो ऐसा लगता है कि वास्तव में एक बहुत ही कठिन सीखने की अवस्था है, और सभी उदाहरण मैं एक एकल रेखापुंज परत के साथ सौदा पा सकते हैं। उदाहरणों में, इस परत का उपयोग बहुभुज ओवरले के हिस्से के रूप में किया जाता है, शायद प्रत्येक बहुभुज के लिए रेखापुंज के मान का औसत। मुझे संयोजन के लिए एक प्रतिकृति उदाहरण नहीं मिला है: क) वेक्टर -> रेखापुंज ख) नक्शा बीजगणित; और c) मेरे प्रथम पैराग्राफ के अनुसार GROUP BY विशेषता।

यदि मुझे इस कार्य को करने के लिए GDAL या GRASS का उपयोग करना ठीक है, लेकिन ऐसा लगता है कि कुछ PostGIS को संभालने में सक्षम होना चाहिए; ऐसा करना सुविधाजनक होगा, इसलिए मेरा इनपुट डेटा पहले से ही पोस्टगिस ज्यामिति है; और मैं वास्तव में PostGIS रेखापुंज के साथ आना चाहता हूं ।

कुछ नमूना डेटा संरचना:

areaid    time        date          isogeom (polygon)
1000      07:15:00    2014-05-05    xxx
1000      07:15:00    2014-05-06    xxy
...
1006      07:15:00    2014-05-05    zzz

मैं क्षेत्र के आधार पर समूह को व्यवस्थित करना चाहता हूं, और फिर आने के लिए नक्शा बीजगणित करता हूं:

areaid    isorast (raster)
1000      aaa
1006      bbb

मैं PostGIS को शामिल करने में सफल नहीं रहा हूं। मेरा दृष्टिकोण वेक्टर को रेखापुंज में बदलने के लिए है, चूहों को सरणियों में डंप करने के लिए, और psycopg2 के माध्यम से संख्यात्मक सरणियों के साथ संयोजन करने के लिए, उन्हें एक GeoTIFF लिखने से पहले (शायद PostGIS में वापस रखा जाए)। आदर्श नहीं है, लेकिन सक्षम है।


1
अच्छा सवाल है। मैं पोस्टगीस रैस्टर भावना को जानने के लिए वास्तव में साझा करना चाहता हूं और मुझे यकीन है कि आप जो चाहते हैं वह संभव है। दुख की बात है कि आज बहुत व्यस्तता है।
जॉन पॉवेल

1
इस बोस्टनजीआईएस ब्लॉग में मानचित्र बीजगणित पर एक काफी कट्टर लेख है । इस ब्लॉग के लेखक भी उत्कृष्ट पुस्तक, पोस्टगिस इन एक्शन के लेखक हैं, जिसमें पोस्टगिस की रेखापुंज क्षमताओं की एक बहुत कुछ है। क्षमा करें, मैं एक अधिक प्रत्यक्ष उदाहरण के साथ नहीं आ सका।
जॉन पॉवेल

जवाबों:


3

आपको अपना स्वयं का समुच्चय लिखना होगा:

CREATE OR REPLACE function sum_raster_state(raster, raster)
returns raster
language sql
as $f$

SELECT
CASE $1
WHEN NULL THEN
      $2
ELSE
    ST_MapAlgebra(
        $1, 
        $2, 
        '([rast1] + [rast2])', 
        NULL, 
        'UNION', 
        '[rast2]', 
        '[rast1]', 
        NULL)
END;
$f$;

CREATE OR REPLACE FUNCTION sum_raster_final(raster)
returns raster
language sql
as $f$
SELECT 
   $1
$f$;

create aggregate sum_raster(raster) (
    SFUNC = sum_raster_state,
    STYPE = raster,
    FINALFUNC = sum_raster_final
);

बाद में आप इसे इस तरह कह सकते हैं

SELECT areaid, sum_raster(st_asraster(isogeom, ...)) FROM isochrone GROUP BY areaid

यह आपको एक ही एरिया आईडी के साथ आपके सभी रिस्ते का योग देता है। आपको प्रत्येक क्षेत्र आईडी के लिए टिप्पणियों की संख्या से रेखापुंज मानों को विभाजित करने की आवश्यकता होगी। (मैंने इसे कुल फ़ंक्शन में शामिल नहीं किया था। आप इसे या तो यहाँ या बाद में MapAlegbra का उपयोग करके कर सकते हैं)

सुनिश्चित करें कि आपके इनपुट रस्टर्स सभी संरेखित हैं, अन्यथा यह काम नहीं करेगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.