Tôi có một ý tưởng những gì có thể làm việc cho bạn. Nó sẽ được dựa trên một số giả định, nhưng nó sẽ giúp thu hẹp danh sách các tính năng giống hệt nhau của bạn. Đây không phải là một quá trình tự động, nhưng nó sẽ yêu cầu xem xét thủ công các bản sao. Dựa trên các nhận xét, có vẻ như các công cụ tự động không so sánh các thuộc tính vì vậy điều này sẽ giúp bạn không vô tình xóa các tính năng.
Sử dụng ArcMap
(1) Tạo một bản sao của shapefile của bạn trong trường hợp có sự cố.
(2) Thêm một cột vào shapefile của bạn dưới dạng gấp đôi.
(3) Tính diện tích cho từng tính năng bằng cách sử dụng định dạng mô tả (chính xác nhất) mà bạn có thể. Một cái gì đó mà làm tròn có thể không phải là một vấn đề.
(4) Chạy một bản tóm tắt (tóm tắt) trên cột đó. Hãy chắc chắn rằng bạn chọn một mã định danh duy nhất trong phần tóm tắt và đánh dấu cả đầu tiên và cuối cùng.
(5) Trong bảng đầu ra của bạn, hãy tìm những bản ghi có trường đếm cao hơn 1.
(6a) Kiểm tra thủ công các tính năng và lặp lại quy trình cho đến khi không còn bản sao nữa.
(6b) Bạn chỉ có thể tạo một danh sách các id duy nhất đó và xóa các tính năng thông qua arcpy, nhưng bạn có khả năng có thể có hai tính năng không xác định với cùng một khu vực.
Một kỹ thuật khác sử dụng ArcPy
Khi tôi đang xây dựng câu trả lời ở trên, tôi nghĩ đến khả năng nhiều tác giả của dữ liệu này có thể đã thực sự sử dụng cùng một mã định danh duy nhất cho các tính năng trùng lặp. NẾU đó là trường hợp, bạn có thể tìm thấy các bản sao thông qua việc lặp trong arcpy.
Cách tôi nghĩ về việc làm điều này bằng ArcPy có thể đánh thuế vào hệ thống của bạn và mất một chút.
(1) Tạo một bản sao của shapefile của bạn (trong trường hợp một lần nữa)
(2) Thêm một cột mới để biểu thị các bản sao. Một cái gì đó giống như 'y' hoặc 'n' hoặc 0 hoặc 1 hoặc bất cứ thứ gì sẽ hoạt động.
(3) Tạo một danh sách trong python để lưu trữ định danh duy nhất.
(4) Chạy một con trỏ cập nhật ( arcpy.UpdateCursor('LAYERNAME')
). Đối với mỗi bản ghi, hãy kiểm tra danh sách của bạn để xem nó có chứa định danh đó không và đánh dấu cột của bạn để tìm bản sao nếu nó ở đó.
myList = []
rows = arcpy.UpdateCursor("layername")
for row in rows:
if str(row.UniqueIdentifier) in myList:
#value duplicated
row.DuplicateColumnName = "y"
else:
#not there, add it
myList.append(row.UniqueIdentifier)
rows.updateRow(row)
(5) Sau đó, bạn có thể so sánh hoặc làm bất cứ điều gì bạn muốn với các cột được đánh dấu.
Có lẽ có nhiều cách tốt hơn để thực hiện những so sánh này, nhưng đó là hai cách mà tôi tin rằng nên hoạt động hoặc ít nhất là giúp bạn bắt đầu.
Biên tập
Dựa trên nhận xét của elrobis , bạn có thể sử dụng hình chữ nhật giới hạn tối thiểu để giảm thêm cơ hội xóa các tính năng không chính xác.
Sử dụng ArcMap, bạn có thể chạy công cụ Hình học giới hạn tối thiểu trong Quản lý dữ liệu. Sau khi kiểm tra các tùy chọn, tôi nghĩ rằng sử dụng tùy chọn CONVEX_HULL có lẽ là tốt nhất.
Nếu bạn so sánh các trường MBG_APodX / Y1 , MBG_APod_X / Y2 cùng với MBG_Orientation cho các bản sao, bạn sẽ có thể có được ý tưởng tốt về các tính năng trùng lặp. Tôi sẽ đề nghị sử dụng phương pháp Tóm tắt mà tôi đã mô tả ở trên để so sánh. Chọn một trong các đỉnh (tọa độ) từ hình chữ nhật giới hạn để tìm các bản sao. Bạn có thể nhận được một vài 'trận đấu' ngẫu nhiên, nhưng một khi bạn thêm vào các đỉnh khác cộng với định hướng, sẽ là một đặt cược khá an toàn rằng các tính năng kết quả là trùng lặp.
Mặc dù tôi chưa sử dụng nó và tôi không chắc chắn về kết quả từ công cụ này, nhưng bạn có thể thấy việc kiểm tra shapefile kết quả dễ dàng hơn nếu bạn sử dụng công cụ Tóm tắt Thống kê trong ArcMap. Có vẻ như bạn có thể tóm tắt nhiều cột theo cách đó thay vì tùy chọn cột đơn của tôi.
Tôi không nghĩ rằng sẽ có một cách hoàn toàn tự động để làm điều này mà không phải lo lắng về khả năng xóa một tính năng không trùng lặp. Các phương pháp này sẽ giúp giới hạn số lượng tính năng bạn cần xem xét thủ công.