J'aimerais créer des polygones le long d'une ligne pour les utiliser pour AtlasCreator dans une prochaine étape.
ArcMap dispose d'un outil appelé Caractéristiques de l'index de carte .
Avec cet outil, je peux choisir la hauteur et la largeur de mes polygones (disons 8 km x 4 km) et les produire / les faire pivoter automatiquement le long de la ligne.
L'un des attributs générés de chaque polygone est l'angle de rotation dont j'ai besoin pour faire pivoter ensuite mes flèches vers le nord dans Atlas Generator.
Quelqu'un a-t-il une idée de la façon de résoudre cette tâche dans QGIS / avec pyQGIS? Des algorithmes Grass ou SAGA ou un modèle prossessing-toolbox qui pourrait être utilisé dans un plugin personnalisé conviendraient également;) Edit1: J'ai besoin non seulement de l'étendue de l'impression, mais également des polygones, car je souhaite imprimer une carte avec tous les polygones / étendues comme une sorte de carte générale.
Edit2: J'offre une prime car je suis toujours à la recherche d'une solution PyQGIS pouvant être utilisée dans un plugin QGIS sans qu'il soit nécessaire d'installer un logiciel en dehors de QGIS (aucun SGBDR comme PostGIS / Oracle)
Réponses:
Question interessante! C'est quelque chose que j'ai voulu essayer moi-même, alors essayez-le.
Vous pouvez le faire dans PostGRES / POSTGIS avec une fonction qui génère un ensemble de polygones.
Dans mon cas, j'ai une table avec une caractéristique (un MULTILINESTRING) qui représente une ligne de chemin de fer. Il faut utiliser un CRS en mètres, j'utilise osgb (27700). J'ai fait 4 km 'pages'.
Ici, vous pouvez voir le résultat ... la substance verte est le réseau routier, attaché à un tampon de 1 km autour de la voie ferrée, ce qui correspond joliment à la hauteur des polygones.
Voici la fonction ...
Utiliser cette fonction
Voici un exemple. 4 km x 2 km pages, epsg: 27700 et 10% de chevauchement
Après avoir exécuté ceci, vous pouvez ensuite exporter de PgAdminIII dans un fichier csv. Vous pouvez importer cela dans QGIS, mais vous aurez peut-être besoin de définir manuellement le CRS pour le calque - QGIS n'utilise pas le SRID dans EWKT pour définir le CRS du calque pour vous: /
Ajout d'un attribut de relèvement
Ceci est probablement plus facile à faire dans les postgis, cela peut être fait dans les expressions QGIS mais vous devrez écrire du code. Quelque chose comme ça...
Mises en garde
C'est un peu bidouillé, et nous n'avons eu qu'une chance de tester sur un jeu de données.
Vous n'êtes pas sûr à 100% des deux sommets que vous devrez choisir pour cette mise à jour d'attribut de roulement
query
.Je dois avouer que je ne sais pas pourquoi je dois utiliser une formule aussi compliquée pour faire pivoter le polygone afin de le faire correspondre au segment de ligne actuel. Je pensais pouvoir utiliser la sortie de ST_Azimuth () dans ST_Rotate (), mais apparemment pas.
la source
Il y a différentes solutions. Et cela peut fonctionner avec une polyligne simple et plusieurs entités sélectionnées
diagramme:
Paramètres
boucle sur OrderNodes
crée ton premier point comme ancre
pour chaque sommet, ajoutez-le à dict x, y, id et calculez un vecteur
Vous pouvez changer cette proposition si elle n'est pas vraiment claire ou commentée.
la source
Steven Kays répond en pyqgis. Il suffit de sélectionner les lignes de votre couche avant d'exécuter le script. Le script ne prend pas en charge la sortie de ligne, il ne peut donc pas fonctionner sur une couche à plusieurs chaînes.
la source
Les deux réponses (au moment de la publication) sont ingénieuses et bien expliquées. Cependant, il existe aussi une solution TRÈS simple mais efficace (en supposant que vous acceptiez toutes vos cartes alignées avec le nord de la manière traditionnelle, plutôt qu’une direction aléatoire du Nord basée sur la rivière). Si vous voulez des rotations, c'est possible mais un peu plus complexe (voir en bas).
Regardez d'abord mon post ici . Cela vous explique comment créer des couvertures de carte pour Atlas. La méthode que vous souhaitez utiliser est une adaptation du "flux de travail 2" du didacticiel. Divisez votre entité linéaire par des sommets ou une longueur et mettez-la en tampon de n'importe quelle quantité. La quantité que vous mettez en mémoire tampon dicte partiellement le chevauchement (mais voir ci-dessous), mais surtout, elle crée une entité avec une zone. Vous pouvez utiliser n'importe quel nombre de plugins pour diviser les lignes, mais GRASS v.split.length et v.split.vert sont de bonnes options (disponibles dans Processing Toolbox).
Après avoir activé Atlas Generation dans Map Composer et sélectionné votre couche en mémoire tampon, revenez à l'onglet Eléments et sélectionnez votre objet cartographique. Cochez la case 'Contrôlé par Atlas', et dans votre cas d'utilisation, j'opterais pour la fonctionnalité Marge autour. Cela contrôlera votre chevauchement entre les cartes (sinon, vous préférerez peut-être une échelle fixe).
Vous pouvez prévisualiser votre Atlas à l’aide du bouton Aperçu Atlas situé dans la barre d’outils supérieure du compositeur et voir le nombre de pages qu’il produira. Notez que vous pouvez choisir d'exporter toutes les pages dans un seul PDF ou sous forme de fichiers séparés.
Pour faire pivoter la carte le long de la ligne, il existe un champ de rotation dans les propriétés de l'élément Compositeur de carte. Vous devrez définir une expression (utilisez le petit bouton à droite de la case de rotation). Sélectionnez variable comme option, puis Modifier. Un constructeur d'expression apparaîtra dans lequel vous pourrez accéder à la géométrie ou aux champs des entités de l'atlas. Vous pouvez ensuite créer un express pour faire pivoter la carte en fonction de la rotation des entités (vous pouvez calculer le relèvement en utilisant les points de début et de fin de chaque segment de ligne et un peu de trig). Répétez le même processus pour faire pivoter votre flèche du Nord (en utilisant la même expression ou une variable précalculée).
la source