Generowanie kafelków mapy
Wprowadzenie
Dział zatytułowany „Wprowadzenie”QCAD jest dostarczany z dwoma narzędziami wiersza poleceń do tworzenia kafelków mapy do użytku z internetowymi widokami map, takimi jak Leaflet. Leaflet to biblioteka JavaScript do pracy z interaktywnymi mapami w przeglądarce.
Prezentowanie rysunku online
Dział zatytułowany „Prezentowanie rysunku online”Najprostszym przypadkiem użycia mapy internetowej jest zapewnienie odwiedzającym witrynę interaktywnego widoku rysunku z możliwością powiększania.
Oto przykład, który generuje kafelki mapy dla dowolnego danego pliku rysunku:
dwg2maptiles -z 0-6 -c -b white -hq-postfix=@2x -a -o path/to/output/directory drawing.dxfPrzełącznik -z określa poziomy powiększenia do wygenerowania, tutaj od poziomu powiększenia 0 do poziomu powiększenia 6. Oznacza to, że zaczynając od poziomu 0 (cały rysunek z automatycznym powiększeniem), użytkownik może powiększać 6 razy, aż do osiągnięcia limitu. Za każdym razem, gdy użytkownik powiększa, rysunek jest powiększany o współczynnik 2, więc przy 6 poziomach powiększenia użytkownik może powiększyć o współczynnik 2^6 (=64). Generowanie większej liczby poziomów powiększenia wymaga więcej czasu i miejsca na dysku. Każdy dodatkowy poziom powiększenia zwykle wymaga czterokrotnie więcej czasu i miejsca na dysku do wygenerowania niż poprzedni.
Kafelki są generowane w podanym katalogu wyjściowym (-o) ze standardową strukturą katalogów i nazwami plików dla kafelków mapy (z/x/y.png).
W powyższym przykładzie chcemy, aby rysunek był renderowany na białym tle (-b white). Białe linie powinny zostać poprawione na czarne, aby zapewnić widoczność wszystkich linii (-c).
Argument -hq-postfix=@2x mówi dwg2maptiles, aby generował kafelki wysokiej jakości (hq, wysoka rozdzielczość, retina) o rozmiarze 512x512px wraz z kafelkami o standardowej rozdzielczości 256x256px.
Aby jeszcze bardziej zwiększyć jakość, używamy również przełącznika -a do wygładzania (antyaliasing).
Zobacz przykład z Leaflet online
Generowanie georeferencyjnych kafelków mapy
Dział zatytułowany „Generowanie georeferencyjnych kafelków mapy”dwg2maptiles może być również używany do generowania dokładnych nakładek dla map świata. W tym celu rysunek zwykle musi zostać przekształcony z lokalnego układu współrzędnych na współrzędne Web Mercator, powszechnie używane przez mapy internetowe.
QCAD Professional jest dostarczany z osobnym narzędziem wiersza poleceń do przekształcania rysunków z jednego układu odniesienia współrzędnych (CRS) na inny: dwgmapconvert.
dwgmapconvert jest zwykle używany do konwersji wszystkich współrzędnych w danym pliku rysunku ze znanego, lokalnego układu współrzędnych na układ współrzędnych EPSG:3857 (czasami nazywany „Web Mercator”). Jest to układ współrzędnych używany przez większość map internetowych, na przykład Google Maps lub mapbox. Aby użyć rysunku jako danych wejściowych dla dwg2maptiles i wygenerować georeferencyjne kafelki mapy, rysunek musi być w układzie współrzędnych EPSG:3857.
W układzie współrzędnych EPSG:3857 cała mapa świata mieści się w kwadracie o wymiarach 20037508.3427892m na poziomie powiększenia 0. Jeśli rysunek zostanie przekonwertowany na ten układ współrzędnych, rysunek jest przekształcany w taki sposób, aby zmieścił się w tym kwadracie świata i aby rysunek znajdował się we właściwych, zrzutowanych współrzędnych świata.
Na przykład, jeśli rysunek został utworzony w EPSG:2056 (także LV95, lokalny szwajcarski układ współrzędnych), można go przekształcić na EPSG:3857 za pomocą dwgmapconvert w następujący sposób:
dwgmapconvert -segment-length=0.5 -crs-in=EPSG:2056 -crs-out=EPSG:3857 -f -o drawing_epsg3857.dxf drawing_epsg2056.dxfPonieważ odwzorowania kartograficzne są zwykle nieliniowe, krzywe i dłuższe linie muszą zostać podzielone na małe odcinki linii, które można następnie zrzutować w sposób nieliniowy. Jeśli podano przełącznik -segment-length, dwgmapconvert wykonuje tę segmentację automatycznie, używając podanej długości segmentu. Długość segmentu jest określona w jednostkach rysunkowych oryginalnego rysunku (tutaj metrach).
-crs-in służy do określenia wejściowego układu współrzędnych, tutaj EPSG:2056.
-crs-out służy do określenia wyjściowego układu współrzędnych, który musi być EPSG:3857, jeśli dane wyjściowe mają być później używane z dwg2maptiles.
dwgmapconvert obsługuje LV95 jako dane wejściowe i WebMercator jako dane wyjściowe.
Inne układy współrzędnych zostaną dodane w przyszłych wydaniach lub mogą zostać dodane przez użytkownika.
Aby dodać obsługę nowego układu współrzędnych, należy podać dwa równania do konwersji współrzędnych z nowego układu współrzędnych na WGS84 (długość/szerokość geograficzna, jak współrzędne GPS).
Nowe układy współrzędnych można dodać do pliku konfiguracyjnego JSON o nazwie CRS.json, znajdującego się w folderze „scripts” używanej instalacji QCAD. Oto przykładowy plik CRS.json, który konfiguruje układ współrzędnych LV95. Aby móc używać LV95 jako danych wejściowych dla narzędzia dwgmapconvert, musimy podać sekcję „toWgs84” z równaniami do konwersji współrzędnych x i y. Tutaj używamy również dwóch zmiennych pomocniczych, x_ i y_, które muszą zostać zainicjowane w równaniu x, aby były dostępne w obu równaniach.
Moglibyśmy również podać sekcję „fromWgs84”, aby umożliwić konwersję z innych układów współrzędnych na LV95. Obie sekcje są opcjonalne, w zależności od kierunku konwersji, który chcesz obsługiwać.
{ "CRS" : [ { "id" : "EPSG:2056 CH1903+ / LV95", "toWgs84" : { "x": "x_ = (y-1200000)/1000000; y_ = (x-2600000)/1000000; (2.6779094 + 4.728982*y_ + 0.791484*y_*x_ + 0.1306*y_*x_*x_ - 0.0436*y_*y_*y_) * 100 / 3", "y": "(16.9023892 + 3.238272*x_ - 0.270978*y_*y_ - 0.002528*x_*x_ - 0.0447*y_*y_*x_ - 0.0140*x_*x_*x_) * 100 / 36" }, "aliases" : [ "LV95", "Swiss" ] } ]}Generowanie kafelków mapy
Dział zatytułowany „Generowanie kafelków mapy”Po przekonwertowaniu rysunku na współrzędne EPSG:3857 możemy użyć dwg2maptiles do wygenerowania kafelków dla warstwy nakładki w Leaflet:
dwg2maptiles -web-mercator -skip-empty -hq-postfix=@2x -z 22 -b transparent -o path/to/output/directory drawing_epsg3857.dxfZwróć uwagę, że musimy przekazać przełącznik -web-mercator do dwg2maptiles, aby poinformować go, że nie powinien wykonywać automatycznego powiększenia, ale generować nakładkę mapy w dokładnych współrzędnych EPSG:3857, jakie występują w pliku.
-skip-empty mówi dwg2maptiles, aby nie generował kafelków, które nie zawierają żadnej części rysunku. Bez tego przełącznika zostanie wygenerowane 2^zoomLevel kafelków na poziom powiększenia. Byłoby to 4’194’304 kafelków dla poziomu powiększenia 22. Ponieważ rysunek nakładki najprawdopodobniej obejmuje tylko bardzo małą część mapy świata, tego przełącznika należy zawsze używać podczas tworzenia map nakładek.
-b transparent ustawia tło na przezroczyste, dzięki czemu mapy można używać jako nakładki na istniejącą mapę świata (np. Google Map, mapbox itp.). Aby kontrolować kolor, w jakim wyświetlane są czarne lub białe linie, tło można ustawić na czarne przezroczyste lub białe przezroczyste odpowiednio za pomocą -b "#00ffffff" (białe przezroczyste tło, czarne linie) lub -b "#00000000" (czarne przezroczyste tło, białe linie). W tym przypadku pamiętaj również o przekazaniu przełącznika -c, aby wymusić automatyczną korekcję kolorów.
Argument -hq-postfix=@2x może być używany do generowania kafelków wysokiej rozdzielczości (512px) oprócz normalnych kafelków 256px. Wartość „@2x” jest zalecana i szeroko stosowana dla kafelków wysokiej rozdzielczości, również w Leaflet. Za pomocą tego przełącznika dla każdego kafelka o niskiej rozdzielczości „N.png” tworzony jest kafelek o wysokiej rozdzielczości „[email protected]”.
Używanie wielu procesów (i rdzeni CPU)
Dział zatytułowany „Używanie wielu procesów (i rdzeni CPU)”Generowanie kafelków mapy może być zadaniem intensywnie obciążającym CPU, w zależności od poziomów powiększenia, złożoności rysunku i innych ustawień.
Aby szybciej generować kafelki mapy, możesz podzielić zadanie między kilka dostępnych rdzeni CPU. Dla tej funkcji dwg2maptiles oferuje przełącznik -s do generowania tylko części wymaganych kafelków. Przełącznik -s oczekuje dwóch parametrów oddzielonych przecinkiem: części do wygenerowania i całkowitej liczby użytych części. Na przykład -s 1,4 wygenerowałoby pierwszą część z czterech części łącznie. Aby wygenerować wszystkie kafelki z powyższego przykładu przy użyciu czterech rdzeni CPU, możesz uruchomić:
dwg2maptiles -web-mercator -skip-empty -hq-postfix=@2x -z 22 -s 1,4 -b transparent -o path/to/output/directory drawing_epsg3857.dxf &dwg2maptiles -web-mercator -skip-empty -hq-postfix=@2x -z 22 -s 2,4 -b transparent -o path/to/output/directory drawing_epsg3857.dxf &dwg2maptiles -web-mercator -skip-empty -hq-postfix=@2x -z 22 -s 3,4 -b transparent -o path/to/output/directory drawing_epsg3857.dxf &dwg2maptiles -web-mercator -skip-empty -hq-postfix=@2x -z 22 -s 4,4 -b transparent -o path/to/output/directory drawing_epsg3857.dxf &waitOczywiście możesz również podzielić zadania według poziomów powiększenia lub używać części tylko dla wyższych poziomów powiększenia i pojedynczego procesu dla wszystkich niższych (tańszych) poziomów powiększenia itp.
Przykład
Dział zatytułowany „Przykład”Interaktywny przykład zapewnia dwie warstwy nakładek na mapę szwajcarskiego kantonu Zurych: chroniony obszar leśny i korytarze dzikiej przyrody. Oryginalne dane były w współrzędnych EPSG:2056 (LV95) i zostały przekształcone na EPSG:3857 za pomocą dwgmapconvert.