Oblicz współrzędne ramki granicznej wybranego wielokąta za pomocą QGIS

17

Właśnie ręcznie (i nieco niepoprawnie jestem pewien) odzyskałem współrzędne ramki granicznej dla wielokąta hrabstwa, który jest wyborem z większej warstwy kształtów hrabstwa. Chciałbym móc użyć wtyczki QGIS lub innej funkcji do obliczenia tego szybko i ręcznie. Jest to prawie na pewno możliwe, ale nie mogłem znaleźć niczego w wyszukiwarce Google

boulder_ruby
źródło

Odpowiedzi:

26

Poniższa mała funkcja Python wyświetli współrzędne ramki granicznej aktualnie aktywnej funkcji:

def printBB():
    feature = iface.activeLayer().selectedFeatures()[0]
    print feature.geometry().boundingBox().toString()

Aby zdefiniować funkcję, otwórz konsolę Python z menu Wtyczki, skopiuj i wklej trzy linie do konsoli i naciśnij klawisz Enter. Następnie możesz wywołać tę funkcję, wpisując printBB()i naciskając enter, gdy wybrana jest żądana funkcja.

Jake
źródło
1
File "<input>", line 4 printBB() ^ SyntaxError: invalid syntax
Pojawia
@bunn upewnij się, że wybrano warstwę w warstwach / spisie treści - jest na to bardzo wrażliwa!
DPSSpatial
dzięki za pomoc. Zapomniałem też nacisnąć Enter, aby w pełni zdefiniować funkcję printBB () przed jej wywołaniem.
cbunn
2
Musiałem użyć print (feature.geometry (). BoundingBox (). ToString ()) dla linii 3.
cm1
17

QGIS może to zrobić za pomocą Polygon z Layer Extent

Zdjęcie Seryjne - Narzędzia badawcze - Polygon z zakresu warstw

Utworzy nowy plik kształtu z atrybutami takimi jak XMIN XMAX YMIN YMAX AREA WIDTH HEIGHT

Jorge Santos
źródło
1
Musisz sprawdzić Use only selected obectsi calculate for every objectuzyskać pożądany wynik.
AndreJ
hmm, który nie działał dla mnie,
wygenerowany plik kształtu
1
Chcesz zaznaczyć opcję „Używaj tylko wybranych obiektów”, jeśli obiekty zostały wybrane. Pozostawiłem oba pola niezaznaczone i osiągnąłem dobry wynik.
Johanna
4

Możesz to również zrobić za pomocą wtyczki PyShp w Pythonie. Jest to o wiele prostsze ...

import shapefile

sf = shapefile.Reader("Path to shapefile...") 
shapes = sf.shapes() 
bbox = shapes[0].bbox # Retrieves the bounding box of the first shape

print bbox # Will print the bounding box coordinates

Więcej informacji o PyShp i innych funkcjach można znaleźć tutaj .

Ach
źródło
3

Jeśli potrzebujesz wielu obwiedni wielokąta, możesz „Zapisz jako ...” swoją warstwę do GeoJSON z opcją WRITE_BBOX = TAK, a przed atrybutem „geometria” będzie pojedynczy atrybut „bbox”, nawet dla wielu wielokątów.

..., "bbox": [ -70.062408006999874, 12.417669989000046, -69.876820441999939, 12.632147528000104 ], "geometry": ...
thadk
źródło
1

Musiałem to zrobić, aby wygenerować pole, które mógłbym zaimportować jako listę w innym miejscu.

  1. Zainstaluj wtyczkę QGIS FieldPyculator
  2. Przełącz edycję warstwy
  3. Utwórz nową kolumnę w tabeli atrybutów jako ciąg znaków, np. Bbox (zapisz zmiany)
  4. Otwórz FieldPyculator
  5. Ustaw pole aktualizacji na bbox
  6. W polu Wyrażenie typu wpisz coś takiego:

    bb = $geom.boundingBox().toString()

    bb = bb.replace(' ','')

    bb = bb.replace(':',',')

    value = bb

  7. Biegać

  8. Wyłącz edycję i zapisz warstwę
Ben
źródło
1

W przypadku szybkiego dostępu można zachować współrzędne bbox w tabeli atrybutów.

  • Tryb edycji Google
  • Uruchom kalkulator polowy
  • Ustaw utwórz nowe pole, ustaw nazwę (np. Xmin), typ (dziesiętny), długość, (precyzja)
  • Wyrażenie: x_min (geometria $)
  • Otrzymasz nowe pole w tabeli atrybutów ze współrzędną LEWĄ.

    Powtórz to dla RIGHT, BOTTOM, TOP z wyrażeniami:

  • x_max (geometria $)
  • y_min (geometria $)
  • y_max (geometria $)
  • Przykład wyniku wprowadź opis zdjęcia tutaj

    Następnie można ustawić wtyczkę AutoFields, aby automatycznie aktualizowała te pola po zmianie funkcji.

    jurajb
    źródło