產生地圖圖磚
QCAD 隨附兩個命令列工具,用於建立地圖圖磚,以用於 Leaflet 等線上地圖顯示。Leaflet 是一個 JavaScript 程式庫,用於在瀏覽器中處理互動式地圖。
線上呈現圖面
Section titled “線上呈現圖面”線上地圖最簡單的使用案例是為網站訪客提供圖面的互動式、可縮放檢視。
以下是一個為任何給定圖面檔案產生地圖圖磚的範例:
dwg2maptiles -z 0-6 -c -b white -hq-postfix=@2x -a -o path/to/output/directory drawing.dxf-z 開關指定要產生的縮放層級,這裡是從縮放層級 0 到縮放層級 6。這表示從層級 0(自動縮放的整個圖面)開始,使用者可以放大 6 次,直到達到限制。每次使用者放大時,圖面會放大 2 倍,因此透過 6 個縮放層級,使用者可以放大 2^6(=64)倍。產生更多縮放層級需要更多時間和磁碟空間。每增加一個縮放層級,產生時通常需要比前一個多四倍的時間和磁碟空間。
圖磚以地圖圖磚的標準目錄結構和檔案名稱(z/x/y.png)產生於給定的輸出目錄(-o)中。
在上述範例中,我們希望圖面在白色背景上算繪(-b white)。白色線條應校正為黑色,以確保所有線條都可見(-c)。
-hq-postfix=@2x 引數告訴 dwg2maptiles 產生 512x512px 的高品質(hq、高解析度、retina)圖磚,以及 256x256px 的標準解析度圖磚。
為了進一步提高品質,我們還使用 -a 開關進行反鋸齒(antialiasing)。
產生地理參照地圖圖磚
Section titled “產生地理參照地圖圖磚”dwg2maptiles 也可用於為世界地圖產生精確的疊加層。為此,圖面通常必須從本機座標系統轉換為線上地圖常用的 Web Mercator 座標。
QCAD Professional 隨附一個獨立的命令列工具,用於將圖面從一個座標參考系統(CRS)轉換為另一個:dwgmapconvert。
dwgmapconvert 通常用於將給定圖面檔案中的所有座標從已知的本機座標系統轉換為 EPSG:3857 座標系統(有時稱為「Web Mercator」)。這是大多數線上地圖使用的座標系統,例如 Google Maps 或 mapbox。若要將圖面作為 dwg2maptiles 的輸入並產生地理參照地圖圖磚,圖面必須位於 EPSG:3857 座標系統中。
在 EPSG:3857 座標系統中,整個世界地圖在縮放層級 0 時可容納於一個 20037508.3427892m 的正方形中。如果將圖面轉換為此座標系統,圖面會以這樣的方式轉換:使其容納於該世界正方形中,並使圖面位於正確的投影世界座標。
例如,如果圖面是在 EPSG:2056(也稱為 LV95,本機瑞士座標系統)中建立的,可以使用 dwgmapconvert 將其轉換為 EPSG:3857,方法如下:
dwgmapconvert -segment-length=0.5 -crs-in=EPSG:2056 -crs-out=EPSG:3857 -f -o drawing_epsg3857.dxf drawing_epsg2056.dxf由於地圖投影通常是非線性的,曲線和較長的線條需要分割成小的線段,然後可以用非線性方式投影。如果提供了 -segment-length 開關,dwgmapconvert 會使用給定的線段長度自動執行此分割。線段長度以原始圖面的繪圖單位(此處為公尺)指定。
-crs-in 用於指定輸入座標系統,此處為 EPSG:2056。
-crs-out 用於指定輸出座標系統,如果輸出稍後要與 dwg2maptiles 一起使用,則必須為 EPSG:3857。
dwgmapconvert 隨附對 LV95 作為輸入和 WebMercator 作為輸出的支援。
其他座標系統將在未來版本中新增,或可由使用者新增。
若要新增對新座標系統的支援,必須提供兩個方程式,以將座標從新座標系統轉換為 WGS84(經度/緯度,如 GPS 座標)。
新座標系統可以新增至名為 CRS.json 的 JSON 設定檔中,該檔案位於所使用的 QCAD 安裝的「scripts」資料夾中。以下是設定座標系統 LV95 的範例 CRS.json 檔案。為了能夠將 LV95 作為 dwgmapconvert 工具的輸入,我們需要提供含有 x 和 y 座標轉換方程式的「toWgs84」區段。此處我們還使用兩個輔助變數 x_ 和 y_,它們必須在 x 方程式中初始化,才能在兩個方程式中都可存取。
我們也可以提供「fromWgs84」區段,以允許從其他座標系統轉換為 LV95。兩個區段都是選用的,取決於您想要支援的轉換方向。
{ "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" ] } ]}產生地圖圖磚
Section titled “產生地圖圖磚”一旦我們將圖面轉換為 EPSG:3857 座標,就可以使用 dwg2maptiles 為 Leaflet 中的疊加圖層產生圖磚:
dwg2maptiles -web-mercator -skip-empty -hq-postfix=@2x -z 22 -b transparent -o path/to/output/directory drawing_epsg3857.dxf請注意,我們需要將 -web-mercator 開關傳遞給 dwg2maptiles,讓它知道不應執行自動縮放,而是以檔案中存在的精確 EPSG:3857 座標產生地圖疊加層。
-skip-empty 告訴 dwg2maptiles 不要產生不包含圖面任何部分的圖磚。若沒有此開關,每個縮放層級將產生 2^zoomLevel 個圖磚。對於縮放層級 22,這將是 4’194’304 個圖磚。由於疊加圖面很可能只涵蓋世界地圖的極小部分,因此建立疊加地圖時應始終使用此開關。
-b transparent 將背景設為透明,因此地圖可用作現有世界地圖(例如 Google Map、mapbox 等)的疊加層。若要控制黑色或白色線條的顯示顏色,可以分別使用 -b "#00ffffff"(白色透明背景,黑色線條)或 -b "#00000000"(黑色透明背景,白色線條)將背景設為黑色透明或白色透明。在這種情況下,請務必也傳遞 -c 開關以強制自動色彩校正。
-hq-postfix=@2x 引數可用於在一般 256px 圖磚之外產生高解析度圖磚(512px)。建議使用「@2x」值,此值廣泛用於高解析度圖磚,Leaflet 中也是如此。使用此開關,會為每個低解析度圖磚「N.png」建立一個高解析度圖磚「[email protected]」。
使用多個處理程序(和 CPU 核心)
Section titled “使用多個處理程序(和 CPU 核心)”產生地圖圖磚可能是一項 CPU 密集型工作,取決於縮放層級、圖面複雜度和其他設定。
為了更快產生地圖圖磚,您可以將工作分配給多個可用的 CPU 核心。針對此功能,dwg2maptiles 提供 -s 開關以僅產生所需圖磚的一部分。-s 開關需要兩個以逗號分隔的參數:要產生的部分和使用的部分總數。例如 -s 1,4 會產生總共四個部分中的第一個部分。若要使用四個 CPU 核心產生上述範例的所有圖磚,您可以執行:
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 &wait當然,您也可以按縮放層級劃分工作,或僅對較高縮放層級使用部分,並對所有較低(較便宜)的縮放層級使用單一處理程序等。
一個互動式範例為瑞士蘇黎世州的地圖提供兩個疊加圖層:受保護的森林區域和野生動物廊道。原始資料以 EPSG:2056(LV95)座標提供,並使用 dwgmapconvert 轉換為 EPSG:3857。