Wie bestimme ich den Schwerpunkt von Polygonen?

34

Ich habe einen Polygonvektor und möchte schnell den Schwerpunkt dieses Polygons zum Einfügen in ein Textdokument erreichen. Ich arbeite mit QGIS. Ich habe andere Fragen durchgesehen und obwohl einige ziemlich nah beieinander liegen, beantworten sie meine Frage nicht ganz.

Im Idealfall befinden sich die Schwerpunktkoordinaten in der Attributtabelle des Polygons, und ich kann die Koordinaten einfach kopieren und einfügen.

Ich möchte keine separate Punktvektordatei erstellen müssen, die den Schwerpunkt darstellt, und dann diese Koordinaten suchen und kopieren und einfügen.

David
quelle
Welches Format hat Ihr Textdokument?
Nathan W
Es ist ein MS-Word-Dokument, aber es könnte wirklich alles sein.
David

Antworten:

34

Ein Schwerpunkt ist per Definition eine Punktebene und kein Polygon. Dazu müssen Sie eine neue Ebene erstellen, die in QGIS 1.8 und höheren Versionen kinderleicht ist.

  • Laden Sie Ihr Polygon
  • Gehen Sie zu Menü -> Vektor -> Geometriewerkzeuge -> Polygonschwerpunkt und erstellen Sie eine Schwerpunktebene
  • Exportieren Sie die Koordinaten des erstellten Schwerpunkts in die Attributtabelle, indem Sie auf -> Vektormenü -> Geometriewerkzeuge -> Geometriespalten exportieren / hinzufügen klicken.

Anschließend können Sie eine räumliche Verknüpfung erstellen, um die Zentroidspalten zu den Polygonen hinzuzufügen und die Punktebene erneut zu löschen.

Brachvogel
quelle
Danke für die Antwort, ich schätze die Hilfe. Trotzdem ist dies eine Menge Arbeit, einfach zu wissen, wie die Koordinaten des Schwerpunkts lauten. Schade, dass es in QGIS keinen einfacheren Weg gibt.
David
Wenn Sie es dennoch einfacher haben möchten, werfen Sie einen Blick auf PostGIS und die unten erwähnte ST_Centroid-Funktion. Auf diese Weise müssen Sie keine temporären Dateien erstellen. Alternativ können Sie sich ein Python-Skript für QGIS schreiben oder den SEXTANTE Modeler verwenden.
Brachvogel
10

Das Erstellen eines neuen Shapefiles ist eine Ihrer einfachsten Optionen. Sie müssen jedoch keine Koordinaten kopieren und einfügen. Mach das:

  • Erstellen Sie Ihre Centroids-Datei mit dem Polygon Centroids-Tool.
  • Öffnen Sie die Attributtabelle "Zentroide" und machen Sie sie bearbeitbar (Stiftsymbol unten).
  • Öffnen Sie den Feldrechner (Taschenrechnersymbol unten) und wählen Sie die Option Neues Feld erstellen und nennen Sie es etwas Bedeutendes (z. B. Easting).
  • Erweitern Sie in der Liste der Funktionen das Menü Geometrie und wählen Sie $ x aus. Wiederholen Sie dies mit einer neuen Spalte für $ y (nennen Sie es beispielsweise Hochwertig).
  • Speichern Sie Ihre Änderungen und jetzt haben Sie alle Koordinaten als Teil der Attributtabelle zusammen mit der ursprünglichen Polygon-ID und den Attributen, wenn Sie das Schwerpunkt-Werkzeug verwendet haben.

Alternativ müssen Sie Ihre Daten in PostGIS importieren und dann mit der Funktion ST_Centroid über die Polygone iterieren und das Ergebnis in einem neuen Feld speichern. Die Arbeit ist ungefähr gleich, aber die zweite Option bedeutet, dass Sie keine separate Zentroids-Punktedatei haben.

MappaGnosis
quelle
Danke für die Antwort. Ich schätze Ihre Hilfe. Es scheint, als wäre die Antwort von Curlew für mich ein bisschen einfacher. Trotzdem sind diese beiden Antworten viel mehr Arbeit, als ich wollte. Am Ende stehen Ihnen verschiedene Shapefiles zur Verfügung, die Sie benennen, löschen, bearbeiten usw. müssen.
David
8

Eine robustere Lösung für Mikes Antwort: 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
quelle
1
Unterschätzte Antwort;)
Fernando Irarrázaval G
6

Wie wäre es damit, dies im 2.2 Field Calculator zu verwenden?

Langes Feld = substr (geomToWKT (Schwerpunkt ($ Geometrie)), 7, 12)

Lat-Feld = substr (geomToWKT (Schwerpunkt ($ Geometrie)), strpos (geomToWKT (Schwerpunkt ($ Geometrie)), '') +2, 12)

Scheint, dass dies in 2.6 mit der xmin-Option xmin (centroid ($ geometry)) behoben wird.

Mike
quelle
5

Ich bin gerade (!) Mit fast 5 Jahren Verspätung auf diesen Beitrag gestoßen, aber hier ist, was ich mache, um Polygonschwerpunkte in Version 2.18.14 zu berechnen:

  1. Beginnen Sie mit der Bearbeitung der Polygonebene
  2. Erstellen Sie ein neues Textfeld, nennen Sie es centroidxy
  3. Berechnen Sie mit dem Feldrechner centroidxy = x ($ geometry) || ',' || y ($ Geometrie)
  4. Das Ergebnis sieht ungefähr so ​​aus: 397640.915545362, 2126924.53637653
  5. Speichern Sie Ihre Änderungen.
  6. Ihr Polygon-Layer enthält jetzt ein Feld mit XY-Schwerpunktwerten
Stu Smith
quelle
Einfach und großartig
Kazuhito
3

Verknüpfen Sie die Schwerpunktpunktetabelle mit der Tabelle der Polygone und geben Sie die Koordinaten mit dem Namen und der Form des Polygons aus. Polygone haben keinen Lat für sich

Lewis
quelle
Danke für deine Antwort. Ja, mir ist klar, dass Polygone keine Lat-Länge haben und für sich einfach etwas, das berechnet werden kann. Einfacher geht es in QGIS leider nicht. Nochmals vielen Dank an alle für die Antworten. Und so schnell auch. Vielen Dank!
David
2

Kam über diesen Beitrag und war schwer zu folgen, vorgeschlagenes Update:

Hinweis: Dies berechnet die Breite und Länge Ihrer Projektionskoordinaten (die Meter sein können). Wenn Sie die Koordinaten in Dezimalgraden haben möchten (ich nehme an, Sie tun dies oder sie sind größtenteils unverständlich), speichern Sie zuerst die Ebene in diesem CRS: EPSG: 4326, WGS 84.

  1. Feldrechner öffnen
  2. Neues Feld erstellen
  3. Name eingeben (entweder Breite oder Länge)
  4. Wählen Sie als Ausgabefeldtyp Dezimal aus
  5. Geben Sie diesen Ausdruck für Breite: y ($ Geometrie) und diesen Ausdruck für Länge: x ($ Geometrie) ein.
  6. drücke OK
Mark Matthews
quelle
-2

lon = ToReal (regexp_substr (geomToWKT (Schwerpunkt ($ Geometrie)), '([\ s]') lat = ToReal (regexp_substr (geomToWKT (Schwerpunkt ($ Geometrie)), '\ s [)]')

Marco Aurelio
quelle
1
Dies ist überhaupt keine Antwort. Bitte besuchen Sie die Tour, um ein besseres Verständnis für die Beantwortung einer Frage zu erhalten ...
Nightwatch,