J'utilise QGIS 1.8 Lisboa. Après avoir calculé les centroïdes à partir d'un fichier de formes de polygones, si certains d'entre eux se trouvent en dehors des contours du polygone, je voudrais les déplacer sur le polygone dont ils sont issus. Le critère doit être univoque car je dois les utiliser pour extraire les coordonnées à utiliser comme code d'identification du polygone lui-même. Par conséquent, la procédure doit générer le même emplacement de point chaque fois qu'elle s'exécute pour le même polygone (pas une position aléatoire comme celle donnée par la fonction "points aléatoires", qui donne un nouveau résultat à chaque exécution).
9
Réponses:
Vous pouvez utiliser la bibliothèque Shapely python, qui fournit une fonction
representative_point()
qui est garantie de se trouver dans le polygone.Voici un script Python qui peut être exécuté dans la console QGIS Python. La couche de polygones pour laquelle vous souhaitez créer l'attribut doit être sélectionnée. La fonction prend le nom de l'attribut que vous souhaitez mettre à jour. L'attribut doit déjà exister dans votre couche, il doit être de type chaîne et il doit être suffisamment long (30 caractères).
Voici un exemple des points trouvés par l'algorithme:
la source
L'outil ftools centroid peut placer le centroïde en dehors du polygone s'il est concave.
ST_PointOnSurface
fera certainement ce que vous voulez. Vous pouvez utiliser la commande à partir de QGIS si vous l'avez installé en utilisant SPIT pour obtenir votre fichier de formes dans PostGIS, puis utiliser le plugin PgQuery pour exécuter la requête.Alternativement, si l'installation de PostGIS est un peu trop pour une utilisation ponctuelle, vous pouvez utiliser Spatialite à partir de QGIS. Vous pouvez ensuite utiliser le plugin QSpatiaLite pour importer vos données dans SpatiaLite et exécuter la requête (SpatialLite honors
ST_PointOnSurface
).la source
quand je vous comprends bien, utilisez: Vector-> Research Tools_> Random Points. Sélectionnez maintenant sous "Plan d'échantillonnage stratifié (polygones individuels)" utilisez la valeur du champ de saisie et utilisez le champ approprié, qui donne la valeur numérique des points, qui doit être générée pour chaque polygone différent
la source
Le plugin realcentroids, disponible à installer via Plugins> Gérer et installer les plugins a fonctionné pour moi dans QGIS 2.2 pour générer des points centroïdes, forcés à l'intérieur de chaque polygone s'il est concave (le point se trouvera très près du bord). J'ai essayé l'outil de points aléatoires comme suggéré par Kurt, et bien que j'aie spécifié 1 point par polygone, il en génère deux à la place. Un inconvénient supplémentaire est que dans la plupart des cas, les points ne représentent pas le centroïde car ils sont aléatoires.
http://www.agt.bme.hu/gis/qgis/realcentroid/
la source