참고 : 이제 QGIS 플러그인이 QChainage
있습니다. 이 모든 것을 더 많이합니다. 아래 코드는 QGIS 2.0 이상에서 구식입니다.
다음은 파일에 넣고 QGIS 내부에서 사용할 수있는 Python 코드입니다.
QGIS에는 라이너 참조를 수행하는 API가 있지만 올바르게 작동하지는 않지만 코드 작성자에게 연락하여 문제가 있는지 확인합니다.
지금은 매끈한 Python 라이브러리 가 필요합니다. 어쨌든 가지고 있기 때문에 어쨌든 설치해야합니다. 또한 http://toblerity.github.com/shapely/manual.html에 훌륭한 문서가 있습니다.
이것은 다음 예제 http://toblerity.github.com/shapely/manual.html#interoperation 에서 사용중인 섹션 입니다.
다음 코드의 대부분은 기능, 레이어, wkb 및 wkt에서 변환 한 후 생성하는 QGIS 상용구 코드입니다. 코어 비트는 point = line.interpolate(currentdistance)
라인을 따라 거리를두고 점을 반환합니다. 우리는 라인이 다 떨어질 때까지 이것을 루프로 감 쌉니다.
import qgis
from qgis.core import *
from PyQt4.QtCore import QVariant
from shapely.wkb import loads
from shapely.wkt import dumps
vl = None
pr = None
def createPointsAt(distance, geom):
if distance > geom.length():
print "No Way Man!"
return
length = geom.length()
currentdistance = distance
feats = []
while currentdistance < length:
line = loads(geom.asWkb())
point = line.interpolate(currentdistance)
fet = QgsFeature()
fet.setAttributeMap( { 0 : currentdistance } )
qgsgeom = QgsGeometry.fromWkt(dumps(point))
fet.setGeometry(qgsgeom)
feats.append(fet)
currentdistance = currentdistance + distance
pr.addFeatures(feats)
vl.updateExtents()
def pointsAlongLine(distance):
global vl
vl = QgsVectorLayer("Point", "distance nodes", "memory")
global pr
pr = vl.dataProvider()
pr.addAttributes( [ QgsField("distance", QVariant.Int) ] )
layer = qgis.utils.iface.mapCanvas().currentLayer()
for feature in layer.selectedFeatures():
geom = feature.geometry()
createPointsAt(distance, geom)
QgsMapLayerRegistry.instance().addMapLayer(vl)
위의 코드를 파일에 복사하여 붙여 넣습니다 ~./qgis/python
(파이썬 경로에 있기 때문에).
import locate
locate.pointsAlongLine(30)
그러면 선택한 선을 따라 30 미터마다 점이있는 새로운 점 레이어가 생성됩니다.
참고 : 코드는 매우 거칠고 정리가 필요할 수 있습니다.
편집 : 가장 최근의 QGIS dev 빌드는 이제 기본적 으로이 작업을 수행 할 수 있습니다.
while 루프를 다음 createPointsAt
과 같이 변경하십시오 .
while currentdistance < length:
point = geom.interpolate(distance)
fet = QgsFeature()
fet.setAttributeMap( { 0 : currentdistance } )
fet.setGeometry(point)
feats.append(fet)
currentdistance = currentdistance + distance
그리고 당신은 제거 할 수 있습니다
from shapely.wkb import loads
from shapely.wkt import dumps