Tôi đang cố gắng so sánh hai lớp tính năng riêng biệt để xác định sự khác biệt giữa chúng (loại hàm khác). Quy trình làm việc cơ bản của tôi:
- Tôi trích xuất hình học bằng cách sử dụng SearchCoder
- Lưu hình học của hai lớp tính năng dưới dạng GeoJSON bằng cách sử dụng một sửa đổi
__geo_interface__
(lấy nó từ vanLondonreturn {'type': 'Polygon', 'coordinates': [[((pt.X, pt.Y) if pt else None) for pt in part] for part in self]}
). Điều này là để tránh đối tượng hình học được chia sẻ mà ESRI sử dụng với các con trỏ và không có khả năng tạo các bản sao sâu (một số cuộc thảo luận ở đây trên gis.stackexchange nói về nó). - Kiểm tra hình học của hai lớp tính năng dựa trên một định danh duy nhất. Ví dụ, so sánh hình học FC1 OID1 với hình học FC2 OID1. Để lấy hình học làm đối tượng ESRI, hãy gọi
arcpy.AsShape()
(sửa đổi để đọc đa giác có lỗ (xem điểm 2 ở trên) vớireturn cls(Array([map(lambda p: Point(*p) if p is not None else Point(), part) for part in coordinates]))
. So sánh đơn giảngeom1.equals(geom2)
như được chỉ ra trong Lớp Hình học .
Tôi hy vọng sẽ tìm thấy ~ 140 thay đổi trong hình học, nhưng tập lệnh của tôi khẳng định có 430. Tôi đã cố kiểm tra các biểu diễn GeoJSON đó và chúng giống hệt nhau, nhưng Lớp Hình học bằng () từ chối nói như vậy.
Một ví dụ dưới đây:
>>> geom1geoJSON
{'type': 'Polygon', 'coordinates': [[(-122.8423481559999, 47.060497293000083), (-122.84239755599992, 47.059262423000064), (-122.84416913599989, 47.059309693000046), (-122.84416913599989, 47.060497293000083), (-122.8423481559999, 47.060497293000083)]]}
>>> geom2geoJSON
{'type': 'Polygon', 'coordinates': [[(-122.8423481559999, 47.060497293000083), (-122.84239755599992, 47.059262423000064), (-122.84416913599989, 47.059309693000046), (-122.84416913599989, 47.060497293000083), (-122.8423481559999, 47.060497293000083)]]}
>>> geom1 = arcpy.AsShape(geom1geoJSON)
>>> geom2 = arcpy.AsShape(geom2geoJSON)
>>> geom1.equals(geom2)
False
>>> geom2.equals(geom1)
False
Hành vi dự kiến ở đây phải là Đúng (không sai).
Có ai có bất cứ đề nghị nào trước khi tôi chuyển mọi thứ sang hình học ogr không? (Tôi lưỡng lự như ogr.CreateGeometryFromGeoJSON () sẽ là một chuỗi, và arcpy của __geo_interface__
lợi nhuận một cuốn từ điển và tôi cảm thấy như tôi đang bổ sung thêm tính phức tạp).
Tìm thấy các tài nguyên sau hữu ích, mặc dù chúng không trả lời câu hỏi:
- Arcpy.Geometry câu hỏi ở đây trên gis.stackexchange.com đã được liên kết ở trên trong văn bản của tôi.
- Lỗi trong lớp Đa giác của Arcpy từ các diễn đàn arcgis.com (rõ ràng có rất nhiều lỗi chính xác trong ArcGIS 10.0 mà về mặt lý thuyết đã được sửa trong 10.1 nhưng tôi không thể xác minh rằng, trong 10.0 SP5 bạn vẫn gặp lỗi).