J'ai une couche MultiLineStringZM dans une base de données sqlite, et j'essaie de visualiser les mesures ou les valeurs m aux sommets. J'ai essayé de rechercher des informations sur la façon de le faire dans QGIS, et tout ce que j'ai pu recueillir est que cela n'est pas possible directement à partir de la couche linestring et que les points doivent être extraits vers une couche séparée.
J'ai utilisé Vector
-> Geometry Tools
-> Extract nodes
pour créer une couche multipoint représentant les sommets de ma couche multi-chaîne, mais le processus perd les valeurs m des sommets. J'ai besoin que les valeurs m soient préservées en enregistrant la valeur m en tant qu'attribut du point, ou autre chose?
En interne, nous avons un outil en ligne de commande qui convertit les chaînes de lignes en un fichier de formes de points avec les valeurs m stockées en tant qu'attribut sur chaque point, et je l'ai utilisé pour vérifier qu'il existe des valeurs m attribuées aux sommets, et je pourrais utiliser que si je dois, mais si possible, ce serait bien si cela pouvait être fait directement à l'intérieur de QGIS.
EDIT - En répétant ce que j'ai dit ci-dessus, mais en soulignant à nouveau le fait que nous avons un outil en ligne de commande qui peut atteindre les résultats que je recherche et qui utilise les bibliothèques GDAL, donc une solution montrant juste une réponse partielle dans PyQGIS n'est pas la réponse que je cherche. Je recherche un outil intégré, un plugin prêt à l'emploi pour QGIS, ou un script complet qui peut extraire (pas créer / générer) et visualiser des valeurs m à partir d'une géométrie MultiLineStringZM ou LineStringZM.
la source
Réponses:
D'après ce que je peux trouver, il ne semble pas y avoir de solution existante pour cette situation exacte, mais je voulais toujours pouvoir le faire dans QGIS, alors j'ai franchi le pas dans les scripts python.
Un guide pour l'écriture d'algorithmes de traitement peut être trouvé ici https://docs.qgis.org/2.18/en/docs/user_manual/processing/scripts.html
Pour utiliser ce code, ouvrez la boîte à outils Traitement, puis développez Scripts, puis développez Outils. Sélectionnez "Créer un nouveau script" et copiez et collez le code ci-dessous dans la fenêtre de script (soyez prudent lorsque vous copiez et collez du code python car l'espace blanc est syntaxiquement significatif. Si vous rencontrez des problèmes, placez le code dans un éditeur de texte qui montre l'espace blanc et assurez-vous que qu'il a copié correctement). Enregistrez-le où vous voulez et il y a un bouton d'exécution de script en haut de la fenêtre. Après l'avoir enregistré, vous pouvez "Ajouter un script à partir d'un fichier" et avoir le script en permanence sous "Scripts utilisateur".
Lorsque la fenêtre de traitement apparaît, sélectionnez la couche contenant la géométrie vectorielle et sélectionnez exécuter. Le script se comporte de la même manière que "Extraire les nœuds", sauf qu'il ajoute une colonne appelée
MValues
et ouZValues
selon ce qui est disponible dans la géométrie d'entrée.la source
Avec QGIS 3.0 ou plus récent, cette tâche est triviale. Dans la "Boîte à outils de traitement" (Ouvrir avec ctrl + alt + t ou Traitement -> Boîte à outils), recherchez "Extraire les sommets" et exécutez cet algorithme.
Sélectionnez votre ligne M ou ZM ou votre géométrie de polygone comme calque d'entrée et exécutez.
Les sommets seront extraits avec les valeurs M et Z intactes selon ce qui se trouve dans la géométrie d'origine.
Si la valeur M est nécessaire en tant que champ dans la table attributaire, le calculateur de champ peut être utilisé avec une expression comme
m($geometry)
la source