विशेष पड़ोस के लिए फोकल सांख्यिकी की गणना?


18

मैं एक निर्दिष्ट मापदंड के पड़ोस के भीतर एक रेखापुंज के प्रत्येक कोशिका के लिए फोकल आँकड़ों की गणना करने के लिए देख रहा हूँ।

पृष्ठभूमि - मेरे पास तीन द्विआधारी रेखायें हैं, जिनमें से प्रत्येक एक वनस्पति के प्रकार का प्रतिनिधित्व करती है। मैं अपने अध्ययन क्षेत्र (पड़ोस में कुल / कुल सेल) में किसी भी सेल के भीतर (जैसे) 20 किमी ^ 2 के प्रत्येक वनस्पति प्रकार के प्रतिशत कवरेज की गणना करना चाहता हूं। समस्या यह है कि मैं प्रत्येक सेल के चारों ओर एक साधारण सर्कल या स्क्वायर पड़ोस का उपयोग नहीं कर सकता, क्योंकि अगर मैंने किया, तो राशि की गणना के लिए खोज क्षेत्र का उपयोग मेरे अध्ययन क्षेत्र के बाहर के क्षेत्रों को शामिल करेगा। यह अपवाद महत्वपूर्ण है क्योंकि आँकड़ों का उपयोग आवास मॉडल के इनपुट के रूप में किया जाएगा, और मेरे अध्ययन क्षेत्र के बाहर के क्षेत्रों को संभावित निवास स्थान नहीं माना जा सकता है - वे शहरीकृत हैं। उन्हें शामिल करने से मुझे गलत आंकड़े मिलेंगे। तो, मैं क्याn मेरे वांछित पड़ोस के आकार के बराबर क्षेत्र को कवर करने के लिए आवश्यक कोशिकाओं की संख्या से निर्धारित) जो मेरे मानदंडों को पूरा करती हैं। यह मापदंड कि वे शहरीकृत क्षेत्र में नहीं आते हैं। मैं सोच रहा हूं कि सेलुलर ऑटोमेटा के कुछ रूप का उपयोग किया जाना चाहिए। मैंने सीए के साथ कभी काम नहीं किया है।

मुझे लगता है कि मैं जो चाहूंगा वह स्टार्टर कोड, या सही दिशा में एक बिंदु जैसा है।


प्रतिक्रिया कम करने के लिए:

मान लीजिए कि मैं अपने अध्ययन स्थल की सीमा पर एक सेल के लिए इस आंकड़े की गणना कर रहा हूं। यदि मैं अपने अध्ययन क्षेत्र से बाहर के सभी क्षेत्रों को शून्य (या NoData को अनदेखा) करने के लिए असाइन करता हूं, तो मुझे एक आँकड़ा मिलेगा जो लगभग उस क्षेत्र कवरेज का आधा हिस्सा है जिसका मैं इच्छुक हूँ। इसलिए, ~ 10 किमी ^ 2 क्षेत्र में प्रतिशत कवरेज। के बजाय, 20 किमी ^ 2 क्षेत्र। चूंकि मैं होम रेंज साइज का अध्ययन कर रहा हूं इसलिए यह महत्वपूर्ण है। पड़ोस को आकार बदलना पड़ता है, क्योंकि इस तरह से पशु दृश्य / परिदृश्य का उपयोग करता है। यदि उन्हें 20 किमी ^ 2 की आवश्यकता है, तो वे आकार या उनके गृह क्षेत्र को बदल देंगे। अगर मैं NoData की अनदेखी नहीं करता हूं, तो सेल आउटपुट NoData होगा - और NoData कोई मदद नहीं है।


10/24/2014 के "प्रगति" के रूप में

यहाँ मैं अब तक Shapely और Fiona का उपयोग करके आया कोड है:

import numpy as np
import pprint
import shapely
from shapely.geometry import*
import fiona
from fiona import collection
import math

traps = fiona.open('C:/Users/Curtis/Documents/ArcGIS/GIS_Data/occurrence/ss_occ.shp', 'r')

study_area = fiona.open('C:/Users/Curtis/Documents/ArcGIS/GIS_Data/Study_Area.shp', 'r')
for i in study_area: #for every record in 'study_area'
        sa = shape(i['geometry']) #make a variable called 'sa' that is a polygon

grassland = fiona.open('C:/Users/Curtis/Documents/ArcGIS/GIS_Data/land_cover/polys_for_aa/class3_aa.shp', 'r')
pol = grassland.next()
gl = MultiPolygon([shape(pol['geometry']) for pol in grassland])

areaKM2 = 20
with traps as input:
    r = (math.sqrt(areaKM2/math.pi))*1000
    for point in input:
        pt = shape(point['geometry'])
        pt_buff = pt.buffer(r)
        avail_area = pt_buff.intersection(sa).area
        # works to here
        while avail_area < areaKM2:
            r += 10
            pt_buff = pt.buffer(r)
            avail_area = pt_buff.intersection(sa).area

        perc_cov = pt_buff.intersection(gl).area//areaKM2
        print perc_cov

दुर्भाग्य से, यह धीमी गति से है।


1
यह एक दिलचस्प समस्या है। आप अपने अध्ययन क्षेत्र के बाहर सभी कक्षों को NoData में सेट कर सकते हैं, लेकिन मुझे नहीं पता कि आप कभी भी 20 वर्ग किमी के आकार को अनुकूलित करने और रखने के लिए एक पड़ोस प्राप्त करने जा रहे हैं (इसे आकार बदलना होगा)।
jbchurchill

@CSB jbchurchill सही है, यहाँ सबसे अच्छी बात यह है कि अपने अध्ययन क्षेत्र के बाहर NoData मान निर्दिष्ट करें। फोकल स्टैट्स टूल उन नोडता मूल्यों का उचित रूप से इलाज कर सकता है। यहां 'NoData की प्रोसेसिंग सेल' देखें। resource.arcgis.com/en/help/main/10.1/index.html#//…
व्हाइटबॉक्सडेव

@WhiteboxDev - आपका सुझाव मेरी समस्या का समाधान नहीं करेगा। मैं ऊपर संपादित करूँगा और समझाऊंगा कि काम क्यों नहीं होगा।
सीएसबी

क्या आपने इस पोस्ट को देखा है, जो एक चर त्रिज्या ( gis.stackexchange.com/questions/34306/… ) के साथ फोकल स्टैटिस्टिक्स का उपयोग करने पर चर्चा करता है ? यह आपका मुद्दा लगता है - किनारे पर कोशिकाओं में एक बड़ा त्रिज्या होना चाहिए और केवल एक अर्धवृत्ताकार पड़ोस पर विचार करना चाहिए। बेशक, आपके सेल आकार के आधार पर, आपको चुनने के लिए कई, कई आपदाओं का निर्माण करना पड़ सकता है।
फ्लोएम

1
@CSB आप इस बात की परवाह किए बिना कि आप NoData और सिकुड़े हुए पड़ोस का उपयोग करते हैं या यदि आप आकार सुनिश्चित करने के लिए अपने पड़ोस के आकार / स्थान को बदलते हैं, तो आप किनारे के प्रभाव में चलने वाले हैं। कम से कम पूर्व के साथ, आप गैर-पारदर्शी तरीके से निकट-किनारे डेटा का निरीक्षण नहीं करेंगे। यह बदनाम मॉडिफाइड एरियाल यूनिट प्रॉब्लम का हिस्सा है।
WhiteboxDev

जवाबों:


0

ऊपर दिया गया कोड अंतिम और अपूर्ण है, जवाब मैं इस समस्या के लिए आया था। अंत में मैंने सोचा कि सबसे अच्छा तरीका एक परिपत्र पड़ोस का उपयोग करना और मेरे "उपलब्ध" क्षेत्र को प्रतिच्छेद करने वाले क्षेत्र की गणना करना था। (एक गोलाकार पड़ोस किसी भी तरह n - निकटतम सेल देगा - इसलिए, सेल्युलर ऑटोमेटा के साथ बहुत अधिक फैंसी होने की आवश्यकता नहीं है।) यदि क्षेत्र बहुत छोटा था, तो मैंने सर्कल को तब तक बड़ा किया जब तक कि यह नहीं हुआ।

इसने अच्छा काम किया लेकिन, जैसा कि मैंने उल्लेख किया है, यह बहुत धीमा था। इसे कैसे गति दें, इस सुझाव के लिए इस धागे को देखें। शेपली के लिए कोड प्रदर्शन को अधिकतम करना । मैंने सुझावों का पालन किया, जो इस धागे को स्थानिक सूचकांक के उपयोग को समझते हैं । मैंने अंत में एक आर-पेड़ लगाने का अंत नहीं किया, क्योंकि मैं वास्तव में कोड का उपयोग करके कभी समाप्त नहीं हुआ। मुझे पता चला कि मैं पूरी तरह से अलग कोण से समस्या का सामना कर सकता हूं और अपने आप को बहुत समय / ऊर्जा बचा सकता हूं, इसलिए मैंने किया। शायद मैं इसे एक दिन खत्म करूंगा ...


अपने कोड को पढ़ना ऐसा लगता है कि एक स्थानिक सूचकांक का उपयोग करने का एक अच्छा मौका है, कोड को गति दे सकता है, अक्सर नाटकीय रूप से। मल्टीपॉलिगन के खिलाफ चौराहों को करना बहुत धीमा है।
स्नोरफॉर्पलगस

@Snorfalorpagus हाँ, यदि आप उत्तर को देखते हैं, तो मैं दो अन्य सूत्र बताते हैं जो इस प्रश्न से संबंधित हैं। दोनों एक स्थानिक सूचकांक का उपयोग करने पर चर्चा करते हैं।
सीएसबी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.