দ্রষ্টব্য: এখানে এখন কিউজিআইএস প্লাগইন রয়েছে QChainage
। এটি আরও অনেক কিছু করে। নীচের কোডটি কিউজিআইএস ২.০ এবং তারপরের সাথে পুরানো।
এখানে কিছু পাইথন কোড রয়েছে যা আপনি কোনও ফাইলে আটকে থাকতে পারেন এবং কিউজিআইএস-এর অভ্যন্তরে ব্যবহার করতে পারেন:
কিউজিআইএস-এর লাইনার রেফারেন্সিংয়ের এপিআই-তে একটি পদ্ধতি রয়েছে তবে আমি এটি সঠিকভাবে কাজ করতে পারি না, তবে আমি কোডটির লেখকের সাথে যোগাযোগ করব এবং দেখুন যে আমি কোনও ভুল করছি।
আপাতত আপনার জন্য আকৃতির পাইথন লাইব্রেরি লাগবে , যা আপনার যেকোন উপায়ে ইনস্টল করা উচিত কারণ এটি চারপাশে থাকা সহজ y এটির http://toblerity.github.com/shapely/manual.html এ দুর্দান্ত ডকুমেন্টেশনও রয়েছে
এই বিভাগে আমি নিম্নলিখিত উদাহরণে ব্যবহার করছি হয় http://toblerity.github.com/shapely/manual.html#interoperation ।
নিম্নলিখিত কোডগুলির বেশিরভাগটি হ'ল কিউজিআইএস বয়লারপ্লিট কোডটি কেবল বৈশিষ্ট্যগুলি তৈরি করে, স্তরগুলি ডাব্লুবিবি এবং ডাব্লু কেটি এবং পিছনে রূপান্তর করে। মূল বিটটি হ'ল 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 মিটারে পয়েন্ট সহ একটি নতুন পয়েন্ট স্তর তৈরি করবে:
দ্রষ্টব্য: কোডটি বেশ রুক্ষ এবং কিছুটা পরিষ্কার করার দরকার হতে পারে।
সম্পাদনা: সর্বশেষতম কিউজিআইএস দেব বিল্ড এখন এটি স্থানীয়ভাবে করতে পারে।
লুপ ইন এতে পরিবর্তন করুন 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