- tinyworldmap คือแผนที่โลกสำหรับเว็บแอปที่เน้นออฟไลน์เป็นหลักและทำงานได้ดีในสภาพแบนด์วิดท์ต่ำ โดยออกแบบมาให้ใช้ร่วมกับ Leaflet
- รองรับทุกระดับการซูม และเวอร์ชันที่สมบูรณ์ที่สุดมีขนาดเพียง gzip 450KB โดยมีการโปรไฟล์และทดสอบการเรนเดอร์ฝั่งไคลเอนต์ให้ไม่มีความหน่วงที่สังเกตได้แม้บนโทรศัพท์สเปกต่ำอายุ 10 ปี
- แผนที่พื้นฐานจะแสดง เมือง 10,000 แห่งที่มีประชากรมากที่สุด ที่ถูกเพิ่มไว้ใน OpenStreetMap และ ณ เวลาที่เขียนครอบคลุมเมืองและชุมชนที่มีประชากรตั้งแต่ 48,000 คนขึ้นไป
- มีสองวิธีการใช้งาน คือใช้เป็น แผนที่ฐาน แทน OpenStreetMap tiles หรือใช้เป็น แผนที่ fallback ที่เมื่อออฟไลน์จะเปลี่ยนคำขอ OSM tiles ไปเป็น tiles ที่สร้างในเครื่อง
- ข้อมูลแผนที่ใช้สัญญาอนุญาต ODBL เช่นเดียวกับ OpenStreetMap และต้องมีการแสดงเครดิต OpenStreetMap และ tinyworldmap ในส่วนอย่างเช่นฟุตเตอร์ของ Leaflet
วัตถุประสงค์และขอบเขตของ tinyworldmap
- tinyworldmap คือแผนที่โลกสำหรับเว็บแอปที่เน้นออฟไลน์เป็นหลักและทำงานได้ดีในสภาพแบนด์วิดท์ต่ำ
- ออกแบบมาให้ใช้ร่วมกับ Leaflet และรองรับทุกระดับการซูม
- เวอร์ชันที่สมบูรณ์ที่สุดมีขนาด gzip 450KB และเมื่อคลายบีบอัดมีขนาด 1.1MB
- การเรนเดอร์ฝั่งไคลเอนต์ถูกโปรไฟล์และทดสอบอย่างกว้างขวางบนโทรศัพท์สเปกต่ำอายุ 10 ปี และไม่พบความหน่วงที่ผู้ใช้สังเกตได้
- มีเดโมให้ดูที่ Nightly demo, Stable demo, v3 announcement
ข้อมูลแผนที่พื้นฐาน
- ในการตั้งค่าเริ่มต้น จะแสดง เมือง 10,000 แห่งที่มีประชากรมากที่สุด ที่ถูกเพิ่มไว้ใน OpenStreetMap
- ณ เวลาที่เขียน ช่วงนี้ครอบคลุมเมืองและชุมชนทั้งหมดที่มีประชากร 48,000 คนขึ้นไป
สองวิธีการใช้งานใน Leaflet
สไตล์แผนที่และแผนที่แบบปรับแต่ง
- ตัวสร้างรองรับออปชัน
render เพื่อเปลี่ยนรูปลักษณ์ของแผนที่
- ออปชัน
style ของแต่ละเลเยอร์จะถูกนำไปใช้กับ Canvas CanvasRenderingContext2D
- ตัวอย่างเช่น สามารถเปลี่ยนสไตล์ของเลเยอร์
state_borders ได้ด้วยการกำหนด fillStyle
let render = {
state_borders: {
style: {fillStyle: '#f00'}
}
}
new L.GridLayer.TinyWorld({maxZoom: 19, render}).addTo(map)
- หากองค์กรต้องการแผนที่แบบปรับแต่ง เช่น แผนที่ถนน แผนที่เมือง แผนที่ภาษาอื่น หรือแผนที่เนื้อหาเฉพาะที่มีข้อมูลจาก OSM หรือไม่ใช่ OSM สามารถขอใบเสนอราคาได้ที่
business@tinyworldmap.com
ตัวเลือกไฟล์แผนที่ที่เล็กลง
-
เวอร์ชันไม่มีเส้นขอบ
tiny-world-cities-10000.js(on) มีข้อมูลจากเวอร์ชันเต็มโดยตัดเส้นขอบรัฐ เส้นขอบประเทศ และแนวชายฝั่งออก
- เวอร์ชันนี้ลดขนาดลงได้ 300KB ในแบบ gzip และ 825KB เมื่อคลายบีบอัด
- ข้อดีของเวอร์ชันไม่มีเส้นขอบคือข้อมูลที่รวมอยู่ทั้งหมดมีความละเอียดสูง
- เส้นขอบประเทศในเวอร์ชันเต็มไม่แม่นยำในระดับซูมสูง ดังนั้นเมื่อวาง shape overlay ให้ตรงกับเส้นขอบประเทศหรือแนวชายฝั่ง อาจดูไม่เป็นธรรมชาติ
- ในกรณีดังกล่าว เวอร์ชันไม่มีเส้นขอบมักดูดีกว่า
-
เวอร์ชันไม่มีป้ายชื่อเมือง
- มีไฟล์สองแบบที่ไม่มีป้ายชื่อเมือง
tiny-world-borders.js(on): ตัดเส้นขอบรัฐออก
tiny-world-nocities.js(on): คงเส้นขอบรัฐไว้
- ป้ายชื่อเมืองใช้พื้นที่ 410KB เมื่อคลายบีบอัด และ 172KB เมื่อบีบอัด
-
เวอร์ชันที่ลดจำนวนเมือง
- ไฟล์ที่มีป้ายชื่อเมืองยังมีเวอร์ชันสำหรับ 2,000 และ 4,000 เมืองด้วย
- เพียงเปลี่ยน
10000 ในชื่อไฟล์เป็น 2000 หรือ 4000
- | จำนวนเมืองที่รวม | เกณฑ์ประชากร |
- | --- | --- |
- | 10,000 | มากกว่า 48,000 คน |
- | 4,000 | มากกว่า 137,000 คน |
- | 2,000 | มากกว่า 287,000 คน |
สัญญาอนุญาตและการแสดงเครดิต
- ข้อมูล tinyworldmap ใช้สัญญาอนุญาต ODBL เช่นเดียวกับข้อมูล OpenStreetMap
- ODBL กำหนดให้ต้องมีการแสดงเครดิต
- หากตั้งค่าตามวิธีที่แนะนำ ฟุตเตอร์ของ Leaflet ควรมีเครดิตของทั้ง OpenStreetMap และ tinyworldmap รวมอยู่แล้ว
- หากไม่เป็นเช่นนั้น ต้องเพิ่มเครดิตของ OpenStreetMap และ tinyworldmap แยกต่างหาก
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
ชอบไอเดียนี้ เพราะช่วยแก้ปัญหาที่ต้องซูมออกไกลมากแล้วรอให้เซิร์ฟเวอร์เรนเดอร์ไทล์ระดับทวีปที่เพิ่งร้องขอ
แต่ก็ยังไม่แน่ใจว่า use case แบบไหนที่ผู้ใช้รู้ตำแหน่งสัมพัทธ์ของ West Bloomfield Township กับ Waterford Charter Township ชานเมือง Detroit ได้ แต่ไม่รู้ว่าอยู่รัฐไหน หรือไม่รู้ด้วยซ้ำว่า Great Lakes มีอยู่
อยากให้ใช้ข้อมูลกับแนวชายฝั่งมากกว่านี้เยอะ ๆ และใช้น้อยลงมากกับการแบ่งย่อยเขตมหานคร
มันบังข้อมูลอื่น ๆ ที่เป็นไปได้มากเกินไป
เจ๋งดี แต่ รายละเอียดแนวชายฝั่ง ต่ำเกินไป หมู่บ้านบางแห่งในอังกฤษลอยอยู่กลางทะเล และในทางกลับกัน Greenland กับ Northern Canada ก็กินจุดยอดไปหมด
ดูเหมือนว่าจะคำนึงถึงระดับรายละเอียดตามโปรเจกชัน Mercator แล้ว แต่คงดีถ้าลดความสำคัญของพื้นที่ที่แทบไม่มีคนอาศัยอยู่
ฐานข้อมูล SQLite ของ QRank ก็เคยขึ้น HN มาก่อน
[1] https://qrank.wmcloud.org/
[2] https://github.com/hikeratlas/qrank
จังหวัดหนึ่งของ Netherlands ถูกแสดงเหมือนเป็นเกาะที่ขาดจากแผ่นดินหลักของประเทศ ทั้งที่จริงไม่ใช่แบบนั้น แต่ในจังหวัดนั้นกลับรู้ชื่อเมืองตั้งห้าเมือง และบางเมืองแทบจะทับกัน
ส่วนการใส่ Afsluitdijk เข้ามา โดยส่วนตัวคิดว่าเป็นรายละเอียดที่ไม่จำเป็น แต่ก็เข้าใจว่าการแยกด้วยโปรแกรมว่าควรวาดผืนดินอะไร กับอะไรเป็นแค่โครงสร้างพื้นฐานทางทะเลนั้นทำได้ยาก
ควรเปิดตั๋วใน issue tracker แต่ตอนนี้ไม่ได้ล็อกอินบนมือถือ เลยคอมเมนต์ใน HN น่าจะดีที่สุด ถ้าใครรู้สึกคล้ายกัน จะใช้คอมเมนต์นี้เป็นเหตุผลเสนอการปรับสัดส่วน เพิ่มระยะห่างขั้นต่ำระหว่างเมือง หรือย่อไฟล์ทั้งหมดก็ได้
French Polynesia ไม่มีอยู่บนแผนที่ด้วยซ้ำ
เหตุผลที่ตอนแรกไม่ได้ทำแบบนั้น เพราะโทรศัพท์รุ่นเก่า โดยเฉพาะ Firefox for Android อาจแครชเมื่อวาดหลายเหลี่ยมจำนวนมาก หลังจากนั้นได้ปรับกระบวนการวาดให้เหมาะสมขึ้นแล้ว แต่ก็ยังต้องระวัง
[1] https://tinyworldmap.com/beta.html
เรื่องนี้ควรถูกจับได้ในการ ควบคุมคุณภาพ ขั้นพื้นฐาน
เคยทำอะไรคล้าย ๆ กันไว้ เน้นออฟไลน์ก่อน ขนาดเล็กมาก และเป็นเวกเตอร์ โดยโฟกัสที่ การทำให้รองรับหลายภาษา/ภูมิภาค
มีให้ในทุกภาษาของ UN แต่ Spanish หลุดไปเพราะลืมเฉย ๆ ซึ่งน่าอาย เพราะน่าจะทำได้ภายในไม่กี่ชั่วโมง
ชื่อประเทศและเมืองใช้ชื่อทางการที่จดทะเบียนกับ UN ดังนั้นชื่อย่อทางการของ UK คือ “United Kingdom of Great Britain and Northern Ireland”
https://map.ache.one/en
การวาดแผนที่เบา ๆ และจัดการ internationalization ค่อนข้างง่าย เพราะมีแหล่งข้อมูลสาธารณะและไลบรารีหลายตัว
ส่วนที่ยากจริง ๆ คือ นิยามเชิงการปกครอง ล้วน ๆ ถ้ามีข้อมูลที่เชื่อมกับประเทศส่วนใหญ่ ก็จะมีจุดที่ไม่ตรงกับแหล่งข้อมูลแผนที่เสมอ และสุดท้ายต้องทำแผนที่แบบปรับเอง
ไม่มีฉันทามติว่า “ประเทศ” คืออะไร Western Sahara เป็นประเทศอย่างเป็นทางการ แต่ในทางปฏิบัติ Morocco ยึดครองต่อเนื่องมา ส่วน Somalia มี Somaliland กับ Puntland ที่ดำเนินการเหมือนรัฐอิสระโดยพฤตินัย แต่ไม่ได้รับการรับรองอย่างเป็นทางการ Greenland, Niue ฯลฯ อยู่กึ่งกลางระหว่างนั้น
จากประสบการณ์ที่เคยทำในระดับประเทศ มันเป็นกระบวนการทำมือที่มี dirty hack ปนอยู่ และส่วนที่ยากที่สุดคือการทดสอบว่าได้ปรับให้ถูกต้องแล้วหรือยัง โดยเฉพาะ ระดับการ generalize ที่เหมาะสม และภาพที่ผู้คนคาดหวังจากแผนที่ของพื้นที่ตนเอง
อยากรู้ว่ามองว่าความพยายามในการปรับปรุงแผนที่นี้ครั้งใหญ่คุ้มค่าหรือไม่
ดาวอยู่ที่ Dar Es Salaam แต่ป้ายชื่อเป็น Dodoma ซึ่ง Dodoma เป็นเมืองหลวงจริง แต่ตั้งอยู่ค่อนไปทางกลางประเทศมากกว่า
น่ารักดี ก่อนหน้านี้เคยทำสิ่งที่ไม่เหมือนกันเสียทีเดียวแต่คล้ายกันไว้
https://web.archive.org/web/20020611095429/http://www.cs.man.ac.uk/~hancockd/CityZen/index.html
มีเส้นตรง 20,000 เส้น สถานที่ 3,350 แห่ง รวมทั้งตัวดูแผนที่และควิซทั้งหมดแล้วมีขนาด 162KB
ขอบคุณสำหรับฟีดแบ็ก ขออธิบายเบื้องหลังการเลือกนี้: จนกระทั่งไม่นานมานี้ จุดโฟกัสหลักของโปรเจกต์นี้ไม่ใช่รูปทรงของประเทศ
เวอร์ชันที่ไม่มีพรมแดน ซึ่งอยู่ใน README มานาน เป็นเวอร์ชันเดียวที่มี และไม่ได้คิดว่าจะเพิ่มทั้งโลกเข้าไปได้ แต่ปรากฏว่าทำได้
ได้ปล่อย nightly version ที่ตัดฟยอร์ดออก และใส่รายละเอียดในที่อื่นมากขึ้น รวมถึงเกาะที่มีคนขอกันมาก โดยรวมแล้วความละเอียดก็สูงขึ้นด้วย
เหตุผลที่เดิมไม่ได้ทำแบบนั้นคือโทรศัพท์รุ่นเก่า โดยเฉพาะ Firefox for Android อาจแครชตอนวาดรูปหลายเหลี่ยมจำนวนมากได้ หลังจากนั้นได้ปรับปรุงขั้นตอนการวาดให้เหมาะสมขึ้นแล้ว แต่ก็ยังต้องระวัง
[1] https://tinyworldmap.com/beta.html
ยังไม่แน่ใจว่า เมือง 10,000 อันดับแรกตามจำนวนประชากร เป็นตัวกรองที่ดีที่สุดหรือไม่
วิธีนี้จะให้ความสำคัญกับเมืองในประเทศใหญ่ ๆ ก่อน และมีโอกาสสูงที่เมืองส่วนใหญ่ของประเทศเล็ก ๆ จะหลุดไป
ควรมีตัวกรองเสริมที่ใส่เมืองอันดับต้น ๆ X เมืองของแต่ละประเทศด้วย แบบนั้นน่าจะครอบคลุมเมืองสำคัญของประเทศเล็ก ๆ ได้
เกณฑ์อย่างเมืองหลวงของประเทศ เมืองหลวงของภูมิภาค เมืองระดับโลก และความเป็นศูนย์กลางในภูมิภาค อาจมีประโยชน์ในการเสริมเงื่อนไขพื้นฐาน
คิดว่า นักภูมิศาสตร์และนักทำแผนที่ น่าจะให้คำแนะนำที่เป็นประโยชน์กว่าในประเด็นนี้
น่าสนใจที่เมื่อเลือก นิคมตั้งถิ่นฐาน 10,000 แห่ง ที่ใหญ่ที่สุดในโลก จะลงไปถึงระดับประชากร 48,000 คน
ยังตัดสินใจอยู่ว่าตัวเลขนี้น่าประหลาดใจหรือไม่
แม้เพิ่มเป็น 200 อันดับ ก็ยังเกิน 100,000 คนอยู่ดี Daly City, CA ซึ่งอยู่ลำดับ #333 ตาม Wikipedia มีประชากร 100,007 คน: <https://en.wikipedia.org/wiki/List_of_United_States_cities_b...>
การกระจายขนาดแบบนี้โดยทั่วไปใกล้เคียงเส้นตรงบนกราฟ log-log เหมือนกรณีการสเกลอื่น ๆ มากมาย
ในจีน ต้องไปถึงอันดับที่ 106 ก่อนจึงจะเจอเมืองที่มีประชากรต่ำกว่า 1 ล้านคน ส่วนสหรัฐฯ มีเมืองแบบนั้นเพียง 9 เมือง
อินเดีย เพิ่งตรวจสอบดู พบว่ามีเมืองที่ประชากรเกิน 1 ล้านคน 46 เมือง เมืองอันดับ 100 คือ Malegaon มี 471,000 คน และเมืองอันดับ 300 คือ Aurangabad ก็ยังเกิน 100,000 คน
อย่างไรก็ตาม “เมือง” เป็นนิยามที่ค่อนข้างตามอำเภอใจมาก เมืองบางแห่งที่ใหญ่ที่สุดในโลก หากเทียบตามเกณฑ์ของประเทศอื่น อาจเป็นเขตมหานคร หรือแม้แต่เทียบได้กับรัฐหรือมณฑล
เมืองที่ใหญ่ที่สุดตามพื้นที่กลับมีประชากรน้อยมาก Sermersooq ใน Greenland มีประชากร 24,148 คน พื้นที่ 575,300km² ใหญ่กว่า Rhode Island ประมาณ 144 เท่า และในบรรดารัฐของสหรัฐฯ มีเพียง Texas กับ Alaska เท่านั้นที่ใหญ่กว่า โดย Alaska ก็ใหญ่กว่าแค่ราว 12%
ภูมิศาสตร์เมือง เป็นสาขาที่ซับซ้อน จึงมักเปรียบเทียบหลายสเกลและหลายคำนิยามร่วมกัน เช่น เขตสถิติมหานคร พื้นที่เมืองต่อเนื่อง และจำนวนประชากร เพื่อช่วยลดความตามอำเภอใจของขอบเขตทางการเมือง และสะท้อนจำนวนประชากรรวมกับอิทธิพลทางเศรษฐกิจได้ดีกว่า
ค่อนข้างน่าทึ่งที่ขนาดไฟล์อยู่แค่นี้ ทั้งที่พรมแดนหยาบขนาดนี้
ดูเหมือนว่าขนาดข้อมูลรวมจะยังต่ำกว่าจุดสมดุลระหว่างประโยชน์ใช้สอยกับขนาดไฟล์อยู่มาก เช่น ต่อให้ใหญ่ขึ้นสองเท่า พรมแดนก็คงไม่ขรุขระขนาดนี้
จากคำอธิบายว่า “มีข้อมูลทั้งหมดของเวอร์ชันเต็ม ยกเว้นพรมแดนและแนวชายฝั่ง ซึ่งทำให้ขนาดลดลง 200KB” แปลว่าประมาณ 29% เป็นข้อมูลพรมแดนและชายฝั่ง ส่วน 71% เป็นชื่อเมืองและตำแหน่ง
ส่วนตัวคิดว่าน่าจะตัดเมืองออกได้หลายเมือง โดยเฉพาะเมืองที่ซ้อนทับกัน เพราะจะมองเห็นได้ก็ต่อเมื่อซูมเข้าไปมากพอจนเห็นพื้นดินสีเทาและชื่อเมืองอยู่แล้ว ดังนั้นเอาพื้นที่นั้นไปทำให้แนวชายฝั่งแม่นยำขึ้นน่าจะดีกว่า
ก็ไม่แน่ใจเหมือนกันว่าตำแหน่งบนแผนที่โลกทั่วไปจำเป็นบ่อยแค่ไหน เช่น บนเว็บไซต์ของจุดสนใจที่กำลังดูอยู่ แผนที่ขนาดเล็กที่มีทางด่วนใกล้เคียงและเส้นทางขนส่งสาธารณะสำหรับเดินทางไปที่นั่น อาจจำเป็นบ่อยกว่าหรือไม่
ถ้าทำเวอร์ชันที่แบ่งทั้งโลกออกเป็นหน่วยละไม่กี่ km² ก็น่าจะใส่รายละเอียดที่มีประโยชน์ได้พอสมควรแม้มีขนาดเพียงหนึ่งในสิบ แผนที่โลกแบบ low-poly ทั้งใบก็คงมีกรณีใช้อย่างการติดตามสถานีอวกาศนานาชาติ แต่ดูเหมือนจะพบได้น้อยกว่ามาก
แม้ประชากรจะน้อยกว่า 40,000 คน แต่ เมืองหลวง ควรถูกรวมไว้เสมอ และควรทำเครื่องหมายดอกจันไว้ในรูปแบบใดรูปแบบหนึ่ง
ยอดเยี่ยมจริง ๆ ประทับใจที่โหลดบนโทรศัพท์ได้เร็วขนาดนี้
ไอเดียการบีบอัดข้อมูลเชิงพื้นที่เป็น Paths ดีมาก
ถ้าต้องการหลีกเลี่ยงไลเซนส์ ODbL การใช้ข้อมูล Natural Earth แทน OSM ก็น่าจะดี
ถ้ามีเครื่องมือสำหรับแปลงข้อมูลเชิงพื้นที่เป็น Paths รวมมาด้วยก็คงดีมาก