我在scala脚本中运行命令行gdal_calc.py。我用'sbt run'运行这个脚本。在我的终端上。我收到了这个错误:
SELECT t.*,
SUBSTRING_INDEX(SUBSTRING_INDEX(PORT,'/',1),' ',-1)+0 as D1,
SUBSTRING_INDEX(SUBSTRING_INDEX(PORT,'/',2),'/',-1)+0 as D2,
SUBSTRING_INDEX(SUBSTRING_INDEX(PORT,'/',3),'/',-1)+0 as D§
FROM test_sort t
ORDER BY
SUBSTRING_INDEX(SUBSTRING_INDEX(PORT,'/',1),' ',-1)+0,
SUBSTRING_INDEX(SUBSTRING_INDEX(PORT,'/',2),'/',-1)+0,
SUBSTRING_INDEX(SUBSTRING_INDEX(PORT,'/',3),'/',-1)+0;
在我的终端中运行命令gdal_calc.py效果很好。 直接在我的终端中运行完全相同的命令行是行不通的。环境是一样的:使用的gdal库是相同的
运行的命令行如下:
Traceback (most recent call last):
File "/usr/local/bin/gdal_calc.py", line 329, in <module>
main()
File "/usr/local/bin/gdal_calc.py", line 326, in main
doit(opts, args)
File "/usr/local/bin/gdal_calc.py", line 282, in doit
myResult = ((1*(myNDVs==0))*myResult) + (myOutNDV*myNDVs)
TypeError: only integer arrays with one element can be converted to an index
有人可以解释一下吗?谢谢!
答案 0 :(得分:0)
我终于找到了解决问题的方法: 我正在将我的gdal_calc.py命令行写入shell脚本,然后执行它认为shell。 它不是解决问题而是绕过;)
答案 1 :(得分:0)
我无法帮助Scala,但是像Samuel一样,我遇到了一个问题,就是用Python脚本调用gdal_calc.py并使用&#39; subprocess.call()&#39;。
我怀疑当争论被移交给&#39; gdal_calc.py时会出现一些问题。 by&#39; subprocess.call()&#39;。
解决方案是使用&#39; subprocess.call&#39;参数&#39; shell = True&#39;,通过shell将调用作为单个字符串执行:
subprocess.call('gdal_calc.py --outfile=outfile.tiff -A rasterA.tiff
-B rasterB.tiff --calc="A+B"', shell = True)
也许&#39; sbt run&#39;在Scala有类似的选择吗?
答案 2 :(得分:0)
您始终可以从python脚本启动它,而无需使用shell脚本:
# import section
import os
# Manual input
a_source = "aaa.tif"
b_source = "bbb.tif"
output = "out.tif"
calc = '"(A**B)*(B==1)"'
# The command itself
gdal_calc = 'python {Path root}/Lib/site-packages/osgeo/scripts/gdal_calc.py ' \
'-A {0} ' \
'-B {1} ' \
'--outfile={2} ' \
'--calc={3} ' \
'--type=Float32 ' \
'--overwrite'.format(a_source, b_source, output, calc)
# Launch the command
os.system(gdal_calc)
我发现这更加容易和清楚。