Jak określić centroid wielokątów?

34

Mam wektor wielokąta i chcę szybko osiągnąć środek ciężkości tego wielokąta w celu wstawienia do dokumentu tekstowego. Pracuję z QGIS. Przeszukałem inne pytania i chociaż niektóre są nieco bliżej, nie dość odpowiadają na moje pytanie.

Idealnie współrzędne środka ciężkości znajdowałyby się w tabeli atrybutów wielokąta, a ja mogłem po prostu skopiować i wkleić współrzędne.

Nie chcę tworzyć osobnego pliku wektora punktowego, który reprezentuje środek ciężkości, a następnie znajdź te współrzędne, a następnie skopiuj je i wklej.

David
źródło
W jakim formacie jest twój dokument tekstowy?
Nathan W
Jest to dokument MS Word, ale tak naprawdę może to być cokolwiek.
David

Odpowiedzi:

34

Środek ciężkości jest z definicji warstwą punktową, a nie wielokątem. Dlatego musisz utworzyć nową warstwę, która jest łatwa jak ciasto w QGIS 1.8 i wyższych wersjach.

  • Załaduj swój wielokąt
  • Przejdź do menu -> Wektor -> Narzędzia geometrii -> centroid wielokąta i utwórz warstwę punktu środkowego
  • Wyeksportuj współrzędne utworzonego środka ciężkości do tabeli atrybutów, klikając -> Menu wektorowe -> Narzędzia geometrii -> Eksportuj / Dodaj kolumny geometrii.

Następnie można wykonać połączenie przestrzenne, aby dodać kolumny wielokątów do wielokątów i ponownie usunąć warstwę punktową.

Kulik
źródło
Dzięki za odpowiedź Doceniam pomoc. Jednak jest to dużo pracy, aby wiedzieć, jakie są współrzędne środka ciężkości. Szkoda, że ​​nie ma prostszego sposobu w QGIS.
David
Jeśli nadal chcesz to łatwiej, możesz rzucić okiem na PostGIS i funkcję ST_Centroid wspomnianą poniżej. W ten sposób nie musisz tworzyć plików tymczasowych. Alternatywnie możesz napisać sam skrypt Pythona dla QGIS lub użyć SEXTANTE Modeler.
Curlew,
10

Naprawdę, utworzenie nowego pliku kształtu jest jedną z najłatwiejszych opcji. Nie trzeba jednak kopiować i wklejać współrzędnych. Zrób to:

  • Utwórz plik centroidów za pomocą narzędzia Wielokąt centroidów.
  • Otwórz tabelę atrybutów centroidów i ustaw ją jako edytowalną (ikona ołówka u dołu).
  • Otwórz kalkulator pola (ikona kalkulatora na dole) i wybierz opcję Utwórz nowe pole i nazwij to czymś znaczącym (np. Easting).
  • Z listy funkcji rozwiń menu Geometria i wybierz $ x, a następnie powtórz z nową kolumną dla $ y (nazwijmy to na przykład Northing).
  • Zapisz zmiany, a teraz masz wszystkie współrzędne jako część tabeli atrybutów wraz z oryginalnym identyfikatorem wielokąta i atrybutami, jeśli korzystałeś z narzędzia centroidów.

Alternatywnie będziesz musiał zaimportować swoje dane do PostGIS, a następnie iterować po wielokątach, używając funkcji ST_Centroid i zapisać wynik w nowym polu. Praca jest prawie taka sama, ale druga opcja oznacza, że ​​nie masz osobnego pliku punktów centroidów.

MappaGnosis
źródło
Dziękuję za odpowiedź. Doceniam twoją pomoc. Wygląda na to, że odpowiedź Curlew jest dla mnie trochę łatwiejsza. Nadal obie te odpowiedzi to o wiele więcej pracy, niż chciałem. W końcu otrzymujesz różne pliki kształtów, które musisz nazwać, usuwać, edytować itp.
David
8

Bardziej solidne soulution do odpowiedzi Mike'a: 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
źródło
1
Niedoceniana odpowiedź;)
Fernando Irarrázaval G
6

A może skorzystasz z tego w kalkulatorze polowym 2.2?

Długie pole = substr (geomToWKT (centroid (geometria $)), 7, 12)

Pole lat = substr (geomToWKT (centroid (geometria $)), strpos (geomToWKT (centroid (geometria $)), '') +2, 12)

Wydaje się, że jest to rozwiązane w 2.6 z opcją xmin xmin (centroid (geometria $))

mikrofon
źródło
5

Właśnie natknąłem się na ten post prawie 5 lat później (!), Ale oto, co robię, aby obliczyć centroidy wielokątów w wersji 2.18.14:

  1. Rozpocznij edycję warstwy wielokąta
  2. Utwórz nowe pole tekstowe, nazwij je centroidxy
  3. Za pomocą kalkulatora pola oblicz centroidxy = x (geometria $) || „,” || y (geometria $)
  4. Wynik wygląda mniej więcej tak: 397640.915545362, 2126924.53637653
  5. Zapisz swoje zmiany.
  6. Twoja warstwa wielokątów zawiera teraz pole z wartościami x, y centroid
Stu Smith
źródło
proste i wspaniałe
Kazuhito,
3

Powiąż tabelę punktów środka ciężkości z tabelą wielokątów, a następnie umieść współrzędne z nazwą i kształtem wielokąta. Wieloboki same w sobie nie mają jednego łuku

chwytak
źródło
Dzięki za odpowiedź. Tak, zdaję sobie sprawę, że wielokąty nie mają jednego łuku i same w sobie to po prostu coś, co można obliczyć. Niestety nie jest to łatwiejsze w QGIS. Jeszcze raz dziękuję wszystkim za odpowiedzi. I tak szybko. Dzięki!
David
2

Znalazłem się w tym poście i trudno było go śledzić, sugerowano aktualizację:

Uwaga: To obliczy szerokość i długość geograficzną we współrzędnych projekcji (które mogą być metrami). Jeśli chcesz współrzędne w stopniach dziesiętnych (zakładam, że tak robisz lub są one w większości niezrozumiałe), najpierw zapisz warstwę w tym CRS: EPSG: 4326, WGS 84.

  1. Kalkulator otwartego pola
  2. Utwórz nowe pole
  3. Wpisz nazwę (szerokość lub długość)
  4. Wybierz dziesiętny jako typ pola wyjściowego
  5. Wpisz to wyrażenie dla szerokości geograficznej: y (geometria $) i to wyrażenie dla długości geograficznej: x (geometria $)
  6. wciśnij OK
Mark Matthews
źródło
-2

lon = ToReal (regexp_substr (geomToWKT (centroid ($ geometry)), '([\ s]')) lat = ToReal (regexp_substr (geomToWKT (centroid ($ geometria)), '\ s [)]'))

Marco Aurelio
źródło
1
To w ogóle nie jest odpowiedź. Odwiedź wycieczkę, aby lepiej zrozumieć, jak odpowiedzieć na pytanie ...
Nightwatch