QGIS रैखिक संदर्भ के लिए एम-मान के साथ नोड्स निकालें


10

मेरे पास एक sqlite डेटाबेस में एक MultiLineStringZM परत है, और मैं शीर्ष पर उपायों या एम-मूल्यों की कल्पना करने की कोशिश कर रहा हूं। मैंने QGIS में ऐसा करने के बारे में जानकारी देखने की कोशिश की है, और सभी के बारे में मैं इकट्ठा करने में सक्षम हूं, यह सीधे linestring परत से संभव नहीं है और यह कि अंक को एक अलग परत में निकालने की आवश्यकता है।

मैंने अपने मल्टीलाइनरिंग लेयर के वर्टेक्स का प्रतिनिधित्व करने वाली मल्टीपॉइंट लेयर बनाने के लिए Vector-> Geometry Tools-> Extract nodesका उपयोग किया है, लेकिन यह प्रक्रिया वर्टेक्स के m-मानों को खो देती है। मुझे बिंदु के गुण के रूप में m- मान को सहेज कर संरक्षित किए गए m-मान की आवश्यकता है, या कुछ और?

आंतरिक रूप से हमारे पास एक कमांड लाइन टूल होता है, जो प्रत्येक बिंदु पर एक विशेषता के रूप में संग्रहीत एम-वैल्यू के साथ लाइनस्ट्रेस को एक बिंदु शेपफाइल में परिवर्तित करता है, और मैंने यह सत्यापित करने के लिए उपयोग किया है कि शीर्ष पर असाइन किए गए एम-वैल्यू हैं, और मैं उपयोग कर सकता हूं अगर मुझे करना है, लेकिन यदि संभव हो तो अच्छा होगा यदि यह सीधे QGIS के अंदर किया जा सकता है।

EDIT - मैंने जो कहा है उसे दोहरा रहा हूं, लेकिन इस तथ्य पर फिर से जोर देते हुए कि हमारे पास एक कमांड लाइन टूल है जो उन परिणामों को प्राप्त कर सकता है जो मैं देख रहा हूं जो GDAL पुस्तकालयों का उपयोग करता है, इसलिए एक समाधान केवल आंशिक उत्तर में दिखा रहा है PyQGIS वह उत्तर नहीं है जिसकी मुझे तलाश है। मैं एक बिल्ट इन टूल, क्यूजीआईएस के लिए तैयार किया गया एक प्लगइन तैयार कर रहा हूँ, या एक पूरी स्क्रिप्ट जो किसी मल्टीलाइनस्ट्रीमज़एमएम या लाइनस्ट्रिंगज़्म ज्यामिति से एम-वैल्यूज़ को निकाल (उत्पन्न / उत्पन्न नहीं) कर सकती है और कल्पना कर सकती है।


M मान प्राप्त करने के लिए आप LRS प्लगइन का उपयोग कर सकते हैं। आपको नोड्स निकालने की आवश्यकता होगी, फिर एलआरएस प्लगइन या लाइन टूल्स के साथ दूरी का उपयोग करके लिनस्ट्रिंग से उपाय प्राप्त करें।
जाबालक

@jbalk मैंने LRS और QChainage plugins की कोशिश की है, और उन दोनों प्लगइन्स को नियमित अंतराल पर उपाय उत्पन्न करने के लिए स्थापित किया गया है, मौजूदा उपायों का उपयोग करने के लिए नहीं, जब तक कि मैं कुछ याद नहीं कर रहा हूं और मैं गलत तरीके से प्लगइन्स का उपयोग कर रहा हूं ।
TJ रॉकफेलर

LRS प्लगइन पेज से: - प्लगइन अंशांकन, समयनिष्ठ और रैखिक घटनाओं के निर्माण और अंकों के लिए उपायों की गणना का समर्थन करता है - यहां वेबसाइट blazek.github.io/lrs है यदि आप इस साइट पर LRS प्लगइन के बारे में एक प्रश्न पूछें 'यह पता लगाना।
jbalk

ऐसा लगता है कि आप LRS प्लगइन के साथ कुछ भी नहीं कर सकते हैं जब तक आप इसे कैलिब्रेट नहीं करते हैं, और इसे कैलिब्रेट करने के लिए, आपको एक विशेषता के रूप में संग्रहीत उपायों के साथ एक बिंदु परत की आवश्यकता होती है, जो कि मैं अपने मल्टीलाइनस्ट्रीमज़एमएम से प्राप्त करने की कोशिश कर रहा हूं। , इसलिए मुझे नहीं लगता कि यह इस स्थिति में मददगार होगा।
टीजे रॉकफेलर

आप अंशांकन के लिए उपयोग करने के लिए अपनी लाइन के साथ प्रत्येक 1000 मीटर अंक बना सकते हैं। या एम मूल्यों को प्राप्त करने के लिए QGIS के भीतर SAGA और GRASS टूलबॉक्स में लाइन टूल्स के साथ दूरी को देखें।
jbalk

जवाबों:


6

जो मैं पा सकता हूं, वह इस सटीक स्थिति के लिए एक मौजूदा समाधान नहीं प्रतीत होता है, लेकिन मैं अभी भी क्यूजीआईएस में ऐसा करने में सक्षम होना चाहता था, इसलिए मैंने अजगर स्क्रिप्टिंग में डुबकी लगाई।

प्रसंस्करण एल्गोरिदम लिखने के लिए एक गाइड यहां पाया जा सकता है https://docs.qgis.org/2.18/en/docs/user_manual/processing/scripts.html

इस कोड का उपयोग करने के लिए प्रोसेसिंग टूलबॉक्स खोलें, फिर लिपियों का विस्तार करें, फिर टूल्स का विस्तार करें। "नई स्क्रिप्ट बनाएं" का चयन करें और स्क्रिप्ट विंडो में नीचे दिए गए कोड को कॉपी और पेस्ट करें। व्हॉट्सएप के बाद से अजगर कोड को कॉपी और पेस्ट करते समय सावधानी बरतें। यह महत्वपूर्ण है। यदि आपको समस्या हो रही है तो कोड को एक टेक्स्ट एडिटर में डाल दें जो व्हॉट्सएप हो और सुनिश्चित करें। यह सही ढंग से नकल)। इसे जहां चाहें वहां सहेजें और खिड़की के शीर्ष पर एक निष्पादित स्क्रिप्ट बटन है। आपके द्वारा इसे सहेजने के बाद आप "फ़ाइल से स्क्रिप्ट जोड़ें" और स्थायी रूप से "उपयोगकर्ता स्क्रिप्ट" के तहत स्क्रिप्ट कर सकते हैं।

जब प्रोसेसिंग विंडो ऊपर आती है तो उस लेयर का चयन करें जिसमें वेक्टर ज्योमेट्री होती है और रन का चयन करें। स्क्रिप्ट उसी तरह का व्यवहार करती है जैसे "एक्स्ट्रेक्ट नोड्स" को छोड़कर यह कॉल किए गए कॉलम को जोड़ता है MValuesऔर ZValuesजो इनपुट ज्यामिति में उपलब्ध है पर निर्भर करता है।

##input_layer=vector
##output_layer=output vector

from qgis.core import QgsWKBTypes, QgsField, QgsVectorFileWriter, QgsFeature, QgsGeometry
from PyQt4.QtCore import QVariant

def addVertices( geometry, writer, inFeature ):
    coordinateSequence = geometry.coordinateSequence()
    for rings in coordinateSequence:
        for points in rings:
            for point in points:
                feature = QgsFeature( fields )
                feature.setGeometry( QgsGeometry( point ) )
                type = point.wkbType()
                attributes = inFeature.attributes()
                if QgsWKBTypes.hasM( type ):
                    attributes.append( point.m() )
                if QgsWKBTypes.hasZ( type ):
                    attributes.append(point.z())
                feature.setAttributes( attributes )
                writer.addFeature( feature )
    return

inlayer = processing.getObject( input_layer )
provider = inlayer.dataProvider()
fields = provider.fields()
geomType = QgsWKBTypes.Type(inlayer.wkbType())
outputGeomType = QgsWKBTypes.Point

if QgsWKBTypes.hasM( geomType ):
    outputGeomType = QgsWKBTypes.addM( outputGeomType )
    fields.append( QgsField( "MValue", QVariant.Double ) )

if QgsWKBTypes.hasZ( geomType ):
    outputGeomType = QgsWKBTypes.addZ( outputGeomType )
    fields.append( QgsField( "ZValue", QVariant.Double ) )

layer_options = 'SHPT=' + QgsWKBTypes.displayString(outputGeomType)
writer = QgsVectorFileWriter( output_layer, 'UTF-8', fields,  outputGeomType , inlayer.crs(), layerOptions=[layer_options] )

features = inlayer.getFeatures()
featureCount = inlayer.featureCount()
featureIndex = 0

for f in features:
    percent = ( featureIndex/float( featureCount ) ) * 100
    progress.setPercentage( percent )
    g = f.geometry().geometry()
    addVertices( g, writer, f )
    featureIndex +=1

del writer

4

QGIS 3.0 या नए के साथ यह कार्य तुच्छ है। "प्रोसेसिंग टूलबॉक्स" में (ctrl + alt + t या प्रसंस्करण के साथ खोलें -> टूलबॉक्स) "एक्सट्रैक्ट वर्टिक्स" के लिए खोज करें और उस एल्गोरिथ्म को चलाएं।

इनपुट लेयर के रूप में अपनी M या ZM लाइन या बहुभुज ज्यामिति का चयन करें, और चलाएं।

मूल ज्यामिति में क्या है, इसके आधार पर एम और जेड मानों के साथ कोने निकाले जाएंगे।

यदि विशेषता तालिका में फ़ील्ड के रूप में M मान की आवश्यकता है, तो फ़ील्ड कैलकुलेटर का उपयोग अभिव्यक्ति की तरह किया जा सकता है m($geometry)

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