ฉันต้องการคำนวณสถิติโฟกัสสำหรับแต่ละแรสเตอร์ของแต่ละเซลล์ภายในละแวกบ้านตามเกณฑ์ที่กำหนด
ความเป็นมา - ฉันมีแรสเตอร์ไบนารีสองตัวแต่ละตัวแสดงประเภทพืชที่น่าสนใจเพียงชนิดเดียว ฉันต้องการคำนวณเปอร์เซ็นต์ความครอบคลุมของพืชแต่ละชนิดภายใน (เช่น) 20 กม. ^ 2 ของเซลล์ใด ๆ ในพื้นที่ศึกษาของฉัน (ผลรวม / เซลล์ทั้งหมดในละแวกใกล้เคียง) ปัญหาคือฉันไม่สามารถใช้วงกลมหรือสี่เหลี่ยมจัตุรัสรอบ ๆ แต่ละเซลล์ได้เพราะถ้าฉันทำพื้นที่ค้นหาที่ใช้ในการคำนวณผลรวมจะรวมพื้นที่นอกเขตการศึกษาของฉันด้วย ข้อยกเว้นนี้มีความสำคัญเนื่องจากสถิติจะถูกใช้เป็นข้อมูลป้อนเข้าสำหรับแบบจำลองที่อยู่อาศัยและพื้นที่ที่อยู่นอกพื้นที่ศึกษาของฉันไม่สามารถพิจารณาที่อยู่อาศัยที่เป็นไปได้ รวมถึงพวกเขาจะให้ฉันสถิติที่ผิดพลาด ดังนั้นสิ่งที่ฉันnกำหนดโดยจำนวนของเซลล์ที่จำเป็นเพื่อให้ครอบคลุมพื้นที่เท่ากับขนาดใกล้เคียงของฉันต้องการ) ที่ตรงตามเกณฑ์ของฉัน เกณฑ์ที่ว่าพวกเขาจะไม่ตกอยู่ในพื้นที่ทำให้เป็นเมือง ฉันคิดว่าควรใช้รูปแบบเซลลูลาร์แบบอัตโนมัติ ฉันไม่เคยทำงานกับ CA มาก่อน
ฉันเดาว่าสิ่งที่ฉันต้องการคืออะไรเช่นรหัสเริ่มต้นหรือจุดในทิศทางที่ถูกต้อง
ตอบกลับความคิดเห็นด้านล่าง:
สมมติว่าฉันกำลังคำนวณสถิตินี้สำหรับเซลล์บนขอบเขตของไซต์การศึกษาของฉัน ถ้าฉันกำหนดทุกพื้นที่นอกพื้นที่ศึกษาของฉันให้เป็นศูนย์ (หรือเพิกเฉย NoData) จากนั้นฉันจะได้รับสถิติที่แสดงถึงครึ่งหนึ่งของพื้นที่ครอบคลุมของสมองที่ฉันสนใจดังนั้นเปอร์เซ็นต์ครอบคลุมในพื้นที่ ~ 10 km ^ 2 แทนพื้นที่ 20 กม. ^ 2 เนื่องจากฉันกำลังศึกษาขนาดของบ้านเป็นสิ่งสำคัญ ละแวกใกล้เคียงต้องเปลี่ยนรูปร่างเนื่องจากเป็นวิธีการที่สัตว์ดู / ใช้ภูมิทัศน์ หากพวกเขาต้องการ 20 กม. ^ 2 พวกเขาจะเปลี่ยนรูปร่างหรืออาณาเขตบ้านของพวกเขา ถ้าฉันไม่ตรวจสอบละเว้น NoData ผลลัพธ์ของเซลล์จะเป็น NoData - และ NoData จะไม่ช่วยอะไร
"PROGRESS" ณ วันที่ 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
น่าเสียดายที่มันช้าลงอย่างไม่น่าเชื่อ