Georeferencje wektorowe linie PDF / SVG / DXF przy użyciu QGIS? [duplikować]

12

Chcę stworzyć małą aplikację internetową, która wizualizuje wyniki wyborów dla każdego miasta na stronie ankiety. Rezultat będzie bardzo podobny do tego, co zrobiono dla Berlina tutaj . Mam nadzieję, że pomoże to zrozumieć, o co mi chodzi.

Nieprzetworzone dane wyborcze w skali, której potrzebuję, są publikowane i wiem, jak to zrobić na podstawie pliku kształtu z osobnymi wielokątami wyłożonymi okręgami wyborczymi. Moim problemem jest - jak zapewne można się domyślić - że coś takiego jeszcze nie istnieje.

Tym, co faktycznie zostało opublikowane, jest plik PDF przedstawiający granice dzielnic, którymi jestem zainteresowany: http://muenster.de/stadt/stadtplanung/pdf/a3_stimmbezirk.pdf

Sam nie chcę przerysowywać szkicu, więc szukam sposobu na zrobienie z niego pliku kształtu. Na szczęście PDf zawiera linie jako osobne obiekty wektorowe, wyodrębniłem je do pliku SVG: https://www.dropbox.com/s/bn7698yrdh5tdqj/a3_stimmbezirk_ungrouped.svg

Próbowałem już przekonwertować SVG na DXF i zaimportować go do qgis 2.0.1. To faktycznie działa, ale (zgodnie z oczekiwaniami) umieszcza wektory na Oceanie Atlantyckim i nie mogę znaleźć sposobu na ich edycję i naprawienie.

Co mogę teraz zrobić, aby dokonać georeferencji tych wektorów za pomocą narzędzi open source i wreszcie utworzyć plik kształtu?

bfncs
źródło
Czy nie możesz pobrać OpenStreeMap Shapefiles dla Munster? download.geofabrik.de/europe/germany/nordrhein-westfalen/… granice administracyjne są już georeferencyjne.
Mapperz
Dzięki za komentarz, Mapperz! Wygląda na to, że mógłbym, ale nie obejmuje bieżących okręgów wyborczych („Stimmbezirke”) ... czy tak?
bfncs 27.09.13

Odpowiedzi:

12

Natknąłem się na twoje pytanie, próbując zrobić to samo, oto jak to zrobiłem:

Zastosowane oprogramowanie:

  • Inkscape
  • QGIS 2.2
  • Wtyczka Affine Transformation dla QGIS

Wydobywanie danych wektorowych z pliku PDF

To, co już zrobiłeś, po prostu otwórz plik PDF w Inkscape, znajdź pożądane kształty i usuń wszystkie tła i otaczający tekst. Zapisz jako plik .dxf .

Georeferencje pliku wektorowego

Aby pracować z plikiem wektorowym, musimy przekonwertować go na plik kształtu ESRI za pomocą QGIS.

Otwórz QGIS i dodaj plik dxf jako warstwę rastrową, wybierz strefę 3 DHDN / Gaussa-Krugera (EPSG: 31467) jako układ współrzędnych. Kliknij warstwę prawym przyciskiem myszy i zapisz jako plik kształtu ESRI. Otwórz ten plik kształtu jako warstwę rastrową i usuń drugi.

Masz teraz Münsters Wahlbezirke gdzieś przy współrzędnych 0, 0.

Aby przetłumaczyć (przenieść) i zmienić rozmiar wektora we właściwe miejsce, musimy znaleźć docelowe współrzędne i rozmiar. Krótko mówiąc, miałem inny GeoJSON z Wahlbezirke, który był georeferencyjny, ale nie tak szczegółowy, więc użyłem go do obliczenia następujących danych:

  • Cel x, y
  • Stosunek rozmiaru między naszym właśnie wyodrębnionym wektorem a rozmiarem docelowym (przy użyciu xMin, xMax i yMin, yMax (wyodrębniony z metadanych warstwy w QGIS), aby uzyskać wymiary w kierunku x i y dla obu warstw, a następnie obliczyć stosunek w kierunku x i y)

W moim przypadku okazują się one z grubsza:

target x 3406388
target y 5745290
yratio 118,539696
xratio 118,637678

Włącz tryb edycji (ikona ołówka) na swojej warstwie i wstaw te liczby do wtyczki Affine Transformation (Menu wektor, Narzędzia geoprzetwarzania, Affine), wybierz „Cała warstwa”:

Transformacja afiniczna

Kliknij transformuj, wyłącz tryb edycji (i zapisz), a skończysz z żółtą warstwą z grubsza w miejscu docelowym. Nigdy nie wymyśliłem, jak usunąć żółty kolor, więc usuwam i ponownie dodam warstwę, aby uzyskać lepszą widoczność.

Możesz skończyć z widokiem, który wygląda mniej więcej tak, gdzie twoja warstwa rastrowa jest bardzo mała (zakreślona na czerwono), powiększ tutaj: QGIS 2.2 Mała warstwa rastrowa (Być może przeoczyłem ustawienie tutaj, nie jestem pewien, co powoduje takie zachowanie. ”Zoom w zakresie warstw ”nie pomaga.)

Dodaj warstwę, która jest już georeferencyjna, możesz użyć warstwy OpenStreetMap (poprzez rozszerzenie OpenLayers), NRW WMS lub podobnej. Twój wektor nie znajduje się jeszcze we właściwej pozycji, więc przenieś go, włączając tryb edycji, a następnie użyj narzędzia Przenieś funkcje.

Funkcja QGIS 2.2 Move

Teraz stworzyliśmy warstwę polilinii, ostatnim krokiem jest wykonanie wielokątów z tych linii. Nie zamierzam tego tutaj wyjaśniać, przeczytaj tutaj, aby uzyskać więcej informacji:

Zobacz wynik tutaj .

chrki
źródło
Bardzo dziękuję za szczegółową odpowiedź, nie spodziewałem się już, że uzyskam pomoc w tym problemie, a tymczasem zawiesiłem projekt. Nadal nie skończyłem z replikowaniem twoich kroków, ale wygląda na to, czego potrzebuję. Z niecierpliwością czekam, aż w końcu uda się to zrobić dzięki twojej pomocy.
bfncs
Edycja za pomocą QGIS może być żmudna i nie jest dość intuicyjna (jak widać przy zachowaniu / błędzie powiększania? I innych rzeczach ...), wynik jest dostępny online w Github, z którego możesz korzystać bezpłatnie (link na końcu postu ). Nie poszedłem jeszcze, aby przekonwertować powstałe polilinie na wielokąty, zrobię to później. Edycja: Właśnie zobaczyłem, że potrzebujesz drugiej mapy ze 172 dzielnicami, przekonwertowałem tylko mapę 33 dzielnic. Przepraszam: D
chrki
6

Oto kolejny przepływ pracy, wykorzystujący ogr2ogr z punktami GCP:

  1. Wyodrębnij linie jako svg (jak wyżej)
  2. załaduj do inkscape i zapisz jako dxf
  3. Załaduj do QGIS z EPSG: 31467 jako CRS
  4. Przeczytaj kilka współrzędnych ze znaczących krawędzi otaczającej granicy miasta
  5. Otwórz edytor OSM JOSM i pobierz relację 62591 granicy miasta
  6. Zapisz to jako GPX
  7. Załaduj granicę do nowej sesji QGIS, ustaw projekt CRS na EPSG: 31467
  8. Przeczytaj współrzędne tych samych punktów, co powyżej
  9. utwórz następujący plik wsadowy dla GDAL:
ogr2ogr -a_srs EPSG:31467 -gcp 66.2423 264.3829 3397709. 5756806. -gcp 227.530 17.636 3404474. 5746477. -gcp 443.61 153.42 3413517. 5752162. -gcp 456.24 421.97 3414043. 5763404. -gcp 294.56 552.56 3407296. 5768889. stimmbezirke.shp stimmbezirke.dxf

Uruchom partię i załaduj wynikowy plik kształtu do QGIS:

wprowadź opis zdjęcia tutaj

AndreJ
źródło