Tính toán thống kê đầu mối cho khu phố đặc biệt?


18

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.


1
đó là một vấn đề thú vị Bạn có thể đặt tất cả các ô bên ngoài khu vực nghiên cứu của mình thành NoData nhưng tôi không biết làm thế nào bạn sẽ có được một khu phố để thích nghi và giữ nguyên kích thước 20 km vuông (nó sẽ phải thay đổi hình dạng).
jbeclill

@CSB jbeclill là đúng, điều tốt nhất để làm ở đây là gán các giá trị NoData bên ngoài khu vực nghiên cứu của bạn. Công cụ thống kê tiêu điểm có thể xử lý các giá trị nốt đó một cách thích hợp. Xem 'Xử lý các ô của NoData' tại đây resource.arcgis.com/en/help/main/10.1/index.html#//
tựa

@WhiteboxDev - Đề xuất của bạn sẽ không giải quyết vấn đề của tôi. Tôi sẽ chỉnh sửa ở trên và giải thích lý do tại sao điều đó sẽ không hoạt động.
CSB

Bạn đã xem bài đăng này, trong đó thảo luận về việc sử dụng Thống kê tiêu cự với bán kính thay đổi ( gis.stackexchange.com/questions 432306 / giả )? Đây dường như là vấn đề của bạn - các ô ở rìa phải có bán kính lớn và chỉ xem xét một vùng lân cận hình bán nguyệt. Tất nhiên, tùy thuộc vào kích thước ô của bạn, bạn có thể phải tạo nhiều, nhiều trình quét để lựa chọn.
phloem

1
@CSB Bạn sẽ gặp phải các hiệu ứng cạnh bất kể bạn sử dụng NoData và vùng lân cận bị thu hẹp hay nếu bạn thay đổi hình dạng / vị trí của vùng lân cận để đảm bảo kích thước. Ít nhất là với cái trước, bạn sẽ không bị quá tải / đại diện cho dữ liệu gần cạnh một cách không minh bạch. Đây là một phần của Bài toán Đơn vị Khu vực có thể sửa đổi khét tiếng.
WhiteboxDev

Câu trả lời:


0

Đoạn mã trên là câu trả lời cuối cùng và không hoàn hảo, tôi đã đưa ra vấn đề này. Cuối cùng, tôi nghĩ cách tiếp cận tốt nhất là sử dụng một vùng lân cận tròn và tính diện tích giao với khu vực "có sẵn" của tôi. (Một vùng lân cận hình tròn sẽ cung cấp cho n ~ ô gần nhất - vì vậy, không cần phải quá thích với Cellular Automata.) Nếu diện tích quá nhỏ, tôi chỉ cần tăng vòng tròn cho đến khi không.

Nó hoạt động tốt nhưng, như tôi đã lưu ý, nó rất chậm. Xem chủ đề này để được gợi ý về cách tăng tốc nó. Tối đa hóa hiệu suất mã cho Shapely . Tôi đã làm theo các gợi ý, dẫn đến chủ đề này Hiểu về việc sử dụng các chỉ mục không gian . Cuối cùng tôi đã không áp dụng một cây r, bởi vì tôi thực sự không bao giờ kết thúc bằng cách sử dụng mã. Tôi phát hiện ra rằng tôi có thể tiếp cận vấn đề từ một góc độ hoàn toàn khác và tiết kiệm cho mình rất nhiều thời gian / năng lượng, vì vậy tôi đã làm. Có lẽ tôi sẽ hoàn thành nó một ngày ...


Đọc mã của bạn, có vẻ như rất có thể sử dụng chỉ số không gian có thể tăng tốc mã, thường là đáng kể. Thực hiện các giao lộ với MultiPolygon như thế là rất chậm.
Snorfalorpagus

@Snorfalorpagus Vâng, nếu bạn nhìn vào câu trả lời, tôi chỉ ra hai chủ đề khác có liên quan đến câu hỏi này. Cả hai thảo luận về việc sử dụng một chỉ số không gian.
CSB
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.