Belirli bir ölçütlerin bir mahallede, bir raster her hücre için odak istatistiklerini hesaplamak için arıyorum.
Arka Plan - Her biri tek bir bitki türünü temsil eden üç ikili rasterim var. Çalışma alanımdaki herhangi bir hücrenin (örneğin, mahalledeki toplam / toplam hücre) 20 km ^ 2 içindeki her bitki örtüsü tipinin kapsama yüzdesini hesaplamak istiyorum. Sorun şu ki, her hücrenin çevresinde basit bir daire veya kare mahalle kullanamıyorum çünkü eğer yapsaydım, toplamı hesaplamak için kullanılan arama alanı çalışma alanım dışındaki alanları içerecekti. Bu istisna önemlidir, çünkü istatistikler bir habitat modeli için girdi olarak kullanılacaktır ve çalışma alanım dışındaki alanlar olası habitat olarak kabul edilemez - kentleştirilmiştir. Bunları dahil etmek bana hatalı istatistikler verecektir. Peki, benn , ölçütlerimi karşılayan istenen mahalle büyüklüğüme eşit bir alanı kaplamak için gereken hücre sayısına göre belirlenir. Kriterler, kentleşmiş bir alana girmemeleri. Bir çeşit hücresel otomatın kullanılması gerektiğini düşünüyorum. CA ile hiç çalışmadım.
Sanırım istediğim başlangıç kodu gibi bir şey ya da doğru yönde bir nokta.
AŞAĞIDAKİ YORUM:
Diyelim ki çalışma alanımın sınırındaki bir hücre için bu istatistiği hesaplıyorum. Çalışma alanım dışındaki tüm alanları sıfıra atarsam (veya NoData'yı yoksayarsam), ilgilendiğim alan kapsamının yaklaşık yarısını temsil eden bir istatistik alırım. Yani, ~ 10 km ^ 2 alandaki kapsama yüzdesi yüzdesi , 20 km ^ 2 alan yerine. Ev tipi boyutları üzerinde çalıştığım için bu önemlidir. Mahalle şekli değiştirmek zorunda, çünkü hayvan manzarayı böyle görüyor / kullanıyor. 20 km ^ 2'ye ihtiyaç duyarlarsa, şekli veya kendi ülkelerini değiştireceklerdir. NoData'yı yoksay seçeneğini işaretlemezsem, hücre çıktısı NoData olur ve NoData yardım etmez.
24.09.2014 itibarıyla "İLERLEME"
Şimdiye kadar Shapely ve Fiona kullanarak bulduğum kod:
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
Ne yazık ki, inanılmaz derecede yavaş.