Đếm các đa giác chồng chéo từ một Shapefile bằng ArcGIS Desktop?


10

Tôi có một shapefile với 16.400 đa giác. Mỗi đa giác cho thấy sự mở rộng của một loài chim cho toàn thế giới.

nhập mô tả hình ảnh ở đây

Bây giờ tôi phải đếm các đa giác chồng chéo. Tôi đã thử nó với công đoàn và giải thể (đếm công đoàn), nhưng công đoàn không hoạt động cho rất nhiều đa giác.

Sau đó, tôi đã cố gắng cắt các lục địa, nhưng điều này cũng không hoạt động vì số lượng đa giác rất lớn. Hơn nữa tôi đã thử phương pháp này , cũng không thành công.

Vì vậy, tôi đang hỏi bạn rằng có cách nào để đếm các đa giác chồng chéo nếu 16400 đa giác nằm trong một shapefile không?

Tôi đang làm việc với 10.0 và có thể làm việc với 10.2. Một giải pháp ArcPy cũng tuyệt vời.

Hiện tại tôi đang suy nghĩ về việc tạo một fishnet và lặp qua các hàng của shp với 16400 đa giác và viết 1 vào trường giá trị của một ô fishnet nếu đa giác nằm trong ô này và hơn là lấy hàng tiếp theo (đa giác) và nếu đây cũng là trong tế bào fishnet đếm +1.

Nhưng tôi không biết liệu đây có phải là một giải pháp tốt hay không và làm thế nào để nhận ra nó. Hoặc tôi phải học R để sử dụng phương pháp này .

Kết quả: Nó phải là một hình dạng trong đó bạn có các đa giác mới trong số các đa giác chồng chéo và một trường trong đó các phần trùng lặp được tính.

Vì vậy, cuối cùng nên có một shapefile nơi bạn có thể thấy có bao nhiêu loài chim được tìm thấy ở cùng một nơi.


vấn đề của bạn là một vấn đề vì kích thước của tập dữ liệu của bạn. Câu trả lời (và liên kết mà bạn đề xuất) là chính xác nhưng bạn sẽ gặp vấn đề về bộ nhớ. Có thể trước tiên bạn có thể thử tích hợp trên dữ liệu của mình với vài trăm mét (dựa trên độ chính xác dự kiến) để tránh tạo ra hàng tỷ đa giác cúi). Đảm bảo làm việc trên một bản sao vì nó sẽ sửa đổi dữ liệu của bạn.
radouxju

1
Chia shapefile của chúng tôi thành các shapefile khu vực, sau đó chạy phân tích trên các shapefile khu vực, sau đó hòa tan chúng để lấy lại toàn bộ tệp.
til_b

Tôi đã cố gắng cắt hình này chỉ với một quốc gia nhưng tôi đã nhận được lỗi 999999.
Nora

1
Bạn đã xem công cụ Dice để giảm độ phức tạp của đa giác của bạn chưa? Ngoài ra nếu bạn gặp lỗi 999999 chỉ cần cố gắng cắt dữ liệu của mình, bạn đã thử công cụ kiểm tra hình học để xem liệu có đưa ra cái nhìn sâu sắc nào không?
Hornbydd

2
Tôi đã kiểm tra hình học một phần trên dữ liệu và có rất nhiều giao điểm tự. Tôi sẽ đề nghị 1. Đảm bảo sử dụng RAM tối đa và tệp trang lớn 2. sửa chữa hình học 3. Nếu cần, đơn giản hóa đa giác 3. dữ liệu tập hợp thành 1/3 hoặc 1/4 (hoặc bất cứ điều gì cần thiết) 4. Chạy quy trình làm việc Union-Dissolve-Rasterize như trong câu trả lời này 5. Tính tổng các raster.
Cotton.Rockwood

Câu trả lời:


9

Tôi sẽ khuyên bạn nên sử dụng công cụ Đa giác chồng chéo tùy chỉnh .

nhập mô tả hình ảnh ở đây

Sự miêu tả:

Mẫu này chứa một hộp công cụ với một công cụ, Đếm các đa giác chồng chéo. Đưa ra một lớp đối tượng hoặc lớp chứa đa giác chồng lấp, xuất ra một lớp đối tượng mới với các lớp phủ bị loại bỏ và trường Join_Count chứa số lượng đa giác chồng lấp.


Tôi cũng đã thử điều này và nó không hoạt động cho shp của tôi (quá lớn). cảm ơn vì đã trả lời
Nora

5

Sử dụng mã thông báo hình học arcpy, bạn có thể thử một cái gì đó như thế này:

nhập mô tả hình ảnh ở đây

import os
import arcpy

arcpy.env.workspace = r"" #path to workspace
arcpy.env.overwriteOutput = 1

polygon_fc = r"" #path to polygon fc

base = [row for row in arcpy.da.SearchCursor(polygon_fc,["OID@","SHAPE@"])]
compare = base

overlaps_stats = {}

for b in base:
    for c in compare:
        if b[1].overlaps(c[1]):
            #print "{0} overlaps {1}".format(b[0],c[0])
            if overlap_stats.has_key(b[0]):
                overlap_stats[b[0]].append(c[0])
            else:
                overlap_stats[b[0]] = [c[0]]

for key,value in overlap_stats.iteritems():
    print "Polygon {0}:  Overlaps: {1}.".format(key,len(value))

Đối với dữ liệu mẫu ở trên, mã sẽ trả về số lượng trùng lặp sau: nhập mô tả hình ảnh ở đây

Mã như sẽ chỉ trả về số lượng cho đa giác có ít nhất một chồng lấp.


@ Nxau: Ok, tôi đoán tôi đã phạm sai lầm để giải thích kết quả sẽ như thế nào. Nó phải là một hình dạng nơi bạn có các đa giác mới trong số các đa giác chồng chéo. Ví dụ trong ảnh của bạn, các vòng tròn 4 và 5 đang chồng chéo. Hình dạng mới nên có ba đa giác. (Union không làm việc cho hình dạng lớn này). Vùng chồng lấp phải có giá trị 2 trong một trường và phần còn lại của vòng tròn 4 và 5 sẽ có giá trị 1 trong trường này. Vì vậy, cuối cùng nên có một shapefile nơi bạn có thể thấy có bao nhiêu loài chim được tìm thấy ở cùng một nơi. Cảm ơn kịch bản của bạn!
Nora


1

Tôi đoán bạn đã thử phương pháp này: Đếm và quét các đa giác chồng chéo trong ArcGIS Desktop?

16.400 đa giác không phải là nhiều. Tuy nhiên, một giải pháp tiềm năng là chỉ cần thực hiện Tham gia không gian thông thường. Trong ArcMap toolbox, > Analysis Tools -> Overlap -> Spatial Join.

Đặt cả hai targetjoincác tính năng cho cùng một tập dữ liệu và chỉ định một đầu ra. Để lại phần còn lại của cài đặt.

Sau một vài phút, bạn sẽ lấy lại một shapefile có chứa cột "đếm số tham gia". Trừ 1 từ điều này (vì rõ ràng mỗi tính năng nên giao nhau) và đó phải là số lượng "chồng chéo" (thực sự giao nhau) cho mỗi đa giác.

Tôi chỉ thực hiện nó trên


Vâng, tôi đã thử cách tiếp cận từ liên kết. Nhưng để sử dụng công đoàn là không thể cho shp này. Thử dùng Spatial Tham gia tôi đã nhận lại được điều này: ERROR 000426: Hết bộ nhớ.
Nora

Tôi đang chạy nó trên một máy chỉ có 4GB RAM và có số lượng tính năng gấp khoảng 5 lần, vì vậy tôi rất ngạc nhiên khi nó không hoạt động với số lượng thấp hơn nhiều. Bạn có thể có quá nhiều đỉnh trong dữ liệu của mình (của tôi là khoảng 60 MB; tệp .shp của bạn lớn đến mức nào?). Hãy thử khái quát nó.
GIS-Jonathan

Nếu chỉ shp ở trong một fgdb thì fgdb có 1,73 GB. Trong một thư mục hình dạng có 2.00 GB.
Nora

Tôi cũng đã sử dụng bộ dữ liệu này và tôi nghĩ rằng nhiều vấn đề phát sinh do khá nhiều đa giác có nhiều phần. Điều đó kết hợp với độ phân giải làm cho điều này trở thành một nhiệm vụ rất tốn bộ nhớ.
Cotton.Rockwood

@ Cotton.Rockwood: Và bạn tìm thấy giải pháp trong R, phải không? Tôi nghĩ đến việc sử dụng hộp công cụ 'Đếm các đa giác chồng chéo' với đầu vào là 500 đa giác (33 lựa chọn) so với đa giác cho raster với giá trị "tham gia đếm" và ở cuối raster tính toán (ModelBuilder). Phải mất một thời gian dài ...
Nora

1

Tôi đã tải xuống và dùng thử công cụ "Đếm đa giác chồng chéo". Nó có thể hoạt động, nhưng phải mất một thời gian rất dài (có thể vì kích thước tệp, nhưng FC đầu vào của tôi chỉ có <5.000 bản ghi).

Trong khi chờ công cụ đó chạy, tôi đã mở một cửa sổ ArcMap khác và chỉ mất vài bước để có được thứ tôi muốn. 1) Tham gia không gian - sử dụng cùng một lớp tính năng như Tính năng mục tiêu và Tham gia và chọn tùy chọn "Tham gia một đến nhiều". 2) Hòa tan - sử dụng đầu ra từ bước cuối cùng. Sử dụng "TARGET_FID" làm trường hòa tan và để thống kê, bạn có thể SUM trường "Join_Count" hoặc COUNT trường "THAM GIA". 3) Trong tệp đầu ra từ bước 2, sử dụng máy tính trường trừ 1 từ trường thống kê ("SUM_Join_Count" hoặc "COUNT_JOIN_FID") - vì mỗi tính năng tự giao nhau.

Tôi đề nghị sử dụng phương pháp này qua công cụ "Đếm đa giác chồng chéo". Tôi đã bắt đầu chạy công cụ COP ~ 5 phút trước khi bắt đầu phương thức Tham gia-> Hòa tan này và nó cho tôi kết quả có đủ thời gian để viết nó lên trước khi công cụ "Đếm chồng chéo đa giác" thậm chí đã kết thúc.

Hi vọng điêu nay co ich!

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.