Sử dụng ogr2ogr để chuyển đổi tất cả các shapefiles trong thư mục?


25

Tôi có một thư mục với một số shapefiles.

Làm thế nào có thể chuyển đổi tất cả các shapefiles này thành MapInfo với ogr2ogr?

Tôi biết làm thế nào tôi có thể chuyển đổi một tập tin. Và tôi có thể tạo một tập lệnh bó viết một dòng cho mỗi tệp. Nhưng không có cách nào dễ dàng hơn để chuyển đổi tất cả các tệp trong một thư mục (và thư mục con).


Nó phụ thuộc vào hệ điều hành. Về cơ bản tạo một vòng lặp "cho", xem gis.stackexchange.com/questions/7804/iêu
Mike T

Hệ điều hành là Windows 7. Tôi thử điều này trong dấu nhắc lệnh: cho% f trong * .shp; làm ogr2ogr -f Tệp MapInfo $ f.tab. Nhưng điều đó không hiệu quả. Tôi gặp lỗi: 'Không thể mở dữ liệu của bạn' $ f.tab 'với các trình điều khiển sau .....
Stefan

Đây là cách thực hiện SHP sang TAB: ogr2ogr -f "Tệp MapInfo"% 1.tab% 1.shp. Nhưng trừ khi OGR có thể nhận ra một tệp PRJ chính xác, bạn dễ dàng kết thúc với các tệp TAB với các coordsys được tích hợp sẵn. Tôi khuyên bạn nên sử dụng Trình dịch đa năng tích hợp (thu nhỏ FME), cũng có thể xử lý tất cả các tệp bạn chọn. Nó cho phép bạn chọn các coordsys chính xác.
Uffe Kousgaard

Tôi thực sự có vấn đề với phép chiếu đúng trong Tệp MapInfo. Tôi cố gắng đưa vào hình chiếu đúng, nhưng điều này không hiệu quả. Phép chiếu trong tệp de mapinfo được đặt thành không phải trái đất (mét). Có thể bao gồm phép chiếu chính xác với công cụ ogr2ogr. Tôi muốn đặt các dòng lệnh trong một kịch bản khác. Vì vậy, tôi không sử dụng Universal Translator.
Stefan

Bạn đã thử thư viện OGR và nó là công cụ dòng lệnh chưa?
Alex Markov

Câu trả lời:


34

Trên Windows, đối với các thư mục hiện tại và thư mục con bên dưới, hãy thử lệnh này:

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

Để giải thích ngắn gọn về mánh khóe của những gì đang diễn ra ở đây , hãy %~dpnf.tabsử dụng biến % f , trong đó nó thêm chữ cái sông d , tên p ath (tức là thư mục hoặc thư mục) và trích xuất tệp n ame (không có .shpphần mở rộng tệp) . Cuối cùng, .tabđược thêm ngay sau khi sửa đổi biến tổng hợp cho phần mở rộng mới.

Vì vậy, nếu bạn đang ở trong thư mục C:\MyDatavà bạn có dữ liệu trong thư mục này, và các thư mục con C:\MyData\Region1C:\MyData\Region1\City1, bất kỳ Shapefile nào (có .shpphần mở rộng) sẽ được xử lý và một tệp có tên tương tự .tabsẽ được tạo trong cùng thư mục.


Mát mẻ! Những công việc này! Rất cám ơn câu trả lời :) Một câu hỏi nữa: Có cách nào để tham khảo thư mục con và chuyển đổi các tệp trong thư mục con khác. Tôi có một thư mục chứa các shapefiles khác nhau. Chẳng hạn như: Hà Lan \ shape \ tỉnhX Hà Lan \ shape \ tỉnhY Hà Lan \ shape \ tỉnhZ Và muốn chuyển đổi thư mục này thành các thư mục sau: Hà Lan \ mapinfo \ tỉnhX Hà Lan \ mapinfo \ tỉnhY Hà Lan \ mapinfo \ tỉnhZ Cảm ơn :)
Stefan

Tôi đã cập nhật ở trên cho một tìm kiếm đệ quy, tuy nhiên tôi không biết cách thực hiện logic bổ sung để thay đổi "hình dạng" thành "mapinfo"; có thể tìm / hỏi trên superuser.com
Mike T

1
Cảm ơn một lần nữa cho phản ứng nhanh chóng của bạn. Điều này rất hữu ích. Tôi chỉ cần sao chép các tập tin vào thư mục bên phải.
Stefan

Lưu ý rằng Windows dòng lệnh và lệnh batch file khác nhau: Bạn cần phải tăng gấp đôi tỷ lệ phần trăm %fđể %%f. Xem ss64.com/nt/for.html để biết chi tiết.
AndreJ

Đây là một cách tiếp cận tuyệt vời, là cách tiếp cận tương tự trên MAC
Ryan Garnett

11

Đối với bash unix:

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

Nếu bạn đang làm việc trong một hệ điều hành dựa trên * nix (ví dụ Linux hoặc OS X), có một số tập lệnh shell shell mà clhenrik đã phát triển ở đây (mà ở trên là dựa trên).

Tôi đang làm việc trên một ngã ba làm cho một số tập lệnh chung chung hơn một chút và cung cấp thêm một chút mô tả về việc sử dụng.



Điều này sẽ gây ra lỗi nếu tên tệp chứa khoảng trắng.
JasonRDalton

8

Như Alex Markov đã nói, cách tốt nhất sẽ là bạn sử dụng OGR .

Bạn sẽ cần phải làm một kịch bản, nhưng rất đơn giản. Về cơ bản nếu bạn đang sử dụng windows, tất cả những gì bạn phải làm là chạy đoạn mã sau trong dòng lệnh (bên trong thư mục mong muốn):

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

Kiểm tra trang web này, tất cả được giải thích ở đây:

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


2
Tôi nghĩ bạn cũng có thể làm: ogr2ogr -f "KML" {outfolder} {infolder} Mẹo được lấy từ underdark.wordpress.com/2012/05/09/batch-shapefile-clipping
Nathan W

NB Câu trả lời này xuất phát từ một câu hỏi liên quan chặt chẽ liên quan đến các định dạng tệp khác nhau.
whuber

Xin chào, khi tôi thử phương pháp này trong Ubuntu, ví dụ: ogr2ogr -f "KML" {outfolder} {infolder} Tôi gặp lỗi: 'LRI 4: Không thể tạo tệp KML'. Bất cứ ý tưởng những gì có thể đi sai ở đây? Tôi đã xây dựng GDAL với sự hỗ trợ của KML
marty_c

7

với con trăn:

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

bạn có thể thay đổi os.getcwd()đường dẫn nơi tệp của bạn được đặt ...

Tôi hy vọng nó sẽ giúp bạn


for a in *.shp:là một lỗi cú pháp; bạn đang nghĩfrom glob import glob; for a in glob('*.shp'):
Mike T

oh xin lỗi, tôi đã viết nó sai phong cách. Tôi đã cập nhật. @ Mike Toews cảm ơn.
Aragon

4

Bạn không cần một vòng lặp, bạn chỉ cần đặt tên một thư mục là nguồn và đích và ogr2ogr sẽ chuyển đổi bất kỳ tệp nào trong thư mục nguồn. Xem tại đây: Chuyển đổi TAB thành MIF / MIF thành TAB


Cảm ơn! Tôi có thể giới thiệu từ một thư mục mẹ đến tất cả các thư mục con và chuyển đổi tất cả các tệp sang các thư mục con khác. Ihave: Hà Lan \ shape \ tỉnhX Hà Lan \ shape \ tỉnhY Hà Lan \ shape \ tỉnhZ v.v ... Và muốn chuyển đổi thư mục này thành các thư mục sau: Hà Lan \ mapinfo \ tỉnhX Hà Lan viết một dòng cho mỗi tỉnh, nhưng tôi cũng có thể làm điều đó bằng một lệnh
Stefan

Tôi chưa thử điều này, nhưng tôi không nghĩ rằng điều này là có thể. Bạn sẽ cần một vòng lặp xử lý các thư mục đầu vào và đầu ra tương ứng. Trong trường hợp này có lẽ dễ dàng hơn để làm theo một cách tiếp cận python.
Torsten


0

Universal Translator trong Mapinfo có thể xử lý nhiều tệp. Chuyển đến thư mục đích, chọn tất cả các shapefiles, xác định CRS cho đầu vào và đầu ra. Nó nên được thực hiện.


0

Đây là sàng lọc câu trả lời của Aragon ở trên. Nó sẽ chỉ chạy ogr2ogr trên các tệp .TAB hoặc .tab và bỏ qua các loại tệp khác trong thư mục.

#!/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))
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.