将所有这些文件批量转换为我的PostGIS数据库(在Windows 7 OS上)的最省时的方法是什么?
更新:批量导入pgAdmin3“ PostGIS shapefile uploader”(如下所述)现在默认情况下可用于PostGIS 2.0。
#1 楼
如果要坚持使用GUI,则较新版本的pgAdmin具有Shapefile Loader,可以用作批量加载#2 楼
如果您使用的是Windows计算机,则可以使用带有一些深奥的for循环的优质'olCMD.EXE
。确保在仅包含需要加载的shp / sql文件的“包含”目录中执行此操作。第一步,创建SQL加载器文件(我还假定您有Lat / Long WGS84 4326 ..将数据更新到您的SRS):
for %f in (*shp) do shp2pgsql -s 4326 %f public.%~nf > %~nf.sql
然后检查您的SQL文件以确保它们看起来不错,然后执行类似的循环:
for %f in (*sql) do psql -h myserver -d mydb -U myuser -f %f > nul
POSIX民谣(Linux,Mac OS X等)的
bash
等效项如下:for f in *.shp
do
shp2pgsql -s 4326 %f public.`basename $f .shp` > `basename $f .shp`.sql
done
然后
for f in *.sql
do
psql -h myserver -d mydb -U myuser -f $f > /dev/null
done
,或者将两个部分都管道成一个循环,如果不需要保留临时
.sql
文件:for f in *.shp
do
shp2pgsql -s 4326 %f public.`basename $f .shp` | psql -d mydb > /dev/null
done
评论
在* .shp中的f可以在单个循环中更好地工作吗?shp2pgsql -s 4326%f public.'basename $ f .shp'>'basename $ f .shp'.sql | psql -h myserver -d mydb -U myuser完成
– Sam007
2012年11月21日23:47
是的,只要您确定传递给psql的SQL是正确的,就可以在一个命令中完成(但没有>重定向部分,因为这会破坏|管道部分)。我认为这不是更好,因为没有SQL格式的数据记录。
– Mike T
2012年11月22日0:37
#3 楼
您还可以使用此单个命令来帮助简化循环,也不需要单独创建.sql。for f in *.shp
do shp2pgsql -c -D -s 4326 -I $f public.${f%.*} | psql -h hostname -d dbname -U usrname
done
#4 楼
您可能还想看看SPIT,它是QGIS的PostGIS加载器插件。评论
以为我可能会因为您的链接已死而重新发布该链接:docs.qgis.org/1.8/html/en/docs/user_manual/plugins/…
–阿赫洛耶斯
13年8月20日在21:19
评论
我正在寻找类似的答案。但是我想使它每晚运行一次批处理作业。实际上,我想使PostGIS成为ArcSDE的从属设备(暂时)。作为PostGIS和SQL的新手,我得到了cmd.exe脚本会做的事情,但是不知何故它不在我的脑海。我想要做的是获取一系列从ArcSDE导出为批处理作业的shp文件,然后将它们上传到我的PostGIS中,这将覆盖已经存在的现有gis /表。我将以“如何从ArcSDE到PostGIS批量同步数据的方式”作为一个新问题提出这个问题。可能会有一些有趣的想法。