Chciałbym utworzyć wielokąty wzdłuż linii, aby użyć ich w AtlasCreator w następnym kroku.
ArcMap ma narzędzie o nazwie Funkcje indeksu map paskowych .
Za pomocą tego narzędzia mogę wybrać wysokość i szerokość moich wielokątów (powiedzmy 8 km x 4 km) i automatycznie produkować / obracać je wzdłuż linii.
Jednym z generowanych atrybutów każdego wielokąta jest kąt obrotu, którego potrzebuję, aby później obrócić moje strzałki północy w Atlas Generatorze.
Czy ktoś ma pomysł, jak rozwiązać to zadanie w QGIS / z pyQGIS? Równie dobrze byłyby algorytmy trawiaste lub SAGA albo profesjonalny zestaw narzędzi, który można by użyć w niestandardowej wtyczce;) Edytuj1: Potrzebuję nie tylko zakresu drukowania, ale także samych wielokątów, ponieważ chcę wydrukować mapę za pomocą wszystkie wielokąty / zakresy jako rodzaj mapy przeglądowej.
Edycja2: Oferuję nagrodę, ponieważ wciąż szukam rozwiązania PyQGIS, którego można użyć w wtyczce QGIS bez potrzeby instalowania oprogramowania oprócz QGIS (brak RDBMS jak PostGIS / Oracle)
Odpowiedzi:
Interesujące pytanie! Chciałem spróbować, więc spróbowałem.
Możesz to zrobić w PostGRES / POSTGIS za pomocą funkcji, która generuje zestaw wielokątów.
W moim przypadku mam tabelę z jedną funkcją (MULTILINESTRING), która reprezentuje linię kolejową. Musi używać CRS w metrach, używam osgb (27700). Zrobiłem 4 strony x 2 km „stron”.
Tutaj możesz zobaczyć wynik ... zielony jest siecią drogową, przyciętą do 1 km bufora wokół linii kolejowej, co ładnie odpowiada wysokości wielokątów.
Oto funkcja ...
Korzystanie z tej funkcji
Oto przykład; Strony 4 km x 2 km, epsg: 27700 i 10% nakładania się
Po uruchomieniu możesz następnie wyeksportować z PgAdminIII do pliku csv. Możesz zaimportować to do QGIS, ale może być konieczne ręczne ustawienie CRS dla warstwy - QGIS nie używa SRID w EWKT, aby ustawić dla ciebie CRS warstwy: /
Dodanie atrybutu namiaru
Prawdopodobnie łatwiej to zrobić w postgis, można to zrobić za pomocą wyrażeń QGIS, ale trzeba będzie napisać trochę kodu. Coś takiego...
Ostrzeżenia
Jest trochę zhakowany i miał okazję przetestować tylko jeden zestaw danych.
Nie jestem w 100% pewien, które dwa wierzchołki musisz wybrać w tej aktualizacji atrybutu namiaru
query
. Może być konieczne eksperymentowanie.Muszę wyznać, że nie mam pojęcia, dlaczego muszę wykonać tak skomplikowaną formułę, aby obrócić wielokąt w celu dopasowania do bieżącego segmentu linii. Myślałem, że mogę użyć danych wyjściowych z ST_Azimuth () w ST_Rotate (), ale najwyraźniej nie.
źródło
Istnieją różne rozwiązania. I to może działać z prostą polilinią i wieloma wybranymi elementami
Schemat blokowy:
Parametry
zapętlić na węzłach OrderNodes
stwórz pierwszy punkt jako kotwicę
dla każdego wierzchołka dodaj go na dykta x, y, id i oblicz wektor
Możesz zmienić tę propozycję, jeśli nie jest tak naprawdę jasna lub komentowana.
źródło
Steven Kays odpowiada w pyqgis. Po prostu wybierz linie w warstwie przed uruchomieniem skryptu. Skrypt nie obsługuje łączenia linem, więc nie może działać na warstwie z wielowarstwowym testowaniem
źródło
Dwie odpowiedzi (w momencie publikacji) są genialne i dobrze wyjaśnione. Jednak istnieje również BARDZO proste, ale skuteczne rozwiązanie (zakładając, że zaakceptujesz wszystkie mapy ustawione w kierunku północnym do góry w tradycyjny sposób, a nie losowy kierunek północny oparty na rzece). Jeśli chcesz rotacji, jest to możliwe, ale nieco bardziej złożone (patrz na dole).
Najpierw spójrz na mój post tutaj . Daje to instrukcje tworzenia map dla Atlasu. Metodą, którą chcesz zastosować, jest adaptacja „Workflow 2” w poradniku. Podziel element liniowy na wierzchołki lub długość i buforuj elementy o dowolną wartość. Ilość buforowana przez ciebie częściowo narzuci nakładanie się (ale patrz poniżej), ale co ważniejsze, tworzy funkcję z obszarem. Możesz użyć dowolnej liczby wtyczek do podziału linii, ale GRASS v.split.length i v.split.vert to dobre opcje (dostępne w Processing Toolbox).
Po włączeniu generowania atlasu w programie Map Composer i wybraniu buforowanej warstwy, wróć do karty elementów i wybierz obiekt mapy. Zaznacz opcję „Kontrolowane przez Atlas”, a w twoim przypadku wybrałbym opcję Margin wokół. To kontroluje nakładanie się map (alternatywnie możesz preferować stałą skalę).
Możesz wyświetlić podgląd Atlasa za pomocą przycisku Podgląd atlasu na górnym pasku narzędzi kompozytora i zobaczyć, ile stron on wyprodukuje. Uwaga: możesz wyeksportować wszystkie strony w jednym pliku PDF lub jako osobne pliki.
Aby mapa obracała się wzdłuż linii, we właściwościach elementu do tworzenia mapy znajduje się pole rotacji. Musisz ustawić wyrażenie (użyj małego przycisku po prawej stronie pola rotacji). Wybierz zmienną jako opcję, a następnie Edytuj. Pojawi się okno konstruktora wyrażeń, w którym można uzyskać dostęp do geometrii lub pól elementów atlasu. Następnie możesz zbudować ekspres, aby obrócić mapę zgodnie z obrotem obiektów (możesz obliczyć namiar przy użyciu punktów początkowych i końcowych każdego segmentu linii oraz odrobiny wyzwalacza). Powtórz ten sam proces, aby obrócić strzałkę Północ (używając tego samego wyrażenia lub wstępnie obliczonej zmiennej).
źródło