我有一个包含几个shapefile的目录。
如何使用ogr2ogr将所有这些shapefile转换为MapInfo?
我知道如何转换一个文件。我可以制作一个批处理脚本,为每个文件写一行。但是没有一种更简便的方法来转换目录(和子目录)中的所有文件。
我有一个包含几个shapefile的目录。
如何使用ogr2ogr将所有这些shapefile转换为MapInfo?
我知道如何转换一个文件。我可以制作一个批处理脚本,为每个文件写一行。但是没有一种更简便的方法来转换目录(和子目录)中的所有文件。
Answers:
在Windows上,对于当前目录和当前目录下的子目录,请尝试以下命令:
for /R %f in (*.shp) do ogr2ogr -f "MapInfo File" "%~dpnf.tab" "%f"
简单介绍一下这是怎么回事的诡计,%~dpnf.tab
使用变量%F,与它增加了d河信,p ATH名称(例如,文件夹或目录),并提取文件ñ AME(没有.shp
文件扩展名) 。最后,.tab
在新扩展的复合变量修饰符之后立即添加。
因此,如果您在directory中C:\MyData
,并且该目录中有数据,并且子目录C:\MyData\Region1
和C:\MyData\Region1\City1
,.shp
则将处理任何Shapefile(带有扩展名),并且.tab
将在同一目录中创建一个具有类似名称的文件。
对于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的OS(即Linux或OS X),则clhenrik 在此处开发了一些批处理shell脚本(以上内容基于)。
我正在研究一个分叉,它使某些脚本更加通用,并提供了更多使用说明。
正如Alex Markov所说,最好的方法是使用OGR。
您将需要做一个脚本,但是非常简单。基本上,如果您使用的是Windows,那么您所要做的就是在命令行中(所需文件夹内)运行以下代码:
for %f in (*.tab) do ogr2ogr -f "KML" %~nf.kml %f
检查此站点,所有解释在这里:
使用python:
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'):
您不需要循环,只需将目录命名为源和目标即可,ogr2ogr会转换源目录中的所有文件。参见此处: 将TAB转换为MIF /将MIF转换为TAB
听起来您需要一个for循环- 有关它们如何工作的说明,请参见http://www.robvanderwoude.com/for.php。
Mapinfo中的Universal Translator可处理多个文件。转到目标文件夹,选择所有shapefile,为输入和输出定义CRS。应该做的。
这是上述Aragon答案的改进。它只会在.TAB或.tab文件上运行ogr2ogr,而忽略文件夹中的其他文件类型。
#!/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))