Menggunakan shp2pgsql, bukannya ogr2ogr untuk mengimpor shapefile ke PostGIS? [Tutup]

8

Saya mungkin melakukan sesuatu yang salah di sini, tetapi:

Jika saya mengimpor beberapa shapefile ke database PostGIS menggunakan shp2pgsql , saya harus terlebih dahulu mencari tahu SRID / EPSG dari shapefile itu. Saya pikir ini, minimal, proses dua langkah. Pertama-tama saya menanyakan shapefile seperti ini:

>ogrinfo -al -so someshapefile.shp

yang mengembalikan informasi proyeksi teks terkenal (wkt), tetapi sedikit verbose dan agak buram [bagi saya]. Sesuatu seperti:

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"]]

Saya kemudian biasanya menjalankan info wkt melalui alat konversi seperti Prj2EPSG untuk menemukan EPSG / SRID.

Pada titik ini, saya dapat mengimpor shapefile menggunakan:

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

Catatan, saya menentukan SRID dengan -sbendera.

Jika, saya menjalankan shp2pgsql tanpa menentukan SRID, tidak ada proyeksi yang ditetapkan dan saya pikir kolom geom harus diperbarui secara manual untuk memasukkan proyeksi.

Atau, saya bisa melewatkan pencarian, dan cukup gunakan ogr2ogr :

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

yang tampaknya mengatur denda proyeksi, mungkin mengekstraksi secara otomatis dari sumber shapefile / prj.

Pertanyaan

Jadi apa kerugian menggunakan ogr2ogr? Apakah sebenarnya ada flag sehingga shp2pgsql secara otomatis mengekstrak dan mengatur proyeksi yang tepat juga? Jika tidak, mengapa tidak?


Tambahan

Ada yang menarik, mungkin sedikit tanggal, analisis komparatif menggunakan ogr2ogr vs shp2pgsql tersedia di naturalgis.pt . Ini menunjukkan untuk data sampel khusus mereka, bahwa ogr2ogr berkinerja lebih baik secara signifikan pada dataset kecil , tetapi shp2pgsql berkinerja lebih baik pada dataset yang lebih besar .

Saya tidak merasa ini memberikan jawaban yang pasti. Basis kode mungkin telah berevolusi, meningkatkan kinerja masing-masing. Mereka hanya menguji set kecil sampel data. Dataset representatif "besar" sebenarnya tidak terlalu besar. Juga, ini terutama membahas masalah kinerja, yang tentunya mempengaruhi kegunaan, tetapi pertanyaan awal lebih tertarik pada persyaratan input pengguna terkait usability.

Jac
sumber
1
Saya tidak berpikir saya pernah memiliki shapefile di mana saya meragukan SRS. Saya tentu saja memiliki shapefile yang memaksa saya mempertanyakan keinginan saya untuk hidup di banyak level lain, tetapi masalah tentang lingkungan mana yang lebih baik untuk mem-parsing format 2Gb yang sudah ketinggalan zaman, yang memungkinkan semua jenis geometri yang saling berpotongan dan sebagainya banyak kengerian lainnya bukan salah satunya.
John Powell

Jawaban:

4

Tanpa berbicara dengan pengembang shp2pgsql, jawaban saya adalah berdasarkan opini, tetapi setidaknya shp2pgsql jauh lebih mudah tanpa deteksi otomatis proyeksi. Bagian utama dari kode sumber adalah sekitar 1800 baris http://postgis.net/docs/doxygen/2.2/d8/da3/shp2pgsql-core_8c_source.html dan ia melakukan apa yang penting: mengubah geometri dan atribut dari shapefile ke PostGIS.

Dalam sumber GDAL kode yang hanya menangani menafsirkan file .prj ESRI adalah 2700 baris https://github.com/OSGeo/gdal/blob/master/gdal/ogr/ogr_srs_esri.cpp .

Pro dan kontra:

Bagi pengguna sudut pandang, keuntungan utama shp2pgsql adalah:

Kerugian utama dari shp2pgsql adalah hanya mendukung shapefile.

GDAL dan ogr2ogr memberikan fungsionalitas yang sama untuk shapefile daripada shp2pgsql tetapi GDAL dapat menangani puluhan format vektor yang berbeda https://gdal.org/ogr_formats.html dan memberikan lebih banyak pilihan untuk memilih dan memproses data selama konversi. Namun, dengan GDAL

  • Pengguna harus menginstal GDAL
  • Pengguna harus belajar menggunakan GDAL, terutama ogr2ogr dan banyak opsi driver PostGIS
  • ogr2ogr adalah utilitas baris perintah tanpa GUI
pengguna30184
sumber
Anda memiliki titik yang valid - logika untuk mem-parsing file .prj rumit dan memiliki kasus sudut yang belum diperbaiki. Pertanyaan saya, bagaimanapun, sebagian besar terkait dengan kegunaan alat.
jac
ogr2ogr dan gdal adalah kejahatan yang diperlukan, tetapi, poin Anda bagus - mereka tidak jelas dan memiliki kurva belajar. shp2pgsql melakukan apa yang tertulis di kaleng.
John Powell