내가 찾을 수있는 것에서이 정확한 상황에 대한 기존 솔루션이 아닌 것처럼 보이지만 QGIS 에서이 작업을 계속하고 싶었으므로 파이썬 스크립트에 뛰어 들었습니다.
처리 알고리즘 작성에 대한 안내서는 https://docs.qgis.org/2.18/en/docs/user_manual/processing/scripts.html 에서 찾을 수 있습니다.
이 코드를 사용하려면 처리 도구 상자를 열고 스크립트를 확장 한 다음 도구를 확장하십시오. "새 스크립트 만들기"를 선택하고 아래 코드를 스크립트 창에 복사하여 붙여 넣습니다 (공백이 구문 적으로 중요하므로 파이썬 코드를 복사하여 붙여 넣을 때주의해야합니다. 문제가 발생하면 공백을 표시하는 텍스트 편집기에 코드를 넣고 확인하십시오 올바르게 복사). 원하는 곳에 저장하고 창 상단에 스크립트 실행 버튼이 있습니다. 저장 한 후 "파일에서 스크립트 추가"를 수행하고 "사용자 스크립트"아래에 스크립트를 영구적으로 가질 수 있습니다.
처리 창이 나타나면 벡터 지오메트리가 포함 된 레이어를 선택하고 실행을 선택하십시오. 그것이라는 열을 추가하는 것을 제외 스크립트는 "추출 노드"와 같은 방식으로 동작 MValues
하고 또는 ZValues
입력 구조에서 가능한 것이 무엇인지에 따라 달라집니다.
##input_layer=vector
##output_layer=output vector
from qgis.core import QgsWKBTypes, QgsField, QgsVectorFileWriter, QgsFeature, QgsGeometry
from PyQt4.QtCore import QVariant
def addVertices( geometry, writer, inFeature ):
coordinateSequence = geometry.coordinateSequence()
for rings in coordinateSequence:
for points in rings:
for point in points:
feature = QgsFeature( fields )
feature.setGeometry( QgsGeometry( point ) )
type = point.wkbType()
attributes = inFeature.attributes()
if QgsWKBTypes.hasM( type ):
attributes.append( point.m() )
if QgsWKBTypes.hasZ( type ):
attributes.append(point.z())
feature.setAttributes( attributes )
writer.addFeature( feature )
return
inlayer = processing.getObject( input_layer )
provider = inlayer.dataProvider()
fields = provider.fields()
geomType = QgsWKBTypes.Type(inlayer.wkbType())
outputGeomType = QgsWKBTypes.Point
if QgsWKBTypes.hasM( geomType ):
outputGeomType = QgsWKBTypes.addM( outputGeomType )
fields.append( QgsField( "MValue", QVariant.Double ) )
if QgsWKBTypes.hasZ( geomType ):
outputGeomType = QgsWKBTypes.addZ( outputGeomType )
fields.append( QgsField( "ZValue", QVariant.Double ) )
layer_options = 'SHPT=' + QgsWKBTypes.displayString(outputGeomType)
writer = QgsVectorFileWriter( output_layer, 'UTF-8', fields, outputGeomType , inlayer.crs(), layerOptions=[layer_options] )
features = inlayer.getFeatures()
featureCount = inlayer.featureCount()
featureIndex = 0
for f in features:
percent = ( featureIndex/float( featureCount ) ) * 100
progress.setPercentage( percent )
g = f.geometry().geometry()
addVertices( g, writer, f )
featureIndex +=1
del writer