Tôi đã nhặt được một bản sao của cuốn sách siêu độc ác 'Phát triển không gian địa lý Python' của Erik Westra ( liên kết Amazon ) và tôi đang làm việc với nó. Hiện tại, nó đang dạy tôi tải dữ liệu đường bờ biển GSHHS từ một shapefile vào cơ sở dữ liệu PostGIS, để chuẩn bị xây dựng một ứng dụng web không gian địa lý.
Vấn đề của tôi là: khi tôi cố gắng nhập dữ liệu GSHHS vào PostGIS, nó bị từ chối do đa giác đường bờ biển không được coi là "hợp lệ". Cụ thể, tôi nhận được một thông báo lỗi mô tả một số (nhưng không phải tất cả) các đa giác đường bờ biển là 'các vòng không đóng'.
Tôi hiểu rằng lỗi này đang cố nói với tôi rằng điểm đầu tiên và điểm cuối của đa giác không giống nhau. Tuy nhiên, điều này chỉ đơn giản là không đúng sự thật. Tôi đã kiểm tra đại diện WKT của nhiều đa giác, và chúng là chính xác. Họ chắc chắn bắt đầu và kết thúc với cùng một phối hợp.
Các đa giác được trích xuất từ các shapefiles bằng thư viện OGR và xuất từng tính năng đa giác sang WKT. Tôi đã thử khôi phục lại đa giác thông qua Shapely và thử nghiệm với WKB, nhưng không có kết quả. Tôi đã có thể tải cùng một dữ liệu vào PostGIS dưới dạng bảng MULTIPOLYGON, sử dụng trình tải shp2pgsql.
Tôi đã tự hỏi nếu có ai ngoài đó có:
(a) có lẽ đã sử dụng cùng một cuốn sách, bị mắc kẹt trong cùng một vấn đề, và có câu trả lời cho tôi không?
(b) đã gặp phải một vấn đề tương tự, và tìm ra giải pháp?
(c) không thành công, có một số lời khuyên 'thực tiễn tốt nhất' để đảm bảo hình học hợp lệ trước khi tải vào PostGIS?
CẬP NHẬT: một đồng nghiệp đã gợi ý rằng vấn đề 'vòng không đóng' có thể chỉ là triệu chứng của một vấn đề khác. Có thể cấu hình PostGIS / PostgreSQL của tôi có giới hạn kích thước (trên các giao dịch chèn, gói tin nhận được, chuỗi văn bản, v.v.).
Vì tôi đang sử dụng các đa giác WKT rất dài làm đầu vào, PostGIS có thể sẽ cắt chúng quá sớm để cho phép mỗi đa giác hoàn thành. Tôi sẽ kiểm tra nó vào ngày mai, nhưng nó có vẻ có khả năng. Biên giới quốc gia của tôi chỉ chấp nhận một số hồ sơ chứ không phải những hồ sơ khác. Từ bộ nhớ, hình học được chấp nhận là dành cho các quốc đảo nhỏ như Antigua (và do đó có lẽ có các đại diện WKT ngắn).
Vì vậy, điều này cuối cùng có thể là nhiều hơn một luồng quản trị cơ sở dữ liệu PostGIS, chứ không phải là một luồng hình học không hợp lệ.