지정된 기준 근처에서 래스터의 각 셀에 대한 초점 통계를 계산하려고합니다.
배경-나는 단일 식물 유형의 관심을 나타내는 3 개의 이진 래스터를 가지고 있습니다. 연구 지역에있는 어떤 세포 (가까운 지역의 합계 / 총 세포)에서 20 km ^ 2 이내의 각 초목 유형의 적용 범위 백분율을 계산하고 싶습니다. 문제는 각 셀 주위에 간단한 원이나 사각형 이웃을 사용할 수 없다는 것입니다. 왜냐하면 내가 계산하면 합계를 계산하는 데 사용되는 검색 영역이 연구 영역 외부의 영역을 포함하기 때문입니다. 이 예외는 통계가 서식지 모델의 입력으로 사용되며 연구 지역 외부의 지역은 가능한 서식지로 간주 될 수 없으므로 도시화되어 있기 때문에 중요합니다. 그것들을 포함 시키면 나에게 잘못된 통계를 줄 것이다. 그래서 내가 뭘N 내 기준을 충족 내 원하는 지역의 크기에 상당하는 영역)을 커버하기 위해 필요한 셀들의 개수에 의해 결정된다. 그들이 도시화 된 지역에 속하지 않는 기준. 나는 어떤 형태의 세포 오토마타를 사용해야한다고 생각합니다. 그래도 CA와 함께 일한 적이 없습니다.
내가 원하는 것은 스타터 코드 또는 올바른 방향의 포인트와 같은 것 같습니다.
코멘트에 답하십시오 :
내 연구 사이트의 경계에있는 셀에 대해이 통계를 계산한다고 가정 해 봅시다. 연구 영역 외부의 모든 영역을 0에 할당하거나 NoData를 무시하면 관심있는 영역 범위의 대략 절반을 나타내는 통계를 얻게됩니다. 따라서 ~ 10km ^ 2 영역의 백분율 범위 , 20km ^ 2 면적 대신. 나는 가정 범위 크기를 공부하고 있기 때문에 이것이 중요합니다. 동물이 풍경을 보거나 사용하는 방식이기 때문에 이웃은 모양을 바꿔야합니다. 20km ^ 2가 필요하면 모양이나 본토가 바뀝니다. NoData 무시를 선택하지 않으면 셀 출력은 NoData가되고 NoData는 도움이되지 않습니다.
2014 년 10 월 24 일 현재 "프로그 레스"
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
불행히도 엄청나게 느립니다.