Dizindeki tüm shapefiles dönüştürmek için ogr2ogr kullanarak?


25

Birkaç shapefile ile bir dizin var.

Tüm bu shapefile dosyalarını ogr2ogr ile MapInfo'ya nasıl dönüştürebilirim?

Bir dosyayı nasıl dönüştürebileceğimi biliyorum. Ve her dosya için bir satır yazan bir toplu iş komut dosyası yapabilirim. Ancak bir dizindeki (ve alt dizindeki) tüm dosyaları dönüştürmenin daha kolay bir yolu yok.


Hangi işletim sistemine bağlı. Temel olarak "for" döngüsünü yapın, bkz. Gis.stackexchange.com/questions/7803/…
Mike T

OS Windows 7'dir. Komut isteminde bunu deneyin:% f için * .shp; ogr2ogr -f MapInfo Dosya $ f.tab. Ama bu işe yaramıyor. Hata alıyorum: 'datasour' açılamıyor '$ f.tab' ile aşağıdaki sürücülerden .....
Stefan

SHP'den SEKME nasıl yapılır: ogr2ogr -f "MapInfo Dosyası"% 1.tab% 1.shp. Ancak OGR bir PRJ dosyasını doğru bir şekilde tanıyamadığı sürece, yanlış coordsys içinde yerleşik TAB dosyalarıyla kolayca sonuçlanır. Seçtiğiniz tüm dosyaları da işleyebilen dahili Universal Translator'ı (FME azaltılmış) kullanmanızı öneririm. Doğru coordsys seçmenizi sağlar.
Uffe Kousgaard

MapInfo Dosyasında doğru projeksiyon ile ilgili problemlerim var. Doğru projeksiyonu dahil etmeye çalışıyorum, ancak bu işe yaramıyor. Mapinfo dosyasındaki projeksiyon toprak olmayan (metre) olarak ayarlanmıştır. Ogr2ogr aracı ile doğru projeksiyon eklemek mümkün mü. Komut satırlarını başka bir komut dosyasına koymak istiyorum. Bu yüzden Evrensel Tercüman kullanmamayı tercih ederim.
Stefan

OGR kütüphanesini denediniz mi ve komut satırı araçları?
Alex Markov

Yanıtlar:


34

Windows'ta, geçerli ve geçerli olan alt dizinler için bu komutu deneyin:

for /R %f in (*.shp) do ogr2ogr -f "MapInfo File" "%~dpnf.tab" "%f"

Kısaca açıklamak için burada neler olup bittiğini bir hile , %~dpnf.tabdeğişken kullanan % f ekler hangi ile d nehir mektubu, p sporcudan adını (yani, klasör veya dizin) ve özler dosya n (olmadan ame .shpdosya uzantısı) . Son olarak, .tabyeni uzantı için bileşik değişken değiştiricilerin hemen ardından eklenir.

Böylece, dizinde C:\MyDataiseniz ve bu dizinde verileriniz varsa ve alt dizinlerde C:\MyData\Region1ve varsa C:\MyData\Region1\City1, herhangi bir Shapefile ( .shpuzantılı) işlenecek ve .tabaynı dizinde benzer bir dosya oluşturulacaktır.


Güzel! Bu çalışıyor! Cevabınız için çok teşekkürler :) Bir soru daha: Alt dizine başvurmanın ve dosyaları başka bir alt dizine dönüştürmenin de bir yolu var mı? Shapefiles içeren bir klasör var. Mesela: Hollanda \ şekil \ ilX Hollanda \ şekil \ il \ HollandaY Hollanda \ şekil \ ilZZ Ve bunu şu klasörlere dönüştürmek ister: Hollanda \ mapinfo \ vilayetX Hollanda \ mapinfo \ vilayet \ Hollanda \ mapinfo \ vilayetZ Teşekkürler :)
Stefan

Özyinelemeli bir arama için yukarıdakileri güncelledim, ancak "şekli" "mapinfo" olarak değiştirmek için fazladan mantığı nasıl yapacağımı bilmiyorum; belki superuser.com
Mike T

1
Hızlı yanıtınız için tekrar teşekkürler. Bu çok yardımcı oldu. Dosyaları sadece doğru dizine kopyalamam gerekiyor.
Stefan

Windows komut satırı ve toplu iş dosyası komutunun farklı olduğunu unutmayın: Yüzdesini ikiye katlamanız %fgerekir %%f. Ayrıntılar için ss64.com/nt/for.html adresine bakın.
AndreJ

Bu harika, bir MAC üzerinde benzer bir yaklaşım
Ryan Garnett

11

Unix bash için:

#!/bin/bash

for FILE in *.mif # cycles through all files in directory (case-sensitive!)
do
    echo "converting file: $FILE..."
    FILENEW=`echo $FILE | sed "s/.mif/_new.shp/"` # replaces old filename
    ogr2ogr \
    -f "ESRI Shapefile" \
    "$FILENEW" "$FILE"
done
exit

Bir * nix tabanlı işletim sistemi (yani Linux veya OS X) çalışıyorsanız, bazı toplu kabuk komut vardır clhenrik geliştirilen burada (yukarıda dayanmaktadır).

Bazı komut dosyalarını biraz daha genel hale getiren ve kullanım hakkında biraz daha açıklama sağlayan bir çatal üzerinde çalışıyorum.



Dosya adı boşluk içeriyorsa, bu bir hataya neden olur.
JasonRDalton

8

As Alex Markov söyledi Kullanmak için, en iyi yol olacağını Öğr .

Bir komut dosyası yapmanız gerekecek, ama çok basit bir senaryo. Temel olarak eğer pencereler kullanıyorsanız, yapmanız gereken tek şey komut satırında aşağıdaki kodu çalıştırmaktır (istediğiniz klasör içinde):

for %f in (*.tab) do ogr2ogr -f "KML" %~nf.kml %f

Bu siteyi kontrol edin, hepsi burada açıklanmaktadır:

http://www.processamentodigital.com.br/?p=2511


2
Ben de yapabilirim düşünüyorum: ogr2ogr "KML" {outfolder} {infolder} İpucu alınan -f underdark.wordpress.com/2012/05/09/batch-shapefile-clipping
Nathan W

Not Bu cevap, farklı dosya formatlarına atıfta bulunan yakından ilgili bir sorudan geldi.
whuber

Merhaba, bu yaklaşımı Ubuntu'da denediğimde örneğin ogr2ogr -f "KML" {outfolder} {infolder} Hata alıyorum: 'HATA 4: KML dosyası oluşturulamadı'. Burada neyin yanlış gittiği hakkında bir fikrin var mı? KML desteğiyle
GDAL'yi yaptım

7

python ile:

import os 

for a in os.listdir(os.getcwd()):
   fileName, fileExtension = os.path.splitext(a)
   os.system('ogr2ogr -f "ESRI Shapefile" %s %s' % (a, fileName + '.tab'))

os.getcwd()dosyalarınızın bulunduğu yolu değiştirebilirsiniz ...

umarım sana yardımcı olur


for a in *.shp:bir sözdizimi hatası; Sen düşünüyorsunfrom glob import glob; for a in glob('*.shp'):
Mike T

Ah üzgünüm, yanlış bir tarzda yazdım. güncelledim. @ Mike Toews teşekkürler.
Aragon,

4

Bir döngü gerekmez, sadece bir dizini kaynak ve hedef olarak adlandırabilirsiniz ve ogr2ogr, kaynak dizindeki herhangi bir dosyayı dönüştürür. Buraya bakın: TAB'ın MIF / MIF'in TAB'a dönüştürülmesi


Teşekkürler! Bir üst dizinden tüm alt dizinlere başvurabilir ve tüm dosyaları diğer alt dizinlere dönüştürebilir miyim? Ihave: Hollanda \ şekil \ ilX Hollanda \ şekil \ il \ HollandaY şekil \ il \ ilZ ve diğerleri ... Ve bunu şu klasörlere dönüştürmek istiyorum: Hollanda \ mapinfo \ ilX Hollanda \ mapinfo \ ilY Hollanda \ mapinfo \ ilZ yapabilirim her il için bir satır yazın, ancak bir emirle de yapabilir miyim
Stefan

Bunu denemedim, ama bunun mümkün olduğunu sanmıyorum. İlgili giriş ve çıkış dizinlerini idare eden bir döngüye ihtiyacınız olacaktır. Bu durumda, bir piton yaklaşımı takip etmek muhtemelen daha kolaydır.
Torsten,


0

Mapinfo'daki Evrensel Tercüman birden fazla dosyayı yönetebilir. Hedef klasöre gidin, tüm şekil dosyalarını seçin, giriş ve çıkış için CRS tanımlayın. Tamamlanmalı.


0

Bu, Aragon'un yukarıdaki cevabını düzeltiyor. Yalnızca .TAB veya .tab dosyalarında ogr2ogr komutunu çalıştıracak ve klasördeki diğer dosya türlerini görmezden gelecektir.

#!/usr/bin/env python3

import os 

for a in os.listdir(os.getcwd()):
  fileName, ext = os.path.splitext(a)
  if ext.lower() == '.tab':
    print('ogr2ogr -f "ESRI Shapefile" %s %s' % (a.replace(ext,
                           '.shp'), fileName + ext))
    os.system('ogr2ogr -f "ESRI Shapefile" %s %s' % (a.replace(ext,
                           '.shp'), fileName + ext))
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.