파이썬 콘솔에서 QGIS 보간 플러그인 기능 (TIN 방법) (래스터-> 보간)을 호출하고 싶습니다.
QGIS API 또는 처리 알고리즘 목록에서 해당 기능을 찾을 수 없습니다. SAGA Triangulation 알고리즘이 잘 작동하지만 5-10 x 느리고 속도가 중요하다는 것을 알았습니다.
그것을 실행하는 방법에 대한 아이디어가 있습니까?
파이썬 콘솔에서 QGIS 보간 플러그인 기능 (TIN 방법) (래스터-> 보간)을 호출하고 싶습니다.
QGIS API 또는 처리 알고리즘 목록에서 해당 기능을 찾을 수 없습니다. SAGA Triangulation 알고리즘이 잘 작동하지만 5-10 x 느리고 속도가 중요하다는 것을 알았습니다.
그것을 실행하는 방법에 대한 아이디어가 있습니까?
답변:
다음 질문에서 전체 솔루션을 제공 할 수있었습니다.
QGIS의 Python 콘솔에서 보간 래스터를 계산하는 방법은 무엇입니까?
큰 관심을 끌기 때문에 여기에 답을 다시 게시 할 것입니다.
pyqgis의 문서는 매우 단정하지 않습니다,하지만 난 (제대로 관련 보간 클래스를 호출하는 방법을 알아 냈어 QgsInterpolator
, QgsTINInterpolator
, QgsIDWInterpolator
, QgsGridFileWriter
파이썬에서). 스크립트의 모든 단계를 자세하게 설명하겠습니다.
코어 및 분석 모듈을 가져 와서 레이어 탭에서 마우스 클릭으로 보간을 위해 원하는 벡터 레이어를 가져옵니다.
import qgis.core
import qgis.analysis
layer = qgis.utils.iface.activeLayer()
필요한 매개 변수로 보간 클래스를 준비하십시오. LayerData 구조체의 초기화를위한 정확한 매개 변수는 QGIS API 문서 (검색어 : QgsInterpolator) 에서 찾을 수 있습니다 .
layer_data = QgsInterpolator.LayerData()
layer_data.vectorLayer = layer
layer_data.zCoordInterpolation=False
layer_data.InterpolationAttribute =0
layer_data.mInputType = 1
z 좌표를 사용하지 않고 첫 번째로 사용 가능한 필드 (인덱스 = 0)를 보간 속성으로 사용하고 POINTS를 입력 유형으로 사용합니다.
보간 엔진을 선택하십시오. 여기서 TIN-Interpolation 방법 ( QgsTINInterpolator
)과 IDW-Interpolation ( QgsIDWInterpolator
) 중에서 선택할 수 있습니다 . 내가했다 QgsTINInterpolator
내 코드에서.
tin_interpolator = QgsTINInterpolator([layer_data])
파이썬 목록을 layer_data
보간 엔진 에 전달해야합니다 ! 또한 여러 layer_data 시나리오를 추가 할 수 있습니다.
보간 출력 내보내기에 필요한 매개 변수를 설정하십시오 (설명서 참조 QgsGridFileWriter
). 여기에는 보간 GUI (파일 경로, 범위, 해상도, 열 및 행 수)와 유사한 정보가 포함됩니다.
export_path ="C:/SomeFolder/output.asc"
rect = layer.extent()
res = 10
ncol = int( ( rect.xMaximum() - rect.xMinimum() ) / res )
nrows = int( (rect.yMaximum() - rect.yMinimum() ) / res)
output = QgsGridFileWriter(tin_interpolator,export_path,rect,ncol, nrows,res,res)
output.writeFile(True)
iface.addRasterLayer(export_path, "interpolation_output")
QgsGridFileWriter
ASCII- 그리드 ( .asc
) 만 쓰므로 출력 래스터의 파일 확장자를 알고 있어야합니다 . writeFile()
메소드 를 호출하여 데이터를 디스크에 씁니다 . 내 보낸 후 그리드 파일을 캔버스에 래스터로 추가 할 수 있습니다.
import qgis.analysis
import qgis.core
layer = qgis.utils.iface.activeLayer()
layer_data = QgsInterpolator.LayerData()
layer_data.vectorLayer = layer
layer_data.zCoordInterpolation=False
layer_data.InterpolationAttribute =0
layer_data.mInputType = 1
tin_interpolator = QgsTINInterpolator([layer_data])
export_path = "E:/GIS_Workbench/script_output/test.asc"
rect = layer.extent()
res = 10
ncol = int( ( rect.xMaximum() - rect.xMinimum() ) / res )
nrows = int( (rect.yMaximum() - rect.yMinimum() ) / res)
output = QgsGridFileWriter(tin_interpolator,export_path,rect,ncol,nrows,res,res)
output.writeFile(True)
QGIS-API는 현재 버전 3.0으로 다시 작성되고 사용되는 보간 클래스에서 이동 있음을 알아 두셔야 qgis.analysis
에 qgis.core
! 이것은이 스크립트의 기능에 큰 영향을 미치므로 버전 3.0에서 다시 작성해야합니다!
플러그인 관리자를 사용하여 Raster Interpolation 플러그인을 설치 한 경우이 작업을 수행 할 수 있습니다.
from rasterinterpolation.core.rasterinterpolator import RasterInterpolator
rastLayer = iface.activeLayer()
interpolator = RasterInterpolator(rastLayer,0,1)
a= interpolator.linear(QgsPoint(10.662629, 76.225421))
print a
참고 : 위의 코드가 값을 인쇄한다는 사실 외에는 실제로 위의 코드가 무엇을하는지 알 수 없습니다. 그러나 사용법을 이해하는 데 도움이 될 것입니다.
from rasterinterpolation import rasterinterpolation
어느 모듈을 호출 해야하는지 (또는 호출하는 방법) 확실하지 않습니다.