Création d'un nombre de points défini et régulièrement espacé dans un polygone dans QGIS

12

J'ai utilisé l'outil de recherche "Points réguliers" pour produire un certain nombre de points dans un polygone, mais il forme une grille rectangulaire de points plutôt que seulement dans la forme du polygone. Étant donné que j'ai besoin d'un certain nombre de points dans le polygone, existe-t-il un moyen de le faire sans essais et erreurs?

Par exemple, à l'heure actuelle, seulement 8 des 25 points que je veux se trouvent dans le polygone, mais je veux 25 points, donc je pourrais augmenter à 50 points et voir combien apparaissent ensuite dans le polygone

entrez la description de l'image ici

cœlacanthe
la source
Je veux également créer un nombre de points défini régulièrement espacé dans un polygone dans QGIS, existe-t-il un plugin pour cela? Je pourrais le faire avec une extension d'Arcgis appelée ET GEOWIZARD (points uniformes dans les polygones), mais je dois le faire dans QGIS !! Pouvez-vous m'aider?
Ana María

Réponses:

3

Ce à quoi QGIS fait référence en termes de limite de couche est en fait l'enveloppe ou le cadre de délimitation de la géométrie.

J'ai documenté une solution qui est probablement la plus proche de l'automatisation (à moins de déposer une demande de bug / fonctionnalité).

Le processus fonctionne en fonction du rapport entre l'aire des deux objets: la géométrie de l'entité et son cadre de sélection).

Vérifiez les étapes suivantes ci-dessous:

  1. Sélectionnez le calque sur lequel vous souhaitez travailler.

  2. Sélectionnez la fonction sur laquelle vous souhaitez travailler. Assurez-vous que rien d'autre n'est sélectionné.

  3. Exécutez l'extrait de code suivant dans la console Python.

    layer = qgis.utils.iface.activeLayer()
    features = layer.selectedFeatures()
    feature = features[0]
    geom = feature.geometry()
    env_rect = geom.boundingBox()
    env_geom = QgsGeometry.fromRect(env_rect)
    env_geom.area() / geom.area()

    Assurez-vous d'appuyer sur Entrée car la dernière ligne ne reviendra pas automatiquement.

  4. Exécutez à Regular Pointsnouveau l' outil, mais entrez le nombre de points que vous souhaitez à l'intérieur de la zone multiplié par la sortie donnée par votre script.

Dans mon exemple ci-dessous, le résultat que j'ai reçu de la sortie était une valeur de ~ 2. J'ai demandé la sortie de 20 points par le processus où je n'en voulais en fait que 10. On m'a donné 8 en retour, ce qui est assez proche. Selon la forme réelle que vous utilisez, les résultats varient.

Si vous étiez si enclin, vous pourriez automatiser (récursivement) le processus des points réguliers en modifiant les variables jusqu'à ce que vous arriviez au nombre souhaité.

Échantillon

nagytech
la source
+1 Votre suggestion est proche, mais peut ne pas converger. Ce que vous voulez faire, c'est (a) estimer un espacement qui fera tomber le nombre de points souhaité dans le polygone et (b) itérer avec un décalage aléatoire (montré dans la capture d'écran).
whuber
Si je fais un décalage aléatoire, ce n'est plus une grille, non? Une grille dans le polygone avec un certain nombre de points est ce que je veux échantillonner dans toute la zone. Ou peut-être que ce n'est pas ce que je veux, parce que choisir un point de départ et partir de là n'est pas assez aléatoire?
coelacanth
@coelacanth Peut-être ne divulguez-vous pas suffisamment d'informations sur votre problème? Quelle serait la prochaine étape de votre analyse? Il peut y avoir d'autres façons d'atteindre votre objectif, en plus d'utiliser une grille de points.
nagytech
Hmmm, je suis nouveau dans tout le domaine du GPS / SIG et de la conception de levés, alors faites-moi savoir s'il existe une meilleure façon de faire les choses. Je veux mettre en place un certain nombre de zones d'échantillonnage dans un polygone (c'est-à-dire une section d'une forêt) pour échantillonner la végétation. Je souhaite que les zones soient réparties sur tout le site afin d'avoir une représentation de l'ensemble du site. Ce que je veux utiliser pour cette fonction est de définir les emplacements de ces zones d'échantillonnage dans la limite. Ensuite, je naviguerais jusqu'à ce point en utilisant une unité GPS et je collecterais mes données.
coelacanth
0

Vous pouvez facilement le faire en découpant simplement: générez la grille régulière de points exactement comme vous l'avez fait, puis utilisez Vector> Outils de géotraitement> Couper, saisissez la grille de points générée et utilisez la fonction comme masque de coupure.

Rodrigues
la source
-1

Une solution simpliste est suggérée par la capture d'écran. Vous pouvez extraire les polygones dans de nouvelles couches avec Vector -> Data Managment Tools -> Split vector layer, les importer, puis choisir la couche avec l'entité (ID) que vous souhaitez comme couche d'entrée pour l'échantillonneur "Points réguliers".

Si vous ne devez effectuer cette opération que pour une poignée de polygones, les trouver et les exporter séparément pourrait être plus efficace. Une fois que vous en avez sélectionné un, faites un clic droit sur le nom du calque et choisissez Save Selection As ..., choisissez le fichier de formes, remplissez le reste et répétez comme précédemment.

EDIT: Puisque vous avez déjà une seule entité, je ne peux pas penser à quelque chose de plus simple que d'utiliser une grille plus dense, de la couper à nouveau avec le polygone et de supprimer enfin tous les points extraneus (le plus facile à travers le tableau d'attributs, car vous obtenez à la fois un centrage facile et le compte total).

lynxlynxlynx
la source
Il n'y a déjà qu'un seul polygone dans le fichier de formes.
coelacanth
Oh, comment ennuyeux alors (comme le fait qu'il a créé 20 au lieu de 25 points). Je vous suggère d'ouvrir une demande de fonctionnalité sur hub.qgis.org/projects/quantum-gis/issues - je suppose qu'il devrait y avoir une case à cocher supplémentaire pour utiliser la véritable limite de couche.
lynxlynxlynx
-2

Appliquez une requête de définition à vos polygones (en 1.8, faites un clic droit sur la couche et choisissez Requête). Exécutez ensuite l'outil. Supprimez la requête.

John
la source
Comment cela aide-t-il. C'est la même chose que de faire une sélection.
Nathan W
Plutôt. Mais cela fonctionne dans QGIS en ce moment, contrairement à la sélection, du moins sur mes machines.
John