这是我的bash脚本
# Binarize raster for later polygon creation
path=/home/rose/Desktop/test/DSM_BM24_2017_1000_4735.tif
pathdir=$(echo $path | cut -d "/" -f 1,2,3,4,5)
gdal_calc.py -A $path --outfile=$pathdir/binary.tif --NoDataValue=-9999 --calc "1 * (A != -9999)"
# Polygonize raster
binary=$pathdir/binary.tif
b=$(basename $binary)
basebinary=$(echo $b | cut -d "." -f 1)
gdal_polygonize.py $binary $pathdir/polygon$basebinary.shp polygon$basebinary
# Make EPSG:2193 projection file for polygon
ogr2ogr -a_srs EPSG:2193 -f "ESRI Shapefile" /home/rose/Desktop/test/finalpolygonbinary.shp /home/rose/Desktop/test/polygonbinary.shp
# Define variable to import to py and postgis script 'pypostgis'
polygon='$pathdir/finalpolygon$basebinary.shp'
# Call python script
python pypostgis.py $polygon
这是在bash脚本中调用的python脚本,它获取多边形shapefile并将其导入PgAdmin III中的表中
import psycopg2
import qgis.utils
import os
import sys
from qgis.core import *
from qgis.core import QgsVectorLayer, QgsVectorLayerImport
from qgis.core import QgsDataSourceURI, QgsVectorLayer
# import layer into database shp2pgs function
def shp2pgs(layer):
conn = psycopg2.connect("dbname='rosespace' host='localhost' port = '5432' user='rose' password='postgres' ")
cursor = conn.cursor()
uri = "dbname='rosespace' host='localhost' port=5432 user='rose' password='postgres' table=\"public\".\"%s\" (geom) sql=" %layer.name().lower()
importvector = QgsVectorLayerImport.importLayer(layer, uri, "postgres", layer.crs(), False, False)
print importvector
# Import and use $polygon variable from bash script for layer, which will eventually be called by the function above
shapefile = sys.argv[1]
print shapefile
basename_shp = (os.path.splitext(os.path.basename(shapefile))[0]).lower()
layer = QgsVectorLayer(shapefile, basename_shp, 'ogr')
#Call function with shapefile variable - layer, originally from above bash script
shp2pgs(layer)
当我运行bash脚本时,这是print importvector的输出
print importvector
(9, u'Unable to load postgres provider')
你们中有谁知道这个错误指向什么/意味着什么,以及是否有解决方法
我猜这与我从bash-sys.argv[1]导入的变量有关,但我已经检查了它,它是一个字符串类型。我也在变量周围加了引号,但仍然不起作用
我还检查了用普通字符串文件路径替换sys.argv[1]的python脚本,它在QGIS 2.18的python控制台中运行得非常好
目前没有回答
相关问题 更多 >
编程相关推荐