Skip to content

การสร้างแผ่นภาพแผนที่

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)

ดูตัวอย่างออนไลน์ด้วย Leaflet

การสร้างแผ่นภาพแผนที่แบบอ้างอิงพิกัดภูมิศาสตร์

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) สำหรับระดับการซูมที่สูงกว่าเท่านั้น และใช้กระบวนการเดียวสำหรับระดับการซูมที่ต่ำกว่า (ซึ่งใช้ทรัพยากรน้อยกว่า) ทั้งหมด เป็นต้น

ตัวอย่างแบบโต้ตอบให้ชั้นซ้อนทับสองชั้นแก่แผนที่ของรัฐซูริกในสวิตเซอร์แลนด์ ได้แก่ พื้นที่ป่าสงวนและทางเดินสัตว์ป่า ข้อมูลต้นฉบับอยู่ในพิกัด EPSG:2056 (LV95) และถูกแปลงเป็น EPSG:3857 โดยใช้ dwgmapconvert

ดูตัวอย่างออนไลน์ด้วย Leaflet