Sử dụng shp2pgsql thay vì ogr2ogr để nhập shapefile vào PostGIS? [đóng cửa]


8

Tôi rất có thể đang làm điều gì đó sai ở đây, nhưng:

Nếu tôi nhập một số shapefile vào cơ sở dữ liệu PostGIS bằng shp2pgsql , trước tiên tôi phải tìm ra SRID / EPSG của shapefile đó. Tôi nghĩ rằng đây là, tối thiểu, một quá trình hai bước. Đầu tiên tôi truy vấn shapefile như thế này:

>ogrinfo -al -so someshapefile.shp

trong đó trả về thông tin chiếu văn bản (wkt) nổi tiếng, nhưng hơi dài dòng và hơi mờ [với tôi]. Cái gì đó như:

GEOGCS["NAD83",
DATUM["North_American_Datum_1983",
    SPHEROID["GRS 1980",6378137,298.257222101,
        AUTHORITY["EPSG","7019"]],
    AUTHORITY["EPSG","6269"]],
PRIMEM["Greenwich",0,
    AUTHORITY["EPSG","8901"]],
UNIT["degree",0.01745329251994328,
    AUTHORITY["EPSG","9122"]],
AUTHORITY["EPSG","4269"]]

Sau đó, tôi thường chạy thông tin wkt thông qua một công cụ chuyển đổi như Prj2EPSG để tìm EPSG / SRID.

Tại thời điểm này, tôi có thể nhập shapefile bằng cách sử dụng:

>shp2pgsql -I -s 4269 someshapefile.shp <schema>.<table> | psql -U <user> -d <dbname> -h <hostaddress> -p 5432

Lưu ý, tôi chỉ định SRID với -scờ.

Nếu, tôi chạy shp2pgsql mà không chỉ định SRID, không có phép chiếu nào được đặt và tôi nghĩ rằng cột geom phải được cập nhật thủ công để bao gồm một phép chiếu.

Ngoài ra, tôi có thể bỏ qua việc tra cứu và chỉ cần sử dụng ogr2ogr :

>ogr2ogr -f "PostgreSQL" "PG:host=<hostaddress> user=<user> dbname=<dbname> password=<password>" "C:/shapefile.shp" -nln <schema>.<table>

mà dường như thiết lập phép chiếu tốt, có lẽ trích xuất nó tự động từ shapefile / prj nguồn.

Câu hỏi

Vậy điều gì bất lợi khi sử dụng ogr2ogr? Trên thực tế có một cờ để shp2pgsql tự động trích xuất và thiết lập phép chiếu đúng không? Nếu không, tai sao không?


Phụ lục

Có một thú vị, có lẽ hơi ngày, phân tích so sánh của việc sử dụng ogr2ogr vs shp2pgsql sẵn trên naturalgis.pt . Nó chứng minh cho dữ liệu mẫu cụ thể của họ, rằng ogr2ogr hoạt động tốt hơn đáng kể trên các bộ dữ liệu nhỏ , nhưng shp2pgsql hoạt động tốt hơn một chút trên các bộ dữ liệu lớn hơn .

Tôi không cảm thấy điều này cung cấp một câu trả lời dứt khoát. Các cơ sở mã có thể đã phát triển, cải thiện hiệu suất của mỗi người. Họ chỉ thử nghiệm một bộ dữ liệu mẫu rất nhỏ. Bộ dữ liệu "lớn" đại diện không thực sự lớn như vậy. Ngoài ra, chủ yếu là thảo luận về các vấn đề về hiệu suất, điều này chắc chắn ảnh hưởng đến khả năng sử dụng, nhưng câu hỏi ban đầu quan tâm nhiều hơn đến các yêu cầu đầu vào của người dùng liên quan đến khả năng sử dụng.


1
Tôi không nghĩ rằng tôi đã từng có một shapefile mà tôi đã nghi ngờ SRS. Tôi chắc chắn đã có các shapefile buộc tôi phải đặt câu hỏi về ý chí của mình để sống ở nhiều cấp độ khác, nhưng vấn đề là môi trường tốt hơn để phân tích định dạng 2Gb lỗi thời, cho phép tất cả các loại hình học tự giao nhau và vì vậy nhiều nỗi kinh hoàng khác không phải là một trong số họ.
John Powell

Câu trả lời:


4

Không nói chuyện với các nhà phát triển shp2pgsql, câu trả lời của tôi là dựa trên quan điểm, nhưng ít nhất shp2pgsql dễ dàng hơn nhiều mà không cần tự động phát hiện phép chiếu. Phần chính của mã nguồn là khoảng 1800 dòng http://postgis.net/docs/doxygen/2.2/d8/da3/shp2pgsql-core_8c_source.html và nó thực hiện những gì cần thiết: chuyển đổi hình học và thuộc tính từ shapefiles thành PostGIS.

Trong các nguồn GDAL, mã chỉ đảm nhiệm việc giải thích các tệp ESRI .prj là 2700 dòng https://github.com/OSGeo/gdal/blob/master/gdal/ogr/ogr_srs_esri.cpp .

Ưu và nhược điểm:

Đối với quan điểm của người dùng, ưu điểm chính của shp2pgsql là:

Nhược điểm chính của shp2pgsql là nó chỉ hỗ trợ các shapefiles.

GDAL và ogr2ogr cung cấp các chức năng giống nhau cho shapefiles so với shp2pgsql nhưng GDAL có thể xử lý hàng chục định dạng vectơ khác nhau https://gdal.org/ogr_formats.html và nó cung cấp nhiều tùy chọn hơn để chọn và xử lý dữ liệu trong quá trình chuyển đổi. Tuy nhiên, với GDAL

  • Người dùng phải cài đặt GDAL
  • Người dùng phải học cách sử dụng GDAL, đặc biệt là ogr2ogr và nhiều tùy chọn của trình điều khiển PostGIS
  • ogr2ogr là tiện ích dòng lệnh không có GUI

Bạn có một điểm hợp lệ-- logic để phân tích tệp .prj rất phức tạp và có các trường hợp góc không được giải nén. Câu hỏi của tôi, tuy nhiên, chủ yếu liên quan đến khả năng sử dụng của các công cụ.
jac

ogr2ogr và gdal là những tệ nạn cần thiết, nhưng, quan điểm của bạn là một điều tốt - chúng không rõ ràng và có một đường cong học tập. shp2pgsql làm những gì nó nói trên có thể.
John Powell
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.