Th:OpenStreetMap Carto

From OpenStreetMap Wiki
Jump to navigation Jump to search
 Open bug tracker
OpenStreetMap Carto
Standard, osm-carto
กรุงเทพมหานครชั้นใน
กรุงเทพมหานครชั้นใน
authorHelp translate this into Thai!: Andy Allan และผู้มีส่วนร่วมอื่น
Slippy map: openstreetmap.org
Usage policy: operations.osmfoundation.org/policies/tiles/
Tiles license: ODbL 1.0
Style license: CC0 1.0
versionHelp translate this into Thai!: 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

ลิงค์ภายนอก

ทั่วไป:

ประวัติ:

โพสต์บล็อก:

การพูดคุย:

หมายเหตุ