Comment déterminer le centroïde des polygones?

34

J'ai un vecteur de polygone et je souhaite atteindre rapidement le centroïde de ce polygone pour insertion dans un document texte. Je travaille avec QGIS. J'ai cherché d'autres questions et, bien que certaines soient un peu proches, elles ne répondent pas tout à fait à ma question.

Idéalement, les coordonnées centroïdes seraient dans la table attributaire du polygone et je pourrais simplement copier et coller les coordonnées.

Je ne veux pas avoir à créer un fichier de vecteur de points séparé qui représente le centroïde, puis à trouver ces coordonnées et à les copier / coller.

David
la source
Quel est le format de votre document texte?
Nathan W
C'est un document MS Word, mais en réalité ça pourrait être n'importe quoi.
David

Réponses:

34

Un centroïde est par définition un calque de points et non un polygone. Par conséquent, vous devez créer une nouvelle couche facile à utiliser dans QGIS 1.8 et les versions ultérieures.

  • Chargez dans votre polygone
  • Allez dans le menu -> Vecteur -> Outils de géométrie -> centroïde de polygone et créez un calque de points centroïde
  • Exportez les coordonnées du centre de gravité créé vers la table attributaire en cliquant sur -> Menu Vecteur -> Outils de géométrie -> Exporter / Ajouter des colonnes de géométrie.

Ensuite, vous pouvez créer une jointure spatiale pour ajouter les colonnes de centroïdes aux polygones et supprimer à nouveau le calque de points.

Courlis
la source
Merci pour la réponse, j'apprécie l'aide. Néanmoins, il reste beaucoup de travail simple pour savoir quelles sont les coordonnées du centroïde. Dommage qu'il n'y ait pas de moyen plus simple dans QGIS.
David
Si vous le souhaitez toujours, jetez un coup d’œil à PostGIS et à la fonction ST_Centroid mentionnées ci-dessous. De cette façon, vous n'avez pas besoin de créer de fichiers temporaires. Vous pouvez également écrire vous-même un script python pour QGIS ou utiliser SEXTANTE Modeler.
Curlew
10

Effectivement, créer un nouveau fichier de formes est l’une de vos options les plus simples. Cependant, vous n'avez pas besoin de copier et coller les coordonnées. Faire ceci:

  • Créez votre fichier de centroïdes à l'aide de l'outil Polygon Centroids.
  • Ouvrez la table attributaire des centroïdes et rendez-la modifiable (icône représentant un crayon en bas).
  • Ouvrez la calculatrice de champs (icône de la calculatrice en bas), choisissez l’option Créer un nouveau champ et appelez-la comme quelque chose de significatif (par exemple, Est).
  • À partir de la liste des fonctions, développez le menu Géométrie et choisissez $ x, puis répétez l'opération avec une nouvelle colonne pour $ y (en l'appelant Nord, par exemple).
  • Enregistrez vos modifications et vous avez maintenant toutes les coordonnées dans la table attributaire avec l'ID de polygone d'origine et les attributs si vous avez utilisé l'outil de centroïde.

Sinon, vous devrez importer vos données dans PostGIS, puis parcourir les polygones à l'aide de la fonction ST_Centroid et stocker le résultat dans un nouveau champ. Le travail est à peu près le même, mais la deuxième option signifie que vous n’avez pas de fichier de points centroïdes séparé.

MappaGnose
la source
Merci d'avoir répondu. J'apprécie ton aide. Il semble que la réponse de Curlew soit un peu plus facile pour moi. Pourtant, ces deux réponses sont beaucoup plus de travail que je voulais. En fin de compte, vous vous retrouvez avec différents fichiers de formes que vous devez nommer, supprimer, modifier, etc.
David
8

Une réponse plus robuste à la réponse de Mike: long = toreal(regexp_substr(geom_to_wkt(centroid($geometry)), '(-?\\d+\\.?\\d*) -?\\d+\\.?\\d*')) lat = toreal(regexp_substr(geom_to_wkt(centroid($geometry)), '-?\\d+\\.?\\d* (-?\\d+\\.?\\d*)'))

SzieberthAdam
la source
1
Réponse sous-estimée;)
Fernando Irarrázaval G
6

Pourquoi ne pas utiliser ceci dans la calculatrice de champs 2.2?

Champ long = substrat (geomToWKT (centroïde ($ geometry)), 7, 12)

Lat field = substr (geomToWKT (centroïde ($ geometry)), strpos (geomToWKT (centroïde ($ geometry)), '') +2, 12)

Il semble que cela soit traité dans la version 2.6 avec l’option xmin xmin (centroid ($ geometry))

Mike
la source
5

Je viens de tomber sur ce post avec près de 5 ans de retard (!), Mais voici ce que je fais pour calculer les centroïdes polygonaux à la version 2.18.14:

  1. Commencez à modifier la couche de polygone
  2. Créez un nouveau champ de texte, appelez-le centroidxy
  3. En utilisant le calculateur de champ, calculez centroidxy = x ($ geometry) || ',' || y ($ geometry)
  4. Le résultat ressemble à quoi: 397640.915545362, 2126924.53637653
  5. Enregistrez vos modifications.
  6. Votre couche de polygone contient maintenant un champ avec les valeurs x, y centroïde
Stu Smith
la source
simple et superbe
Kazuhito
3

Associez la table des points centroïdes à la table des polygones, puis indiquez les coordonnées avec le nom et la forme du polygone. Les polygones n'ont pas un seul long en eux-mêmes

Lewis
la source
Merci pour votre réponse. Oui, je me rends compte que les polygones n’ont pas une seule longueur, c’est quelque chose qui peut être calculé. Malheureusement, ce n'est pas plus facile que cela dans QGIS. Merci encore à tous pour les réponses. Et si vite aussi. Merci!
David
2

Je suis tombé sur ce post et il était difficile à suivre, a suggéré une mise à jour:

Remarque: Ceci calculera la latitude et la longitude dans les coordonnées de votre projection (qui peuvent être des mètres). Si vous souhaitez que les coordonnées soient exprimées en degrés décimaux (avec je suppose que c'est le cas ou qu'elles sont généralement incompréhensibles), commencez par enregistrer le calque dans ce CRS: EPSG: 4326, WGS 84.

  1. Calculateur de champ ouvert
  2. Créer un nouveau champ
  3. Entrez le nom (soit la latitude ou la longitude)
  4. Sélectionnez décimal comme type de champ en sortie
  5. Entrez cette expression pour la latitude: y ($ geometry) et cette expression pour la longitude: x ($ geometry)
  6. appuyer sur OK
Mark Matthews
la source
-2

lon = ToReal (regexp_substr (geomToWKT (centroïde ($ geometry)), '([\ s]')) lat = ToReal (regexp_substr (geomToWKT (centroïde ($ geometry)), '\ s [)]'))

Marco Aurelio
la source
1
Ce n'est pas une réponse du tout. S'il vous plaît visitez le tour pour mieux comprendre comment répondre à une question ...
Nightwatch