Rysowanie granicy zbioru punktów za pomocą QGIS?


9

Mam zestaw punktów, które chciałbym zmienić w wielokąt.

wprowadź opis zdjęcia tutaj

wprowadź opis zdjęcia tutaj

Próbowałem kadłuba wklęsłego, ale nie otrzymuję zamierzonego wielokąta, jak widać poniżej,

wprowadź opis zdjęcia tutaj

Kiedy korzystam z triangulacji Denaulaya, muszę usunąć zewnętrzne trójkąty.

wprowadź opis zdjęcia tutaj

Czy istnieje skuteczny sposób na zrobienie tego samego?

Próbowałem też wypukłego kadłuba.

wprowadź opis zdjęcia tutaj


Czy wypróbowujesz Wektor -> Narzędzia geoprzetwarzania -> Wypukły kadłub (y) ... lub Przybornik geoprzetwarzania -> Narzędzia geometrii wektorowej -> Wypukły kadłub?
Dmitrij Barysznikow

Tak, próbowałem tego. Myślałem jednak, że nie dotyczy to wymaganego kształtu. Zaktualizuję pytanie.
Stephen Jacob

3
czy masz linie pokazane na pierwszym obrazie, czy tylko punkty?
radouxju,

1
Mam pytanie: jaki jest twój cel? co reprezentują dane? rzeka? Droga ? Obawiam się, że jeśli masz kształty „S” lub skręcone, to nie zadziała, nawet z pytonem ...
Keiko,

2
@StephenJacob - Jak zamawia się twoje punkty? Jeśli ich kolejność jest zgodna z ruchem wskazówek zegara lub przeciwnie do ruchu wskazówek zegara, możliwe jest najpierw przekonwertowanie punktów na linie (np. Za pomocą narzędzia Konwertuj punkty na linie (linie) SAGA ), a następnie przekonwertowanie linii na wielokąt (np. Narzędzie Linie na wielokąty ).
Joseph

Odpowiedzi:


5

Zakładam, że wiesz, które punkty należą do „lewej” lub „prawej”, ponieważ w przeciwnym razie istnieje wiele rozwiązań. Jeśli tak, możesz użyć triangulacji delaunay, a następnie wybrać trójkąty „centralne”. Dzięki tej metodzie nie trzeba mieć punktów w określonej kolejności. Wszystko, co musisz wziąć pod uwagę, to fakt, że potrzebne trójkąty muszą dotykać co najmniej jednego punktu z każdej strony.

otwórz tabelę atrybutów> wybierz według wyrażenia> „kod” = 1

wektor> narzędzie badawcze> wybierz według lokalizacji (nowy wybór, przecięcie)

wprowadź opis zdjęcia tutaj

otwórz tabelę atrybutów> odwróć zaznaczenie punktów (ctrl + R)

wektor> narzędzie badawcze> wybierz według lokalizacji (usuń z wyboru, rozłącz)

wprowadź opis zdjęcia tutaj

wektor> narzędzie geoprzetwarzania> rozpuścić

wprowadź opis zdjęcia tutaj


3

Mam taki sam wynik jak @radouxju.

Operacje:

  1. Wybierz 1 polilinię [wybierz po kliknięciu]
  2. Zaktualizuj tabelę polilinii i wprowadź liczbę dla każdej funkcji [kalkulator polowy]
  3. Wybierz punkty, które przecinają jedną polilinię [narzędzie do zapytań przestrzennych]
  4. Zaktualizuj wybrane punkty o uprzednio zmienioną wartość polilinii [kalkulator pola]
  5. Zachowaj punkt zaznaczenia i wybierz trójkąty delaunay, które przecinają te wybrane punkty [narzędzie do zapytań przestrzennych]
    wprowadź opis zdjęcia tutaj
    wprowadź opis zdjęcia tutaj

  6. Odwróć zaznaczenie punktu lub wybierz punkty, które przecinają drugą polilinię [zaznaczenie wyrażeniem] lub [odwróć zaznaczenie]

  7. Usuń z bieżącego wyboru trójkąty delaunay, które są rozłączne z innymi punktami [narzędzie do zapytań przestrzennych]
    wprowadź opis zdjęcia tutaj
    wprowadź opis zdjęcia tutaj

  8. Scal funkcje przez zaznaczenie [narzędzie geoprzetwarzania> rozpuść]
    wprowadź opis zdjęcia tutaj
    wprowadź opis zdjęcia tutaj


WAŻNE : MUSISZ mieć polilinie, aby uzyskać ten wynik!


Dzięki @Keiko twoja odpowiedź była przydatna do interpretacji odpowiedzi radouxju
Stephen Jacob

Nie ma za co @StephenJacob! To była tylko praca zespołowa! ;-)
Keiko,

1

Jeśli masz doświadczenie z pythonem, możesz użyć biblioteki Shapely i utworzyć wielokąt z punktów w dwóch liniach. Musisz powiedzieć Pythonowi, jakie są początkowe i końcowe punkty obu linii.

from shapely.geometry import Point, Polygon, LineString
import geopandas as gpd
import pandas as pd
line1 = [(1,1),(2,1.2),(3,1)]
line2 = [(1,2),(2,2.2),(3,2)]
# you need to reverse the order of one line to make it a polygon
line2reverse = list(reversed(line2))
polgonList2 = line1 + line2reverse
Polygon(polgonList2)

Jeszcze lepiej: możesz do tego użyć również geopand. geopandas pozwala na łatwe zapisywanie do wielu formatów, w tym plików kształtów

d = {'identifier' : [1, 2],
 'name' : ["Netherlands", "Germany"],
 "line1": [[(1,1),(2,1.2),(3,1)], [(1,1),(2,1.2),(3,1)]],
 "line2": [[(1.1,2.1),(2.1,2.3),(3.1,2.2)],[(1,2),(2,2.2),(3,2)]]
}

df = pd.DataFrame(d)
def makePolygon(row):
    line2reverse = list(reversed(row["line2"]))
    return Polygon(line1+line2reverse)    
geometries = []

for index, row in df.iterrows():
    geometries.append(makePolygon(row))
crs = {'init': 'epsg:4326'} 
gdf = gpd.GeoDataFrame(df, crs=crs, geometry=geometries)
gdf.to_file('MyGeometries.shp', driver='ESRI Shapefile')

możesz odczytać geometrie linii za pomocą funkcji geopandas gpd.read_file ().

Rząd wierzchołków wielokątów w ogólnym GIS: zgodnie z ruchem wskazówek zegara lub przeciwnie do ruchu wskazówek zegara

https://nbviewer.jupyter.org/gist/rutgerhofste/b01c17aa6851ea577f10c21a4c3717bc


Jak przekonwertować to na plik kształtu?
Stephen Jacob

1
Możesz używać wielu narzędzi, ale jestem fanem geopand. Użyj gdf.to_file ('MyGeometries.shp', driver = 'ESRI Shapefile')
RutgerH
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.