Hinweis: Es gibt jetzt ein QGIS-Plugin QChainage
. Das alles und noch viel mehr. Der folgende Code ist mit QGIS 2.0 und höher nicht mehr aktuell.
Hier ist ein Python-Code, den Sie in eine Datei einfügen und in QGIS verwenden können:
QGIS verfügt über eine Methode in der API, mit der Verweise auf Linien erstellt werden können. Ich konnte sie jedoch nicht zum korrekten Funktionieren bringen. Ich werde mich jedoch an den Autor des Codes wenden und prüfen, ob ich etwas falsch gemacht habe.
Fürs Erste benötigen Sie die formschöne Python-Bibliothek, die Sie trotzdem installieren sollten, da es praktisch ist, sie in der Nähe zu haben. Es hat auch eine großartige Dokumentation unter http://toblerity.github.com/shapely/manual.html
Dies ist der Abschnitt, den ich im folgenden Beispiel verwende: http://toblerity.github.com/shapely/manual.html#interoperation .
Der größte Teil des folgenden Codes ist QGIS-Boilerplate-Code, der nur die Features und Layer erstellt und von wkb und wkt und zurück konvertiert. Das Kernbit ist das, point = line.interpolate(currentdistance)
das einen Punkt in einem Abstand entlang einer Linie zurückgibt. Wir wickeln dies einfach in eine Schleife, bis wir keine Linie mehr haben.
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)
Kopieren Sie den obigen Code und fügen Sie ihn in die Datei "my locate.py" im ~./qgis/python
Verzeichnis ein (weil es sich im Python-Pfad befindet). Führen Sie dies einfach in der Python-Konsole in QGIS aus.
import locate
locate.pointsAlongLine(30)
Auf diese Weise wird entlang der ausgewählten Linien alle 30 Meter eine neue Punktebene mit Punkten erstellt.

Hinweis: Code ist ziemlich rau und muss möglicherweise bereinigt werden.
BEARBEITEN: Der neueste QGIS-Entwickler kann dies jetzt nativ tun.
Ändern Sie die while-Schleife in createPointsAt
:
while currentdistance < length:
point = geom.interpolate(distance)
fet = QgsFeature()
fet.setAttributeMap( { 0 : currentdistance } )
fet.setGeometry(point)
feats.append(fet)
currentdistance = currentdistance + distance
und Sie können die entfernen
from shapely.wkb import loads
from shapely.wkt import dumps