การสร้างแผ่นภาพแผนที่
QCAD มาพร้อมกับเครื่องมือบรรทัดคำสั่งสองตัวสำหรับสร้างแผ่นภาพแผนที่ (map tiles) เพื่อใช้กับการแสดงแผนที่ออนไลน์อย่าง 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) การสร้างระดับการซูมมากขึ้นต้องใช้เวลาและพื้นที่ดิสก์มากขึ้น โดยปกติแต่ละระดับการซูมที่เพิ่มขึ้นจะใช้เวลาและพื้นที่ดิสก์ในการสร้างมากกว่าระดับก่อนหน้าประมาณสี่เท่า
แผ่นภาพจะถูกสร้างในไดเรกทอรีเอาต์พุตที่กำหนด (-o) ด้วยโครงสร้างไดเรกทอรีและชื่อไฟล์มาตรฐานสำหรับแผ่นภาพแผนที่ (z/x/y.png)
ในตัวอย่างข้างต้น เราต้องการให้แบบเขียนเรนเดอร์บนพื้นหลังสีขาว (-b white) เส้นสีขาวควรถูกแก้ไขให้เป็นสีดำเพื่อให้แน่ใจว่าทุกเส้นมองเห็นได้ (-c)
อาร์กิวเมนต์ -hq-postfix=@2x บอกให้ dwg2maptiles สร้างแผ่นภาพคุณภาพสูง (hq, ความละเอียดสูง, retina) ที่ขนาด 512x512px ควบคู่ไปกับแผ่นภาพความละเอียดมาตรฐานที่ขนาด 256x256px
เพื่อเพิ่มคุณภาพให้มากขึ้น เรายังใช้สวิตช์ -a สำหรับการลบรอยหยัก (antialiasing)
การสร้างแผ่นภาพแผนที่แบบอ้างอิงพิกัดภูมิศาสตร์
Section titled “การสร้างแผ่นภาพแผนที่แบบอ้างอิงพิกัดภูมิศาสตร์”dwg2maptiles ยังสามารถใช้สร้างการซ้อนทับ (overlay) ที่แม่นยำสำหรับแผนที่โลกได้ด้วย สำหรับการนี้ โดยปกติแบบเขียนต้องถูกแปลงจากระบบพิกัดท้องถิ่นเป็นพิกัด Web Mercator ตามที่นิยมใช้กันในแผนที่ออนไลน์
QCAD Professional มาพร้อมกับเครื่องมือบรรทัดคำสั่งแยกต่างหากสำหรับแปลงแบบเขียนจากระบบอ้างอิงพิกัด (CRS) หนึ่งไปยังอีกระบบหนึ่ง: dwgmapconvert
dwgmapconvert มักใช้เพื่อแปลงพิกัดทั้งหมดในไฟล์แบบเขียนที่กำหนดจากระบบพิกัดท้องถิ่นที่ทราบไปเป็นระบบพิกัด EPSG:3857 (บางครั้งเรียกว่า “Web Mercator”) ซึ่งเป็นระบบพิกัดที่แผนที่ออนไลน์ส่วนใหญ่ใช้ เช่น Google maps หรือ mapbox หากต้องการใช้แบบเขียนเป็นข้อมูลนำเข้าสำหรับ dwg2maptiles และสร้างแผ่นภาพแผนที่แบบอ้างอิงพิกัดภูมิศาสตร์ แบบเขียนต้องอยู่ในระบบพิกัด EPSG:3857
ในระบบพิกัด EPSG:3857 แผนที่โลกทั้งหมดพอดีกับสี่เหลี่ยมจัตุรัสขนาด 20037508.3427892 เมตรที่ระดับการซูม 0 หากแบบเขียนถูกแปลงเป็นระบบพิกัดนี้ แบบเขียนจะถูกแปลงในลักษณะที่พอดีกับสี่เหลี่ยมจัตุรัสโลกนั้น และแบบเขียนจะอยู่ที่พิกัดโลกที่ถูกฉายอย่างถูกต้อง
ตัวอย่างเช่น หากแบบเขียนถูกสร้างขึ้นใน EPSG:2056 (หรือ LV95 ซึ่งเป็นระบบพิกัดท้องถิ่นของสวิตเซอร์แลนด์) ก็สามารถแปลงเป็น EPSG:3857 ด้วย dwgmapconvert ได้ดังนี้:
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 ใช้ระบุระบบพิกัดส่งออกซึ่งต้องเป็น EPSG:3857 หากต้องการนำผลลัพธ์ไปใช้กับ dwg2maptiles ในภายหลัง
dwgmapconvert รองรับ LV95 เป็นอินพุตและ WebMercator เป็นเอาต์พุต
ระบบพิกัดอื่น ๆ จะถูกเพิ่มในรุ่นในอนาคตหรือผู้ใช้สามารถเพิ่มเองได้
ในการเพิ่มการรองรับระบบพิกัดใหม่ ต้องมีการกำหนดสมการสองชุดเพื่อแปลงพิกัดจากระบบพิกัดใหม่ไปเป็น WGS84 (ลองจิจูด/ละติจูด เช่นเดียวกับพิกัด GPS)
ระบบพิกัดใหม่สามารถเพิ่มลงในไฟล์การกำหนดค่า JSON ชื่อ CRS.json ซึ่งอยู่ในโฟลเดอร์ “scripts” ของการติดตั้ง QCAD ที่ใช้งานอยู่ นี่คือตัวอย่างไฟล์ CRS.json ที่กำหนดค่าระบบพิกัด LV95 เพื่อให้สามารถใช้ LV95 เป็นอินพุตสำหรับเครื่องมือ dwgmapconvert ได้ เราจำเป็นต้องระบุส่วน “toWgs84” พร้อมสมการสำหรับการแปลงพิกัด x และ y ในที่นี้เรายังใช้ตัวแปรช่วยสองตัว คือ 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 ต่อระดับการซูม นั่นจะเป็น 4’194’304 แผ่นภาพสำหรับระดับการซูม 22 เนื่องจากแบบเขียนที่ใช้ซ้อนทับมีแนวโน้มอย่างมากที่จะครอบคลุมเพียงส่วนเล็ก ๆ ของแผนที่โลก จึงควรใช้สวิตช์นี้เสมอเมื่อสร้างแผนที่ซ้อนทับ
-b transparent ตั้งค่าพื้นหลังให้โปร่งใส เพื่อให้สามารถใช้แผนที่เป็นการซ้อนทับบนแผนที่โลกที่มีอยู่ได้ (เช่น Google Map, mapbox เป็นต้น) ในการควบคุมสีที่ใช้แสดงเส้นสีดำหรือสีขาว พื้นหลังสามารถตั้งเป็นสีดำโปร่งใสหรือสีขาวโปร่งใสได้ด้วย -b "#00ffffff" (พื้นหลังสีขาวโปร่งใส เส้นสีดำ) หรือ -b "#00000000" (พื้นหลังสีดำโปร่งใส เส้นสีขาว) ตามลำดับ ในกรณีนี้อย่าลืมส่งสวิตช์ -c ด้วยเพื่อบังคับการแก้ไขสีอัตโนมัติ
อาร์กิวเมนต์ -hq-postfix=@2x สามารถใช้สร้างแผ่นภาพความละเอียดสูง (512px) เพิ่มเติมจากแผ่นภาพขนาด 256px ปกติ ค่า “@2x” เป็นค่าที่แนะนำและใช้กันอย่างแพร่หลายสำหรับแผ่นภาพความละเอียดสูง รวมถึงใน Leaflet ด้วย ด้วยสวิตช์นี้ สำหรับแผ่นภาพความละเอียดต่ำ “N.png” ทุกแผ่น จะมีการสร้างแผ่นภาพความละเอียดสูง “[email protected]” ขึ้น
การใช้กระบวนการหลายตัว (และแกน CPU หลายแกน)
Section titled “การใช้กระบวนการหลายตัว (และแกน CPU หลายแกน)”การสร้างแผ่นภาพแผนที่อาจเป็นงานที่ใช้ CPU สูง ขึ้นอยู่กับระดับการซูม ความซับซ้อนของแบบเขียน และการตั้งค่าอื่น ๆ
เพื่อสร้างแผ่นภาพแผนที่ให้เร็วขึ้น คุณสามารถแบ่งงานให้แก่แกน CPU หลายแกนที่มีอยู่ได้ สำหรับคุณสมบัตินี้ dwg2maptiles มีสวิตช์ -s เพื่อสร้างเพียงส่วนหนึ่ง (slice) ของแผ่นภาพที่ต้องการ สวิตช์ -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แน่นอนว่าคุณสามารถแบ่งงานตามระดับการซูมก็ได้ หรือใช้ส่วน (slice) สำหรับระดับการซูมที่สูงกว่าเท่านั้น และใช้กระบวนการเดียวสำหรับระดับการซูมที่ต่ำกว่า (ซึ่งใช้ทรัพยากรน้อยกว่า) ทั้งหมด เป็นต้น
ตัวอย่าง
Section titled “ตัวอย่าง”ตัวอย่างแบบโต้ตอบให้ชั้นซ้อนทับสองชั้นแก่แผนที่ของรัฐซูริกในสวิตเซอร์แลนด์ ได้แก่ พื้นที่ป่าสงวนและทางเดินสัตว์ป่า ข้อมูลต้นฉบับอยู่ในพิกัด EPSG:2056 (LV95) และถูกแปลงเป็น EPSG:3857 โดยใช้ dwgmapconvert