Not: Artık bir QGIS eklentisi var QChainage
. Tüm bunları ve daha fazlasını yapar. Aşağıdaki kod QGIS 2.0 ve üstü ile güncel değil.
İşte bir dosyaya yapıştırabileceğiniz ve QGIS içinde kullanabileceğiniz bir Python kodu:
QGIS 'in API referansında liner referanslama yapması gerekiyor, ancak düzgün çalışmasını sağlayamadım, ancak kodun yazarıyla görüşüp yanlış bir şey yapıp yapmadığımı göreceğim.
Şimdilik , yine de kurmanız gereken düzgün Python kütüphanesine ihtiyacınız olacak , çünkü etrafta olması kolay. Ayrıca, http://toblerity.github.com/shapely/manual.html adresinde harika belgelere sahiptir.
Bu, aşağıdaki örnekte kullandığım bölümdür: http://toblerity.github.com/shapely/manual.html#interoperation .
Aşağıdaki kodların çoğu, sadece özellikleri, katmanları oluşturan, wkb ve wkt ve geri dönüştüren QGIS boyler kodudur. Çekirdek bit, point = line.interpolate(currentdistance)
bir çizgi boyunca bir mesafeden bir nokta döndürür. Çizgiyi bitirene kadar bunu sadece bir döngüye sardık.
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)
Yukarıdaki kodu kopyalayıp yapıştırın, ~./qgis/python
dizininde (çünkü Python yolunda) locate.py çağırdım ve bunu sadece QGIS içindeki Python konsolunda yapın.
import locate
locate.pointsAlongLine(30)
Bu, seçilen çizgiler boyunca her 30 metrede bir nokta içeren yeni bir nokta katmanı yaratacaktır:
Not: Kod oldukça kabacadır ve biraz temizlenmesi gerekebilir.
EDIT: En son QGIS dev inşa bunu şimdi yerel olarak yapabilir.
While döngüsünü şuraya değiştirin createPointsAt
:
while currentdistance < length:
point = geom.interpolate(distance)
fet = QgsFeature()
fet.setAttributeMap( { 0 : currentdistance } )
fet.setGeometry(point)
feats.append(fet)
currentdistance = currentdistance + distance
ve kaldırabilirsiniz
from shapely.wkb import loads
from shapely.wkt import dumps