Використовуючи ogr2ogr для перетворення всіх файлів форм у каталог?


25

У мене є каталог з кількома формами файлів.

Як можна перетворити всі ці файли форм у MapInfo за допомогою ogr2ogr?

Я знаю, як я можу конвертувати один файл. І я можу зробити пакетний сценарій, писати рядок для кожного файлу. Але чи не існує простішого способу перетворення всіх файлів у каталог (і підкаталог).


Це залежить, яка операційна система. В основному зробіть цикл "для", див. Gis.stackexchange.com/questions/7803/…
Майк Т

ОС - це Windows 7. Спробую це в командному рядку: для% f в * .shp; do ogr2ogr -f FileInfo File $ f.tab. Але це не працює. Я отримую помилку: 'Не вдається відкрити datasour' $ f.tab 'із такими драйверами .....
Стефан

Ось як зробити SHP до TAB: ogr2ogr -f "Файл MapInfo"% 1.tab% 1.shp. Але якщо OGR не в змозі розпізнати файл PRJ правильно, ви легко можете отримати файли TAB з неправильним вбудованим коордисом. Я рекомендую використовувати вбудований універсальний перекладач (зменшений FME), який також може обробляти всі вибрані вами файли. Це дозволяє вибрати правильні coordsys.
Uffe Kousgaard

У мене справді є проблеми з правильною проекцією у FileInfo File. Я намагаюся включити правильну проекцію, але це не працює. Проекція у файлі de mapinfo встановлена ​​на неземні (метри). Чи можливо включити правильну проекцію за допомогою інструменту ogr2ogr. Я хотів би помістити командні рядки в інший сценарій. Тому я скоріше не користуюся універсальним перекладачем.
Стефан

Ви спробували бібліотеку OGR та її інструменти командного рядка?
Олексій Марков

Відповіді:


34

У Windows для поточних та підкаталогів під поточним спробуйте виконати цю команду:

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

Щоб коротко пояснити хитрість того, що тут відбувається , %~dpnf.tabвикористовується змінна % f , за допомогою якої вона додає букву річки d , ім'я p ath (тобто папку чи каталог) та витягує файл n ame (без .shpрозширення файлу) . Нарешті, .tabдодається відразу після змінених модифікаторів змінної для нового розширення.

Отже, якщо ви знаходитесь в каталозі C:\MyData, і у вас є дані в цьому каталозі, і підкаталоги C:\MyData\Region1та C:\MyData\Region1\City1, будь-який Shapefile (з .shpрозширенням) буде оброблений, а аналогічний іменований файл з .tabбуде створений в тому самому каталозі.


Класно! Це працює! Велике спасибі за відповідь :) Ще одне запитання: чи є також спосіб звернутися до підкаталогу та конвертувати файли в інший підкаталог. У мене є різні каталоги, що містять форм-файли. Такі як: Нідерланди \ форма \ провінціяX Нідерланди \ форма \ провінція Y Нідерланди \ форма \ провінціяZ І хотіли б перетворити це в ці папки: Нідерланди \ mapinfo \ провінціяX Нідерланди \ mapinfo \ провінціяY Нідерланди \ mapinfo \ провінціяZ Спасибі :)
Стефан

Я оновив вище для рекурсивного пошуку, однак не знаю, як зробити додаткову логіку, щоб змінити "форму" на "mapinfo"; можливо знайдіть / запитайте на superuser.com
Майк Т

1
Ще раз дякую за вашу швидку відповідь. Це було дуже корисно. Мені потрібно лише скопіювати файли в потрібний каталог.
Стефан

Зауважте, що командний рядок Windows та команда пакетного файлу відрізняються: Ви повинні подвоїти відсотки %fдо %%f. Докладні відомості див. У ss64.com/nt/for.html .
AndreJ

Це чудово, подібний підхід на MAC
Райан Гарнетт

11

Для unix 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

Якщо ви працюєте в * NIX на основі операційної системи (тобто Linux або OS X), є деякі скрипти партії оболонки, clhenrik розроблені тут (які вище засновані на).

Я працюю над вилкою, яка робить деякі сценарії трохи більш загальними і надає трохи більше опису щодо використання.



Це призведе до помилки, якщо ім'я файлу містить пробіли.
JasonRDalton

8

Як сказав Олексій Марков , найкращим способом було б для вас використання OGR .

Вам потрібно буде зробити сценарій, але дуже простий. Якщо ви використовуєте Windows, то, що вам потрібно зробити, це запустити наступний код у командному рядку (всередині потрібної папки):

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

Перевірте цей сайт, тут все пояснено:

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


2
Я думаю, ви також можете зробити: ogr2ogr -f "KML" {outfolder} {infolder} Порада, взята з underdark.wordpress.com/2012/05/09/batch-shapefile-clipping
Nathan W

Примітка. Ця відповідь випливала з тісно пов'язаного питання, яке стосувалося різних форматів файлів.
whuber

Привіт, коли я спробую такий підхід в Ubuntu, наприклад, ogr2ogr -f "KML" {outfolder} {infolder} я отримую помилку: "ПОМИЛКА 4: Не вдалося створити файл KML". Будь-яка ідея, що може піти не так? Я створив GDAL з підтримкою KML
marty_c

7

з пітоном:

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()свій шлях, де знаходяться ваші файли ...

Я сподіваюся, що це допоможе тобі


for a in *.shp:- синтаксична помилка; ти думаєшfrom glob import glob; for a in glob('*.shp'):
Майк Т

про шкода, я написав це неправильним стилем. я оновив. @ Майк Тоуз спасибі.
Арагон

4

Вам не потрібен цикл, ви можете просто назвати каталог як джерело та призначення, і ogr2ogr перетворить будь-які файли у вихідному каталозі. Дивіться тут: Перетворення TAB в MIF / MIF в TAB


Спасибі! Чи можу я віднести з одного батьківського каталогу всі підкаталоги та перетворити всі файли в інші підкаталоги. Ihave: Нідерланди \ форма \ провінціяX Нідерланди \ форма \ провінція Y Нідерланди \ форма \ провінціяZ і так далі ... І хотілося б перетворити це в ці папки: Нідерланди \ mapinfo \ провінціяX Нідерланди \ mapinfo \ провінція Y Нідерланди \ mapinfo \ провінціяZ я можу написати рядок для кожної провінції, але чи можу я це зробити також однією командою
Стефан

Я цього не пробував, але не думаю, що це можливо. Вам знадобиться цикл, який обробляє відповідні вхідні та вихідні каталоги. У цьому випадку, мабуть, простіше дотримуватися підходу пітона.
Торстен


0

Універсальний перекладач у Mapinfo може обробляти декілька файлів. Перейдіть до папки призначення, виберіть усі файли форм, визначте CRS для введення та виводу. Це слід зробити.


0

Це уточнення відповіді Арагона вище. Він запускатиме лише ogr2ogr у файлах .TAB або .tab та ігнорує інші типи файлів у папці.

#!/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))
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.