Th:OpenStreetMap Carto
OpenStreetMap Carto Standard, osm-carto | |
---|---|
กรุงเทพมหานครชั้นใน | |
author: | Andy Allan และผู้มีส่วนร่วมอื่น |
Slippy map: | openstreetmap.org |
Usage policy: | operations |
Tiles license: | ODbL 1.0 |
Style license: | CC0 1.0 |
version: | 5.9.0 releases (2024-10-17) |
รหัสแหล่งที่มา: | gravitystorm/openstreetmap-carto GitHub |
รูปแบบแมปนิก OpenStreetMap อเนกประสงค์ใน CartoCSS |
OpenStreetMap Carto GitHub[1] (หรือย่อเป็น OSM Carto หรือ osm-carto) นั้นเป็น stylesheet แบบโอเพนซอร์สสำหรับการเรนเดอร์ข้อมูล OpenStreetMap เป็นกราฟิกส์แรสเตอร์ ตั้งแต่ปี 2556 เป็นต้นมา หน้าหลักของ OpenStreetMap นั้นประกอบด้วยภาพ OSM Carto เป็นเลเยอร์แผนที่พื้นฐาน ในชื่อปกติ
การรายงานปัญหา และข้อบกพร่องสามารถทำได้ที่นี่ GitHub (สำหรับรูปแบบสไตล์ หรือก็คือปัญหาการเรนเดอร์คลาสวัตถุบางอย่าง) หรือที่นี่ GitHub (สำหรับปัญหาการเรนเดอร์ภาพจริงบน OSM.org, การแคชเป็นต้น) – โดยทั้งสองลิงก์ต้องมีการลงชื่อเข้าใช้ด้วยบัญชี GitHub
รายละเอียดทางเทคนิก
การออกแบบ
รูปแบบนี้ได้รับการออกแบบให้เป็นแผนที่เอนกประสงค์ทั่วไปสำหรับโลกทั้งใบ ตัวอย่างเช่น
- วัตถุพิเศษ (เช่นเครื่องหมายทางทะเล หรือรายละเอียดทางรางรถไฟ) จะไม่ถูกเรนเดอร์
- ป้ายชื่อนั้นเรนเดอร์จากค่าของแท็ก name=* (ถ้ามี), ซึ่งจะทำให้ไม่แผนที่นั้นไม่เป็นแต่ภาษาอังกฤษเพียงภาษาเดียวไปทั่วโลก
- จะไม่มีสัญลักษณะเฉพาะประเทศ (เช่นป้ายถนน หรือสัญลักษณ์รถไฟฟ้าเฉพาะ), ทำให้แผนที่ทั้งหมดมีความสม่ำเสมอเป็นหนึ่งเดียวกัน
โดย OpenStreetMap Carto พยายามที่จะเรนเดอร์วัตถุหลาย ๆ อย่าง แต่ก็เป็นไปไม่ได้ที่จะสามารถเรนเดอร์ทุกสิ่งที่มีอยู่ในฐานข้อมูลได้ ดังนั้นจึงมีการเลือกเรนเดอร์
นิยามกรณีการใช้งาน GitHubสำหรับการขยายในระดับต่าง ๆ
Mapnik และ CartoCSS
OpenStreetMap Carto tiles นั้นเรนเดอร์โดนใช้เครื่องมือ Mapnik อย่างไรก็ตาม OpenStreetMap Carto และ Mapnik ไม่ใช่สิ่งเดียวกัน! Mapnik คือไลบรารีการเรนเดอร์แผนที่ที่ใช้สำหรับแผ่นสไตล์แผนที่ จำนวนมาก (ซึ่งรวมถึง OpenStreetMap Carto ด้วย)
CartoCSS นช้ในการประมวลผลล่วงหน้าสไตล์ชีทเป็นรูปแบบ Mapnik XML (ตั้งแต่เดือนสิงหาคม 2013)
ลำดับการเรนเดอร์
รูปแบบนี้มีเลเยอร์อยู่หลายชั้น ตัวอย่างเช่นชื่อของทางน้ำนั้นจะเรนเดอร์ไว้เหนือทางน้ำ ร้านค้าจะเรนเดอร์ไว้เหนืออาคาร อุโมงค์จะเรนเดอร์ไว้เหนืออาคาร และถนนเรนเดอร์ไว้เหนือสิ่งปกคลุมดินเป็นต้น
คำถามที่ยังเหลืออยู่ก็คือวัตถุภายในเลเยอร์เดียวกันมีการเรนเดอร์อย่างไร ในบางกรณีการชนประทะอาจถูกห้ามไม่ให้เกิดขึ้น และวัตถุที่อาจปกคลุมนั้นเรนเดอร์วัตถุจากเลเยอร์นั้นจะไม่ถูกเรนเดอร์ โดยมักเกิดขึ้นกับเมืองต่าง ๆ เช่นป้ายชื่อเมืองที่ใหญ่กว่าอาจบดบังการเรนเดอร์ของป้ายชื่อเมืองที่เล็กกว่า
พื้นที่สิ่งปกคลุมดินนั้นมีลำดับตามขนาดพื้นที่ โดยพื้นที่ที่เล็กกว่าจะได้รับการเรนเดอร์ภายหลัง และการชนกันนั้นจะอนุญาตให้เกิดขึ้น หมายความว่าสำหรับเลเยอร์ที่กำหนดไว้ พื้นที่ขนาดเล็กจะครอบคลุมพื้นที่ขนาดใหญ่กว่า
ตัวอย่างเช่น พื้นที่สวน leisure=park ขนาดเล็กจะเรนเดอร์ไว้เหนือพื้นที่อยู่อาศัย landuse=residential ที่ใหญ่กว่า
นอกจากนี้ยังมีเลเยอร์โอเวอร์เลย์แยกต่างหากซึ่งประกอบด้วยสัญลักษณ์ต้นไม้สำหรับพื้นที่ป่า เลเยอร์นี้จะถูกเรนเดอร์ทับพื้นที่ป่า
- พื้นที่ที่ถูกปกคลุมไปด้วยพื้นป่า landuse=forest ขนาดเล็ก และพื้นที่อยู่อาศัย landuse=residential ขนาดใหญ่
- พื้นที่ป่าจะเรนเดอร์เหนือที่อยู่อาศัย โดยภายหลังแล้วพื้นที่ป่าจะถูกเรนเดอร์ทับอีกที
- พื้นที่ที่ปกคลุมโดยป่า landuse=forest ขนาดใหญ่ และพื้นที่อยู่อาศัย landuse=residential ขนาดเล็ก
- พื้นที่อยู่อาศัยจะถูกเรนเดอร์ไว้เหนือป่า โดยภายหลังแล้วพื้นที่ป่าจะถูกเรนเดอร์ทับอีกที
ฐานข้อมูล
OpenStreetMap Carto ใช้ฐานข้อมูลมาตรฐาน PostgreSQL ด้วยส่วนขยายเชิงภูมิสารสนเทศ PostGIS และถูกเรียกว่า "gis" โดยมาจากฐานข้อมูล OSM แต่ไม่ได้บันทึกเซตข้อมูลทั้งหมด – แต่แค่บันทึกา่วนประกอบที่เกี่ยวกับการเรนเดอร์เท่านั้น โดยตั้งแต่รุ่น v4.0.0, OpenStreetMap Carto ได้ใช้ PostgreSQL hstore (ส่วนขยายและประเภทข้อมูล) และได้รับการประมวลผลล่วงหน้าด้วยภาษาลูอา GitHub โดยเครื่องมือ osm2pgsql
โครงสร้างของโค้ด
การกำหนดค่าโครงการทั่วไปรวมอยู่ใน project.mml GitHub (YAML) มีการกำหนด "เลเยอร์" ไว้ ซึ่งรวมถึงคำสั่ง SQL เป็นหลักในการเลือกวัตถุ ในขณะที่การจัดรูปแบบจริงจะทำในไฟล์ MSS หลายไฟล์
โค้ดถนนมีความซับซ้อนมากและสร้างขึ้นบางส่วนโดยสคริปต์ช่วยเหลือ
ไอคอนและลวดลาย
ไอคอนเป็นภาพเวกเตอร์ที่จัดเรียงตามพิกเซล (SVG) โดยทั่วไปจะใช้เมทริกซ์ขนาด 14 px แม้ว่าไอคอนส่วนใหญ่จะเป็นภาพขาวดำและสีที่แสดงจะกำหนดไว้ในไฟล์ MSS แต่ไอคอนบางตัวก็มีมากกว่าหนึ่งสี ในกรณีหลังนี้ สีจะกำหนดไว้ในไฟล์เวกเตอร์เอง อาจใช้แบบฮาล์ฟโทนก็ได้
ลวดลายบางอย่างทำในรูปแบบเวกเตอร์ด้วย แต่หากยังคงเป็นภาพแรสเตอร์ (PNG) ก็ตาม รูปแบบเหล่านั้นจะมาจากองค์ประกอบเวกเตอร์ และกระบวนการจะเป็นไปดังนี้ GitHub ดังนั้นจึงควรง่ายต่อการย้ายไปยังรูปแบบเวกเตอร์หากเป็นไปได้
แบบอักษร
หากเป็นไปได้ จะใช้แบบอักษร Noto โดยใช้ DejaVu Sans, Hanazono และ Unifont เป็นทางเลือกสำรอง
แหล่งข้อมูลภายนอก
รูปแบบนี้อาศัยไฟล์ข้อมูลภายนอกบางส่วนที่มาจาก Natural Earth และที่เก็บข้อมูล OSM ที่ผ่านการประมวลผลล่วงหน้า OpenStreetMapData สามารถอัปเดตได้ด้วยสคริปต์ Python (scripts/get-shapefiles.py GitHub) หรือทำได้ด้วยมือ
การเรนเดอร์แนวชายฝั่งบน openstreetmap.org มีคำอธิบายดังนี้: Coastline#Rendering in Standard tile layer on openstreetmap.org
ลิงค์ภายนอก
ทั่วไป:
- หัวข้อในฟอรั่ม OSM
- กิจกรรมโครงการปัจจุบัน GitHub
- OpenStreetMap Carto Tutorials – เอกสารที่ไม่เป็นทางการ (โดย Ircama)
- Docker things for openstreetmap carto GitHub – สภาพแวดล้อม Docker อิสระ (โดย OnkelTem)
- บทช่วยสอนเกี่ยวกับวิธีการเรนเดอร์บนพื้นผิวเส้นถนนบนแผนที่ GitHub (โดย Lukas Sommer)
- ไทล์ที่เรนเดอร์ไว้ล่วงหน้าด้วยการซูมต่ำ (โดย Paul Norman)
- ดู เวอร์ชันปัจจุบันที่เผยแพร่ github-carto GitHub และ carto-version รุ่นที่ใช้อยู่ปัจจุบันบน https://osm.org, ดูที่ git-chef line 95 (95 :revision => "vx.xx.x",)
ประวัติ:
- วิดีโอ Timelapse ของการเปลี่ยนแปลงใน osm-carto ระหว่างปีพ.ศ. 2555–2559 (โดย Michael Glanznig)
- แผ่นสไตล์ Mapnik รูปแบบ XML เก่าสำหรับรูปแบบ "ปกติ" ของ OpenStreetMap GitHub
- รูปแบบแผนที่แบบกำหนดเอง (1) - ปรับแต่งรูปแบบมาตรฐานของ OpenStreetmap สำหรับรูปแบบ XML เก่าก่อนปีพ.ศ. 2555 (โดย Volker Schatz)
โพสต์บล็อก:
- OpenStreetMap Carto Complexity (บล็อกของ Paul Norman, 2558)
- OpenStreetMap-Carto – a look back at the last year (บล็อกของ Christoph Hormann blog, 2560)
- OpenStreetMap-Carto – a look into the future (บล็อกของ Christoph Hormann blog, 2560)
- Adding a change to "OSM Carto" (Andy Townsend diary, 2560)
การพูดคุย:
- Andy Allan talks: SoTM US 2013, SoTM EU 2014, SoTM US 2015
- R. A. McCann talk on SoTM 2016 ("Converting a regular carto project to vector tiles: OSM-carto case study")
- Paul Norman talk on SoTM 2017
หมายเหตุ
|