Deneme yanılma yoluyla keşfettiğiniz gibi, düzeltmeniz gereken az sayıda nagging sorunu vardı, bunların sonuncusu ogr2ogr'un -nlt GEOMETRY
* argümanı kullanılarak çözüldü .
* @ LeeHachadoorian'ın , önceki faydaların yan faydalara ek olarak en iyi uygulamaları desteklemesinden -nlt PROMOTE_TO_MULTI
ziyade, varsayılan bir çözüm olarak kullanılan yorumundaki tavsiyeye dikkat edin nlt GEOMETRY
.
Kullanıcı İzinleri ve Hata Mesajları
Birincisi, ogr2ogr şekil dosyanızı açamadı ve izin sorunlarının aslında şekil dosyanıza erişen işletim sistemi kullanıcısını etkilediğini fark ettiniz. Ama burada diğerleri için önemli bir ders var, özellikle ogr2ogr'un bu noktadaki hata mesajı yanıltıcıydı! Aslında, ilk yorumculardan biri şekil dosyanızın geçersiz olduğunu düşündü ve kuşkusuz, ilk tahminim yol / dosya adında muhtemelen bir hata / yazım hatası olduğu veya dosya yolunda alışılmadık bir karakter olabileceği idi. boşluk — ogr2ogr'un şekil dosyasına işaret etme yeteneğini kırıyordu. Bildiğiniz gibi, bu aslında kullanıcı izinleriyle ilgili bir sorundu. Hata mesajı kırmızı bir ringa balığı oluşturduğundan, bu başkalarının zihinlerinin arkasında tutması gereken bir olasılıktır. :)
SQL Kullanıcı Ayrıcalıkları ve Gizem Hataları
Ben bir süre için ikinci hata tarafından stumped olurdu, ama SQL kullanıcı akıllı farklı bir ithalat yardımcı programı (shp2pgsql) ile test ederek, daha kesin bir hata mesajı var ve SQL kullanıcı spatial_ref_sys
tablo üzerinde gerekli ayrıcalıkları verdi . Birisi zorluk yapmalıdır düzgün çalışması için kendi ogr2ogr ithalat talimat alma sahip Yani emin onların SQL kullanıcı veritabanı kendisi hem yeterli ayrıcalıklara sahip ve 'spatial_ref_sys' masaya.
Karışık Geometri Türleri ve En İyi Uygulamalar
Karşılaştığınız son engel, şekil dosyalarının hem tek hem de çok parçalı geometrilerin aynı veri kümesinde / dosyada bir arada var olmasına izin vermesiyle ilişkili gibi görünüyor. Aynı tablodaki geometri türlerini, aynı özellik türünün tek / çok parçalı için bile karıştırmanın kötü bir uygulama olduğu düşünülür ve varsayılan olarak, araç zincirinizdeki açık kaynak oynatıcılar sizi geometri türlerini karıştırmaya karşı korumaya çalışır. Neyse ki, size bazı seçenekler sunuyorlar. Başlangıçta , ogr2ogr komutunuzda, ESRI'nin gevşek kuralına rağmen çokgen veri kümenizi içe aktarmanıza izin veren -nlt GEOMETRY
* bağımsız değişkenini ayarlamanız önerilir . Bununla birlikte, bu, muhtemelen tablonuzda hem tek parçalı hem de çok parçalı geometrilere sahip olduğunuz anlamına gelir ve bu, daha sonra için başka baş ağrıları oluşturabilir!
Ogr2ogr'un -nlt
dikkate almanız gereken başka bir seçeneği olduğunu belirtmek gerekir PROMOTE_TO_MULTI
. Belgeleri alıntılamak için ..
GDAL 1.10'dan başlayarak, PROMOTE_TO_MULTI, çokgen veya çokgenleri çokgenlere karıştıran katmanları ve satır dizelerini veya çok satırlı dizeleri çok satırlı dizilere karıştıran katmanları otomatik olarak tanıtmak için kullanılabilir. Şekil dosyalarını PostGIS ve geometri türleri için sıkı denetimler uygulayan diğer hedef sürücülere dönüştürürken yararlı olabilir.
Başka bir deyişle, PROMOTE_TO_MULTI
bayrağı kullanırsanız, TÜM özellikleriniz tek bir parçadan oluşsa bile çok parçalı özelliklere dönüştürülür. @LeeHachadoorian tarafından yorumlarda belirtildiği gibi - ve eminim çoğu kabul edersiniz - PROMOTE_TO_MULTI
daha GEOMETRY
iyi uygulamaya uyduğundan, tablonuzdaki özellik geometrilerini birleştirerek daha gevşek bayrağı tercih etmeniz önerilir . Temel olarak, yazdığınız herhangi bir kod çok parçalı geometriler beklemelidir. Kuşkusuz, bu daha temiz olabilir ve bazı gelişmeleri basitleştirebilir.
İthalat sonrası bir SHP ile sorun yaşayan biri için genel tavsiye
- Yollarınızda korkak karakterler bulunmadığından ve yol ya da dosya adında yazım hatası ya da yazım hatası olmadığından emin olun
- @ User1919 tarafından keşfedildiği gibi, OS kullanıcınızın şekil dosyasına erişmek için yeterli ayrıcalığa sahip olduğundan emin olun! Gösterdikleri gibi, şekil dosyasını QGIS gibi başka bir yazılımda açmayı denemeye yardımcı olabilir - bir yazılımda çalışıyorsa, bozuk değildir ve diğer yazılımlarda çalışması gerekir.
İlk olarak sudo
, komut dosyanızın amaçlandığı şekilde çalıştığından emin olana kadar izin sorunları ile ilgili kuralların dışlanması için ogr2ogr komutunuzu çalıştırmayı düşünün .
- Ayrıca @ user1919'un gerçekleştirdiği gibi, SQL kullanıcınızın hem komut dosyanız tarafından hedeflenen veritabanında hem de
spatial_ref_sys
tabloda yeterli ayrıcalıklara sahip olduğundan emin olun .
Yine, ilk olarak, komut dosyası çalışana kadar SQL ayrıcalık sorunlarını ekarte etmek için PostGRESql süper kullanıcısını burada kullanmayı düşünün. Betiğiniz süper kullanıcıyla çalışıyorsa, tercih edilen bir otomasyon kullanıcısıyla başarısız olursa, sorunun verilerinizle veya ortamınızla (gdal / ogr yüklemesi vb.) Değil SQL kullanıcısıyla ilgili olduğunu bilirsiniz.
-nlt
Bayrağı PROMOTE_TO_MULTI
veya olarak ayarlamayı deneyin GEOMETRY
. Şekil dosyaları daha gevşek bir özellik türü kuralına izin verdiğinden, bazen açık kaynak yardımcı programlarınıza daha uygun olmaları talimatını vermeniz gerekir :)
-lco PRECISION=no
PostGRESql veya MySQL'e aktarıyorsanız, ayarlamayı deneyin. Adil uyarı, bu argümanın ne yaptığını tam olarak anlamıyorum, ama burada yaşadığım şey .. Bildiğiniz gibi, şekil dosyaları genellikle SHAPE_LENGTH
ve SHAPE_AREA
alanlarını içerir ve ben Gizem hataları yaşadığımda bazen farkettim, bu alanları silersem verilerin doğru şekilde içe aktarılmasını sağlayabilirim. Ancak, kullanırsam -lco PRECISION=no
, bu alanları silmek zorunda kalmadan içe aktarılacak verileri alabilirim. Benim önerim, bu parametreyi bir sorun giderme adımı olarak kullanmak, ancak bir üretim çözümüne aktarmayı kabul etmeden önce hangi sorunu gerçekten çözdüğünü anlamaktır.
Son olarak, MySQL kullanıyorsanız, bazı çok büyük özellik geometrilerinin MySQL max_allowed_packet
parametresini bozabileceğini unutmayın . Bu konuda daha fazla bilgiyi MySQL sürücüsünün belgelerinde okuyabilirsiniz .. ancak çözüm, MySQL yapılandırmanızı varsayılandan daha büyük bir değere izin verecek şekilde değiştirmektir.
Ogr2ogr için PostGIS Alma Komutuna Örnek SHP
Burada dolaşabilecek yeni başlayanlar uğruna, SHP to Post ithalatlarımın çoğu ogr2ogr kullanmak gibi görünüyor. Dosya yollarını / adlarını tırnak içine aldığım dikkat edin, bu boşluklara, garip karakterlere ve terminal boyunca kesmeye karşı korur .. Ayrıca geometri adı alanı için geçersiz kılmaya ek olarak yukarıda tartışılan argümanların çoğunu dahil ettim. FID alanı ve katman adı:
ogr2ogr -f "PostgreSQL" "PG:host=127.0.0.1 user=myuser dbname=mydb password=mypassw0rd" "C:/path/to/some_shapefile.shp" -lco GEOMETRY_NAME=the_geom -lco FID=gid -lco PRECISION=no -nlt PROMOTE_TO_MULTI -nln new_layername -overwrite