मैं एक निर्दिष्ट मापदंड के पड़ोस के भीतर एक रेखापुंज के प्रत्येक कोशिका के लिए फोकल आँकड़ों की गणना करने के लिए देख रहा हूँ।
पृष्ठभूमि - मेरे पास तीन द्विआधारी रेखायें हैं, जिनमें से प्रत्येक एक वनस्पति के प्रकार का प्रतिनिधित्व करती है। मैं अपने अध्ययन क्षेत्र (पड़ोस में कुल / कुल सेल) में किसी भी सेल के भीतर (जैसे) 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
दुर्भाग्य से, यह धीमी गति से है।