Używasz ogr2ogr do konwersji wszystkich plików kształtów w katalogu?


25

Mam katalog z kilkoma plikami kształtów.

Jak przekonwertować wszystkie te pliki kształtów na MapInfo za pomocą ogr2ogr?

Wiem, jak mogę przekonwertować jeden plik. I mogę zrobić skrypt wsadowy, pisząc wiersz dla każdego pliku. Ale czy nie ma łatwiejszego sposobu konwersji wszystkich plików w katalogu (i podkatalogu).


To zależy od systemu operacyjnego. Zasadniczo zrób pętlę „za”, zobacz gis.stackexchange.com/questions/7803/…
— Mike T

System operacyjny to Windows 7. Próbuję tego w wierszu polecenia: dla% f w * .shp; do ogr2ogr -f MapInfo $ f.tab. Ale to nie działa. Pojawia się błąd: „Nie można otworzyć danych '$ f.tab” z następującymi sterownikami .....
— Stefan

Oto jak zrobić SHP do TAB: ogr2ogr -f „Plik MapInfo”% 1.tab% 1.shp. Ale dopóki OGR nie rozpozna poprawnie pliku PRJ, łatwo znajdziesz pliki TAB z wbudowanym niewłaściwym coordys. Polecam korzystanie z wbudowanego Universal Translator (zmniejszonego FME), który może również przetwarzać wszystkie wybrane pliki. Pozwala wybrać poprawne współrzędne.
— Uffe Kousgaard

Naprawdę mam problemy z właściwą projekcją w pliku MapInfo. Próbuję uwzględnić odpowiednią projekcję, ale to nie działa. Projekcja w pliku de mapinfo jest ustawiona na wartość inną niż ziemia (metry). Czy możliwe jest dołączenie poprawnej projekcji za pomocą narzędzia ogr2ogr. Chciałbym umieścić wiersze poleceń w innym skrypcie. Wolę więc nie używać Universal Translator.
— Stefan

Próbowałeś już biblioteki OGR i jej narzędzi wiersza poleceń?
— Alex Markov

Odpowiedzi:


34

W systemie Windows w przypadku bieżących i podkatalogów pod bieżącym wypróbuj to polecenie:

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

Aby krótko opisać sztuczek, co się tu dzieje , %~dpnf.tabwykorzystuje zmienną % f , z którym dodaje się d rzeka list, str nazwę ATH (czyli folderu lub katalogu) i wyodrębnia plik n ame (bez .shprozszerzenia) . Na koniec .tabjest dodawany natychmiast po modyfikatorach zmiennych złożonych dla nowego rozszerzenia.

Więc jeśli jesteś w katalogu C:\MyDatai masz dane w tym katalogu, podkatalogach C:\MyData\Region1i C:\MyData\Region1\City1, dowolny .shpplik Shapefile (z rozszerzeniem) zostanie przetworzony, a podobny plik o nazwie .tabzostanie utworzony w tym samym katalogu.


Fajne! To działa! Wielkie dzięki za odpowiedź :) Jeszcze jedno pytanie: Czy istnieje również sposób na odniesienie się do podkatalogu i konwersję plików w innym podkatalogu. Mam różne katalogi zawierające pliki kształtów. Takich jak: Holandia \ kształt \ prowincjaX Holandia \ kształt \ prowincjaY Holandia \ shape \ prowincjaZ I chciałbym przekonwertować to na następujące foldery: Holandia \ mapinfo \ prowincjaX Holandia \ mapinfo \ prowincja Y Holandia \ mapinfo \ prowincjaZ Dzięki :)
— Stefan

Zaktualizowałem powyższe wyszukiwanie rekurencyjne, jednak nie wiem, jak zrobić dodatkową logikę, aby zmienić „kształt” na „mapinfo”; może znajdź / zapytaj na superuser.com
— Mike T

1
Jeszcze raz dziękuję za szybką odpowiedź. To było bardzo pomocne. Muszę tylko skopiować pliki do odpowiedniego katalogu.
— Stefan

Zauważ, że wiersz poleceń systemu Windows i polecenie pliku wsadowego różnią się: Musisz podwoić procent %fdo %%f. Szczegółowe informacje można znaleźć na stronie ss64.com/nt/for.html .
— AndreJ

To świetne, podobne podejście na MAC
— Ryan Garnett

11

W przypadku Uniksa Bash:

#!/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

Jeśli pracujesz w systemie operacyjnym opartym na * nix (tj. Linux lub OS X), istnieje kilka skryptów powłoki wsadowej, które Clhenrik opracował tutaj (na których opiera się powyższe).

Pracuję nad rozwidleniem, które sprawia, że ​​niektóre skrypty są nieco bardziej ogólne i zawierają nieco więcej opisu użytkowania.



Spowoduje to błąd, jeśli nazwa pliku zawiera spacje.
— JasonRDalton

8

Jak powiedział Alex Markov , najlepszym sposobem byłoby użycie OGR .

Będziesz musiał zrobić skrypt, ale bardzo prosty. Zasadniczo, jeśli używasz systemu Windows, wszystko, co musisz zrobić, to uruchomić następujący kod w wierszu poleceń (wewnątrz żądanego folderu):

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

Sprawdź tę stronę, wszystko wyjaśniono tutaj:

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


2
Myślę, że możesz też: ogr2ogr -f "KML" {outfolder} {infolder} Wskazówka pochodzi z underdark.wordpress.com/2012/05/09/batch-shapefile-clipping
— Nathan W

NB Ta odpowiedź pochodzi od ściśle powiązanego pytania dotyczącego różnych formatów plików.
— whuber

Cześć, kiedy próbuję tego podejścia w Ubuntu, np. Ogr2ogr -f "KML" {outfolder} {infolder} pojawia się błąd: „BŁĄD 4: Nie udało się utworzyć pliku KML”. Masz pojęcie, co może tu pójść nie tak? Zbudowałem GDAL z obsługą KML
— marty_c

7

z pythonem:

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'))

możesz przejść os.getcwd()do ścieżki, w której znajdują się twoje pliki ...

Mam nadzieję, że Ci to pomoże


for a in *.shp:jest błędem składni; myśliszfrom glob import glob; for a in glob('*.shp'):
— Mike T

o przepraszam, napisałem to w złym stylu. zaktualizowałem. @ Mike Toews dzięki.
— Aragonia

4

Nie potrzebujesz pętli, możesz po prostu nazwać katalog źródłowy i docelowy, a ogr2ogr przekonwertuje dowolne pliki w katalogu źródłowym. Zobacz tutaj: Konwersja TAB na MIF / MIF na TAB


Dzięki! Czy mogę odwoływać się z jednego katalogu nadrzędnego do wszystkich podkatalogów i konwertować wszystkie pliki na inne podkatalogi. Ihave: Holandia \ kształt \ prowincjaX Holandia \ kształt \ prowincja Y Holandia \ kształt \ prowincjaZ i tak dalej ... Chciałbym przekonwertować to na te foldery: Holandia \ mapinfo \ prowincjaX Holandia \ mapinfo \ prowincja Y Holandia \ mapinfo \ prowincjaZ Mogę napisz wiersz dla każdej prowincji, ale czy mogę to zrobić również jednym poleceniem
— Stefan

Nie próbowałem tego, ale nie sądzę, że jest to możliwe. Potrzebna byłaby pętla, która obsługuje odpowiednie katalogi wejściowe i wyjściowe. W takim przypadku prawdopodobnie łatwiej jest zastosować podejście w języku python.
— Torsten


0

Universal Translator w Mapinfo może obsługiwać wiele plików. Przejdź do folderu docelowego, wybierz wszystkie pliki kształtów, zdefiniuj CRS dla danych wejściowych i wyjściowych. Powinno być zrobione.


0

Jest to udoskonalenie powyższej odpowiedzi Aragona. Będzie uruchamiał tylko ogr2ogr na plikach .TAB lub .tab i zignoruje inne typy plików w folderze.

#!/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))
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.