Tôi có một shapefile chi tiết rõ ràng với các tính năng đa giác / đa giác (tệp khoảng 500mb). Nó thực sự là một shapefile của toàn thế giới, với các tính năng đại diện cho đường bờ biển. Tôi cần chia dữ liệu này bằng lưới. Để rõ ràng, tôi không muốn 'sắp xếp' dữ liệu, nhưng thực sự đã cắt các đa giác thành các ô. Tôi nhận ra câu hỏi này đã được hỏi trước đây nhưng các giải pháp tôi tìm thấy không hiệu quả với tôi.
Tôi đã thử:
Sử dụng QGIS và giao nội dung shapefile của tôi với lưới vector - kết quả thật tồi tệ. Hầu hết các vùng đất chính biến mất một cách kỳ diệu, mặc dù có vẻ như những mảnh đất nhỏ hơn đôi khi tạo ra nó. Tôi nên lưu ý rằng phương pháp này hoạt động thực sự tốt với dữ liệu đơn giản hơn nhiều (ví dụ: ít điểm hơn)
Sử dụng các công cụ Giao lộ của OGR. Tôi đã thử cả hai thông qua ogr2ogr và thậm chí bằng cách cuộn công cụ C ++ của riêng tôi. Cả hai đều có cùng một vấn đề như QGIS. Họ cũng không thể hiện vấn đề này cho các tệp đơn giản, nhưng thất bại với những tệp phức tạp hơn. Để tham khảo, tôi đang sử dụng một shapefile của Úc và New Zealand, có kích thước dưới 20mb, và cả QGIS và OGR đều không thể 'tạo lưới'.
Ai đó đã đề xuất sử dụng PostGIS tại một thời điểm, vì nó có chức năng giao nhau - nhưng ST_Intersect của PostGIS sử dụng cùng một mặt sau GEOS giống như OGR. Trên thực tế, cả hai đều gọi cùng một chức năng như tôi có thể nói, vì vậy tôi không nghĩ rằng PostGIS sẽ mang lại kết quả khác nhau.
Tôi đang tìm kiếm gợi ý về những gì tôi có thể thử. Tôi cần một ứng dụng hoặc bộ công cụ mạnh mẽ có thể phân chia các shapefile chi tiết cao thành các ô.
EDIT: Thêm một số thông tin
Đáp lại Simbamangu:
Shapefile về cơ bản là dữ liệu đường bờ biển từ OpenStreetMap. Đây là phiên bản hợp nhất của tệp 'Xử lý_p' (vì vậy nó không bị chia thành các ô) mà tôi nhận được bằng cách gửi email danh sách nhà phát triển của họ. Lưu ý rằng việc chia gạch của chúng (thành các khối 100km x 100km có chồng chéo) không nhất thiết là điều tôi muốn - Tôi không muốn chồng chéo và tôi muốn tự do chọn kích thước lưới hoặc tôi chỉ sử dụng xử lý mặc định_p.
Theo mặc định, dữ liệu đường bờ biển có lỗi hình học được báo cáo bởi QGIS. Tôi sửa các lỗi này bằng một công cụ nhỏ mà tôi đã sử dụng một số mã tôi thấy được thiết kế để giải quyết cụ thể vấn đề này (sửa các lỗi hình học trong dữ liệu đường bờ biển: https://github.com/tudelft-gist/prepair ). Chạy trên các tệp với công cụ này sẽ sửa hầu như tất cả các lỗi mà QGIS mắc phải. Tôi chỉ cố gắng làm giao lộ sau khi làm sạch các tập tin.
Chính xác những gì tôi đã làm bằng cách sử dụng QGIS: Mở dữ liệu để đảm bảo nó trông ổn trong QGIS. Hãy thử chia nó thành các ô bằng cách tạo một lớp gạch bằng Vector Grid với khoảng cách được chỉ định, sau đó giao giữa hai lớp - không đi. Hãy thử sử dụng một tập dữ liệu nhỏ hơn - chọn các tính năng ở Châu Đại Dương (Úc, New Zealand) để thử một tập dữ liệu nhỏ hơn - tệp hình dạng này có kích thước <20mb. Một lần nữa thử chia nó, không hoạt động.
Những gì tôi đã làm với OGR: ogr2ogr trực tiếp sử dụng các tùy chọn '-spat' và '-clipsrc' với spat_extent. Cũng đã viết một công cụ C ++ nhỏ hoạt động trên WKT, vì vậy tôi chuyển đổi shapefile thành WKT bằng ogr2ogr, sau đó cung cấp tệp văn bản cho ứng dụng của tôi. Nó chạy qua tệp và gọi phương thức Intersection () được ghi lại ở đây: http://www.gdal.org/ogr/ classOGRGeometry.html . Tôi nghĩ rằng nó kết thúc việc làm chính xác như sử dụng ogr2ogr trực tiếp.
Đáp lại Brent:
- Nó làm. Mọi thứ đều ở WGS84 Lat / Lon
- Tôi đã nghĩ rằng điều ngược lại là đúng - rằng đối với một tập hợp các ô lưới nhất định, sẽ mất nhiều thời gian hơn để giao với một đa tuyến khổng lồ thay vì một loạt các tính năng phân mảnh có thể được định vị theo không gian hơn cho mỗi ô, nhưng đây là một gợi ý thú vị - Tôi sẽ thử và báo cáo lại.
- Không có trường thuộc tính nào được giữ trong suốt quá trình, tôi chỉ quan tâm đến hình học.
- Tôi không chắc chắn, nhưng tôi nghĩ rằng bạn đang nói rằng tôi nên chọn các đa giác chồng lên một ô lưới nhất định và sau đó thực hiện giao cắt. Điều này là quá cồng kềnh bằng tay với QGIS. Công cụ của tôi đã thực hiện điều này ở một mức độ nhất định với kiểm tra hộp giới hạn. Có một chút tăng tốc, nhưng kết quả cuối cùng vẫn còn kém và không khác biệt rõ rệt.
- Đây không phải là một lựa chọn. Ngay bây giờ tôi đang cố gắng phân chia dữ liệu sao cho 1 độ trễ x 1 độ của nó và tôi đang tìm kiếm một phương pháp chung / mạnh mẽ phù hợp với mọi trường hợp. Tôi đã thử tăng kích thước lưới (tức là 10 x 10) để xem liệu tôi có nhận được kết quả tốt hơn không và tôi không thấy bất kỳ mối tương quan nào giữa kích thước lưới và chất lượng đầu ra.
Chỉnh sửa # 2:
Tôi đã thử chơi với nó nhiều hơn và nói chung có vẻ như kết quả không đáng tin cậy cả khi sử dụng GEOS và với QGIS (sử dụng fTools, tôi không biết liệu lần lượt có sử dụng GEOS nữa không). Tôi đã sai khi nói kích thước của lưới không liên quan gì đến kết quả - lưới càng lớn thì kết quả càng tốt (điều đó tốt để biết nhưng vẫn không phải là giải pháp). Đây là một ảnh chụp màn hình của một lưới thực sự cách nhau hầu hết hoạt động, nhưng đã thất bại một phần trong một ô:
Hình dạng rõ ràng - QGIS hiển thị 0 lỗi với công cụ "Kiểm tra tính hợp lệ". Tôi không tìm cách tiếp cận vấn đề này từng bước một; xác minh xem các tính năng nhất định có làm thất bại giao lộ trên tập dữ liệu lớn này hay không khi nó không rõ ràng (và nó sẽ không có các ô nhỏ hơn) không thực tế.