QGIS Q का उपयोग करके लाइन के साथ निर्दिष्ट दूरी में अंक बनाना


20

मैं लाइन के साथ क्यूजीआईएस बनाने के बिंदुओं का उपयोग करना चाहता हूं, लेकिन निर्दिष्ट दूरी में। मुझे SEXTANTE टूलबॉक्स में दो GRASS उपकरण मिले tools

  • v.to.points
  • v.segment

मैंने v.to.points की कोशिश की , मानचित्र इकाइयों में बिंदुओं के बीच अधिकतम दूरी 100 पर सेट की और इसे।

लाइन के साथ अंक

पास से देखा

दूसरी तस्वीर में ऊपरी हिस्से से एक करीबी नज़र आया। परिणाम वही था जो मैं चाहता हूं, लेकिन मैं कम अंक प्राप्त करना चाहता हूं , लेकिन यहां तक ​​कि मैंने अधिकतम दूरी 1000, या 1000000 निर्धारित की, परिणाम समान था।

मैंने v.segment का उपयोग करने की कोशिश की , लेकिन मेरे पास सेगमेंट नियमों वाली कोई फ़ाइल नहीं थी।

अंडरडार्क ने मुझे कुछ सलाह दी, और मैंने कोशिश की कि डेंसिफाई ज्योमेट्रीज़ को एक अंतराल दिया जाए । पहले इसने मुझे एक इनपुट के रूप में पॉलीलाइन शेपफाइल दिया, और फिर मैंने उन बिंदुओं को प्राप्त करने के लिए नोड्स निकालने का उपयोग किया । लेकिन परिणाम वही था जो मुझे v.to.point का उपयोग करके मिला था , इससे कोई फर्क नहीं पड़ता कि मैंने दूरी का अंतराल निर्धारित किया है।

मैं रेखा के साथ और निर्दिष्ट दूरी में अंक कैसे बना सकता हूं along


4
इस पर एक नज़र डालें, हमें बताएं nathanw.net/2012/08/05/…
विली

मुझे यह उपयोगी सलाह देने के लिए धन्यवाद! अगर मुझे आपकी स्क्रिप्ट का उपयोग करना है, तो क्या मुझे अजगर स्थापित करना है? या नए संस्करण QGIS 2.0 में, क्या इसमें पहले से ही यह फ़ंक्शन निर्मित है?
हेंज

5
QGIS 2.0 में अब इसके लिए एक प्लगइन है, जिसे QChainage कहा जाता है। प्लगइन प्राप्त करें और इसे स्थापित करें।
विली

ध्यान दें कि "Sextante" टूलबॉक्स को QGIS 2.2.0+ में "प्रोसेसिंग" कहा जाता है और Densify geometries को एक अंतराल दिया गया है जो कि प्रसंस्करणटूलबॉक्स / QGISGeoal एल्गोरिदम / वेक्टरग्रेसमेट्रीज़ मेनू के अंतर्गत है। ध्यान दें कि यह ज्यामिति को दर्शाता है और कोने को हटाता नहीं है। चुने हुए अंतराल की तुलना में करीब हैं।
डेव एक्स

इसने मेरे लिए काम किया: plugins.qgis.org/plugins/LocatePoints
Tactopoda

जवाबों:


20

पायथन कंसोल में:

1) पर एक स्मृति परत वर्ग (पूरा वर्ग (विशेषताओं के बिना) बनाने crea_mem_layer.py )

class Create_vlayer(object):
    '''creation of a virtual layer''' 
     def __init__(self,nom,type):
         self.type=type
         self.name = nom
         self.layer =  QgsVectorLayer(self.type, self.name , "memory")
         self.pr =self.layer.dataProvider() 
     def create_point(self,geometry):
         # add point to the layer
         self.seg = QgsFeature()
         self.seg.setGeometry(QgsGeometry.fromPoint(geometry))
         self.pr.addFeatures([self.seg])
         self.layer.updateExtents()
     @property
     def display_layer(self):
         #end of layer and display layer 
         QgsMapLayerRegistry.instance().addMapLayers([self.couche])

2) वेक्टर बीजगणित कार्य ( algèbre_vect_PyQGIS.py से )

import math 
def mag(point):
    # magnitude of a vector
    return math.sqrt(point.x()**2 + point.y()**2)
def diff(point2, point1):
    # substraction betwen two vector
    return QgsPoint(point2.x()-point1.x(), point2.y() - point1.y())
def length(point1,point2):
    # with PyQGIS: sqrDist
    return math.sqrt(point1.sqrDist(point2))

3) दिशा कोसाइन

def dircos(point):
    cosa = point.x() / mag(point)
    cosb = point.y()/ mag(point)
    return cosa,cosb

4) प्रोसेस लाइन या लाइन सेगमेंट

def pairs(list):
    # list pairs iteration 
    for i in range(1, len(list)):
    yield list[i-1], list[i]

layer = qgis.utils.iface.activeLayer()
# interval between points
interval = 5 m
# create virtual layer
gen_pt  = Create_vlayer("mid5", "Point")

for elem in layer():
    line = elem.geometry()
    for seg_start, seg_end in pairs(line.asPolyline()):
       line_start = QgsPoint(seg_start)
       line_end = QgsPoint(seg_end)
       # mid point = vector coordinates [x2-x1,y2-y1]
       pointm =diff(line_end, line_start)
       # direction cosines of the segment
       cosa,cosb = dircos(pointm)
       # length of the segment
       lg = length(line_end, line_start)
       # generate and add points to the virtual layer 
       for i in range(interval,lg,interval):
           gen_pt.create_point(QgsPoint(line_start.x()  + (i * cosa), line_start.y() + (i*cosb)))

# display layer
gen_pt.display_layer

परिणाम

पॉलीलाइन, दिशा वाले कोसाइन के साथ शेपली या PyQGIS2 के साथ समवर्ती बिंदु

पॉलीलाइनसुडौलvector_algebra

फिर बस अंतराल को समायोजित करें


जंक्शन को देखने से, ऐसा लगता है कि यह लाइन पर पहले से मौजूद नोड बिंदुओं को रखता है, इसलिए यह उन्हें लाइन पर पहले से लंबवत से कम रिज़ॉल्यूशन के लिए पतला नहीं कर सकता है। ओपी में जटिल, सुडौल रेखाओं के साथ, इन प्रक्रियाओं का अधिक प्रभाव नहीं हो सकता है।
डेव एक्स

आप स्क्रिप्ट को पूरी तरह से अपना सकते हैं।
जीन

17

अब QChainage नामक एक प्लगइन है जो वास्तव में आप क्या चाहते हैं। आप एक अंतराल दूरी निर्दिष्ट करते हैं और प्लगइन निर्दिष्ट अंतराल पर आपकी रेखा के साथ बिंदु बनाता है।


* ध्यान दें कि यह आपकी लाइन नोड्स को कैप्चर नहीं करेगा, इसलिए यदि आपको उनकी आवश्यकता है तो आपको ज्यामिति टूल का उपयोग करने की आवश्यकता होगी - नोड्स निकालें और अपने चेन पॉइंट्स को जोड़ें।
जेसन

1
GIS SE में आपका स्वागत है! मुझे लगता है कि एक टिप्पणी के रूप में आपने यहां जो जानकारी दी है, उसके नीचे दिए गए संपादन बटन का उपयोग करके अपने वास्तविक उत्तर में बेहतर समावेश किया जाएगा। आप इसे कॉपी / पेस्ट के साथ कर सकते हैं और इसके बगल में थोड़ा क्रॉस पर क्लिक करके अपनी टिप्पणी हटा सकते हैं।
PolyGeo

11

मैंने एक स्क्रिप्ट लिखी है जो एक निश्चित दूरी को स्वीकार करने के लिए Sextante Densify geometries टूल को बदलती है। इसे Densify geometries ने एक अंतराल दिया है

Densify चलाने के बाद, आप Extract nodes टूल का उपयोग करके पॉइंट निकाल सकते हैं ।

आप इसे जीथब से प्राप्त कर सकते हैं और निर्देश स्थापित कर सकते हैं मेरे ब्लॉग पर

यहां छवि विवरण दर्ज करें


ऐसा प्रतीत होता है कि यह उपकरण अब QGIS में Sextante इंस्टॉल (QGIS 2.18.7) के बिना उपलब्ध है। मैंने इसे मेन्यू में नहीं देखा, लेकिन प्रोसेसिंग टूलबॉक्स में खोजते समय इसे QGIS जियो-एल्गोरिथम के रूप में पाया।
नैट वनर

0

यदि आप अजगर लिपियों के साथ घेरना नहीं चाहते हैं, तो आप "लाइन से लाइन" प्लगइन का उपयोग और स्थापित कर सकते हैं और रेखापुंज मान स्तंभ को अनदेखा / हटा सकते हैं। जो कुछ भी आप होने के लिए अंतराल नमूना अंतराल सेट हो जाएगा।


QGIS 2.2.0 में, मैं एक "प्रोफाइल टूल", "qProf" और "VoGIS-ProfilTool" देखता हूं, लेकिन "लाइन से प्रोफाइल" टूल नहीं।
डेव एक्स

0

अच्छी तरह से सुनिश्चित नहीं है कि यह स्थिर रिलीज में है, लेकिन जियोलाइगोरिथम के तहत 1.9 अल्फ़ा पर sextante टूलबॉक्स-> वेक्टर "कन्वर्ट लाइन्स टू पॉइंट्स" विकल्प है। एक इलाज काम करता है, महान हो अगर यह लाइन के साथ दूरी के लिए एक क्षेत्र जोड़ा, साथ ही।

दिलचस्प बात यह है कि मेरी वेक्टर परत से NAME फ़ील्ड को जोड़ा गया।

मैंने कोशिश की कि नाथन वुडरो द्वारा पायथन स्क्रिप्ट को काम किया जाए, लेकिन मैं अजगर के साथ चूसता हूं। और कोड के साथ सामान्य रूप से ऐसा लगता है।


0

मैंने इस मुद्दे से जूझते हुए एक लंबा समय बिताया, लेकिन आखिरकार क्यूशैनेज का उपयोग करने के लिए मैं और अधिक-से-कम हो गया। मैं जो साझा करना चाहता हूं वह ऐसी चीज है जो दूसरों की मदद कर सकती है। जब लाइन पर SAGA जियोप्रोसेसिंग भंग उपकरण का उपयोग करते हैं, तो QChainage गलत परिणाम पैदा करता है। एक अलग विघटित उपकरण के उपयोग से यह ठीक काम करता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.