Tôi đang tìm cách tính toán thống kê tiêu điểm cho từng ô của raster, trong vùng lân cận của một tiêu chí được chỉ định.
Bối cảnh - Tôi có ba người quét nhị phân, mỗi người đại diện cho một loại sở thích thực vật duy nhất. Tôi muốn tính độ che phủ phần trăm của từng loại thảm thực vật trong (ví dụ) 20 km ^ 2 của bất kỳ ô nào trong khu vực nghiên cứu của tôi (tổng / tổng số ô trong vùng lân cận). Vấn đề là tôi không thể sử dụng một vòng tròn hoặc hình vuông đơn giản xung quanh mỗi ô vì nếu tôi làm như vậy, khu vực tìm kiếm được sử dụng để tính tổng sẽ kết hợp các khu vực bên ngoài khu vực nghiên cứu của tôi. Ngoại lệ này rất quan trọng vì các số liệu thống kê sẽ được sử dụng làm đầu vào cho mô hình môi trường sống và các khu vực bên ngoài khu vực nghiên cứu của tôi không thể được coi là môi trường sống có thể - chúng được đô thị hóa. Bao gồm họ sẽ cho tôi số liệu thống kê sai. Vì vậy, những gì tôin được xác định bởi số lượng ô cần thiết để bao phủ một khu vực bằng với kích thước vùng lân cận mong muốn của tôi) đáp ứng tiêu chí của tôi. Các tiêu chí là chúng không nằm trong khu vực đô thị hóa. Tôi nghĩ rằng một số hình thức của automata di động nên được sử dụng. Tôi chưa bao giờ làm việc với CA mặc dù.
Tôi đoán những gì tôi muốn là một cái gì đó như mã khởi động, hoặc một điểm đi đúng hướng.
TRẢ LỜI ĐẾN COMMENT DƯỚI ĐÂY:
Giả sử tôi đang tính toán thống kê này cho một ô trên ranh giới của trang web nghiên cứu của tôi. Nếu tôi chỉ định tất cả các khu vực bên ngoài khu vực nghiên cứu của mình bằng 0 (hoặc bỏ qua NoData), thì tôi sẽ nhận được một thống kê đại diện cho khoảng một nửa phạm vi bảo hiểm khu vực mà tôi quan tâm. Vì vậy, tỷ lệ bao phủ trong khu vực ~ 10 km ^ 2 , thay vì 20 km ^ 2 khu vực. Vì tôi đang nghiên cứu kích thước phạm vi nhà, điều này rất quan trọng. Các khu phố phải thay đổi hình dạng, vì đó là cách động vật xem / sử dụng cảnh quan. Nếu họ cần 20 km ^ 2, họ sẽ thay đổi hình dạng hoặc lãnh thổ nhà của họ. Nếu tôi không kiểm tra bỏ qua NoData, đầu ra của ô sẽ là NoData - và NoData không giúp được gì.
"TIẾN ĐỘ" NGÀY 24/10/2014
Đây là mã tôi đã nghĩ ra cho đến nay bằng cách sử dụng Shapely và 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
Thật không may, nó chậm TUYỆT VỜI.