Chỉ chọn kênh đào được kết nối với hồ chứa?


8

Tôi có một lớp đa giác của các hồ chứa nước và một lớp kênh đa giác.

Trong dữ liệu của tôi, một số kênh đào có nguồn gốc từ các hồ chứa, và dẫn đến các kênh khác. Mặt khác, có một số kênh bị cô lập hoặc không được kết nối với bất cứ điều gì. (Làm thế nào điều này xảy ra là câu chuyện cho một ngày khác)

Tôi cần xóa các kênh bị cô lập và các mạng kênh (tức là bộ kênh được kết nối) không được kết nối với hồ chứa.

Tôi giả sử rằng tôi sẽ phải sử dụng một số loại theo dõi mạng, nhưng tôi không chắc bắt đầu từ đâu.

Tôi có máy tính để bàn ArcGIS, cùng với Nhà phân tích mạng để giải quyết công việc này.

Làm thế nào bạn sẽ đi về nhiệm vụ này?

Câu trả lời:


6

Tôi không chắc chính xác hình dạng kênh của bạn trông như thế nào, nhưng đây là cách tôi sẽ làm điều đó mà không cần sử dụng Network Analyst:

Trong trường hợp có khả năng các polylines Canals.shp của bạn được chia thành các phân đoạn riêng biệt nhưng được kết nối, hãy sử dụng Dissolve để hủy ghép chúng. Sau đó chạy Chọn theo Vị trí , tìm các tính năng trong Canals.shp mà INTERSECT hoặc BOUNDARY_TOUCHES với Reservoirs.shp.


thật không may, không có trường nào đủ hữu ích để chạy Công cụ Dissolve
Devdatta Tengshe

2
sau đó tạo một trường mới (int ngắn) và hòa tan trên mặc định của nó (0)
Brad Nesom

5

Tôi sẽ tiếp cận điều này như hai vấn đề riêng biệt. Đầu tiên, các phân đoạn dòng riêng lẻ phải được hòa tan thành các thành phần được kết nối; chỉ cần hòa tan tất cả chúng trên một giá trị mặc định sẽ không hoạt động. Đây là một vấn đề lý thuyết đồ thị và cái chúng ta muốn là "đồ thị phụ thành phần được kết nối".

Tôi chắc chắn có một cách để hack điều này với nhà phân tích mạng, nhưng sở thích của tôi sẽ là xử lý nó giống như vấn đề đồ thị; không phát minh lại bánh xe, chỉ cần cài đặt mô-đun python Networkx tuyệt vời và thử các cách sau:

from networkx import Graph, connected_components
G = Graph()
# iterate through your feature class and build a graph
for row in featureclass:
    # we need a unique representation for each edges start and end points
    start = row.shape.getpart()[0]
    end = row.shape.getpart()[-1]
    G.add_edge(start,end,oid=row.oid)

# get the connected components
Components = connected_components(G)

# we now have a "list of lists" containing edges grouped by their component
# there's several ways to apply this to the feature class...eg
for i, connected in enumerate(Components):
    # assign id = i to the group by writing it to a field for all members 
    # of that component (the row oid is an attribute of the edge)

Bước thứ hai sẽ là hòa tan và chọn theo vị trí theo đề xuất của dmahr

Tôi đã sử dụng một kỹ thuật tương tự nhiều lần thành công. Lý thuyết đồ thị là tuyệt vời và giải quyết nhiều vấn đề về GIS và Networkx là một công cụ tuyệt vời để thực hiện điều này trong python.


Không thể nói nó tốt hơn. +1
Allan Adair
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.