ความแตกต่างระหว่าง GeoJSON และ TopoJSON


91

GeoJSON และ TopoJSON แตกต่างกันอย่างไรและเมื่อใดที่ฉันจะใช้อันอื่น

รายละเอียดของ TopoJSON บน GitHubหมายถึงไฟล์ TopoJSON มีขนาดเล็ก 80% แล้วทำไมไม่ใช้ TopoJSON ตลอดเวลาล่ะ?

คำตอบ:


150

หากคุณสนใจเกี่ยวกับขนาดไฟล์หรือโทโพโลยีให้ใช้ TopoJSON หากคุณไม่สนใจอย่างใดอย่างหนึ่งให้ใช้ GeoJSON เพื่อความเรียบง่าย

ข้อได้เปรียบหลักของ TopoJSON คือขนาด ด้วยการกำจัดความซ้ำซ้อนและใช้การเข้ารหัสพิกัดจำนวนเต็มที่มีความแม่นยำคงที่ที่มีประสิทธิภาพมากขึ้นไฟล์ TopoJSON มักมีลำดับขนาดที่เล็กกว่าไฟล์ GeoJSON ข้อได้เปรียบรองของไฟล์ TopoJSON คือการเข้ารหัสโทโพโลยีมีแอปพลิเคชั่นที่มีประโยชน์เช่นการลดความซับซ้อนของโทโพโลยี (คล้ายกับMapShaper ) และการสร้างตาข่ายอัตโนมัติ (เช่นเดียวกับขอบเขตของรัฐในตัวอย่างนี้ )

ข้อดีเหล่านี้มีค่าใช้จ่าย: รูปแบบไฟล์ที่ซับซ้อนมากขึ้น ใน JavaScript ตัวอย่างเช่นคุณต้องการโดยทั่วไปแล้วจะใช้ห้องสมุดลูกค้า TopoJSONการแปลง TopoJSON เพื่อ GeoJSON สำหรับใช้กับเครื่องมือมาตรฐานเช่นd3.geoPath (ใน Python คุณสามารถใช้topojson.pyได้) นอกจากนี้รูปแบบจำนวนเต็มของ TopoJSON ต้องการพิกัดเชิงปริมาณซึ่งหมายความว่าจะทำให้เกิดข้อผิดพลาดในการปัดเศษได้หากคุณไม่ระวัง (ดูเอกสารประกอบสำหรับtopojson -q)

สำหรับการจัดการรูปทรงเรขาคณิตทางฝั่งเซิร์ฟเวอร์ที่ไม่ต้องการโทโพโลยี GeoJSON น่าจะเป็นตัวเลือกที่ง่ายกว่า มิฉะนั้นหากคุณต้องการโทโพโลยีหรือต้องการส่งรูปทรงเรขาคณิตผ่านสายไปยังไคลเอนต์ให้ใช้ TopoJSON


2
และแม้ว่าฉันจำได้ว่าอ่านเกี่ยวกับ "ส่วนของเส้นที่ใช้ร่วมกัน" แต่ฉันก็ยังคิดว่า "โทโป" หมายถึง "ภูมิประเทศ" ซึ่งมันไม่ได้อ่าน นี่เป็นข้อมูลที่น่าอ่านเกี่ยวกับความแตกต่างระหว่าง "โทโพโลยี" และ "ภูมิประเทศ" (เดิมคือต้นกำเนิดของ "โทโป" ใน topojson) - และฉันจะต้องอ่านบทความของ Mike ที่นี่เกี่ยวกับการอนุมานโทโพโลยี
The Red Pea

ฉันต้องการใช้geobufนอกเหนือจากโซลูชันไฮบริดเช่น toposjon เมื่อเชื่อมต่ออินเทอร์เน็ต
ทิเบต

10

TopoJSON เหมาะอย่างยิ่งสำหรับคุณลักษณะที่เป็นระเบียบเรียบร้อยซึ่ง "เชื่อมต่อ" ซึ่งกันและกันเช่นพื้นที่การดูแลระบบ แต่ไม่ได้ช่วยให้มีข้อมูลที่ยุ่งเหยิงหรืออินทรีย์มากขึ้น หากข้อมูลของคุณเป็นเพียงจุดเดียว TopoJSON ก็ไม่ช่วยอะไรเลย


23
แม้ว่าจะไม่มีโทโพโลยีที่ใช้ร่วมกัน แต่การเข้ารหัสจำนวนเต็มที่มีความแม่นยำคงที่ของ TopoJSON ก็มีประสิทธิภาพมากกว่าจุดลอยตัวของ GeoJSON อย่างมาก
mbostock

17
จริง. ฉันผิด. ฉันจะลบคำตอบ แต่เราจะสูญเสียความคิดเห็นอันมีค่าของคุณ!
sgillies

ฮ่าขอบคุณ :) ฉันได้ส่งคำตอบแยกต่างหากซึ่งรวมถึงการพิจารณาเพิ่มเติม
mbostock

3

ขึ้นอยู่กับการพิจารณาหลายประการ ในหมู่พวกเขามีดังต่อไปนี้:

1) ลักษณะ (แบบจำลองข้อมูล) ของคุณลักษณะหรือคุณลักษณะที่คุณต้องการเป็นตัวแทน 2) คุณลักษณะใด ๆ ที่คุณต้องการให้เชื่อมโยงกับคุณลักษณะเหล่านั้น 3) คุณต้องการให้คุณลักษณะเหล่านี้ทำงานอย่างไรบนหน้าเว็บ (แบบคงที่เทียบกับ ไดนามิก)

อย่างไรก็ตามนี่เป็นคำถามที่ยากที่จะตอบในบทคัดย่อ เกี่ยวกับข้อมูลจำเพาะบางอย่างหากคุณมีความครอบคลุมของรูปหลายเหลี่ยมที่อยู่ติดกันหรือสถานการณ์อื่นที่คุณลักษณะต่างๆกำลังแบ่งปันขอบเขตโมเดลของ topojson จะช่วยให้คุณใช้ประโยชน์จากความซ้ำซ้อนและปัจจัยที่เข้ามาในโมเดลได้

อ่านเอกสารแยกตัวอย่าง (เช่น bl.ocks.org) จากนั้นรับข้อมูลและนำเสนอทั้งใน geojson และ topojson และสร้างภาพของคุณเอง


ขอบคุณ wsvekla ฉันทำอย่างนั้น - ฉันพบส่วนสำคัญของคุณใน bl.ocks.org ในความเป็นจริง ( bl.ocks.org/wsvekla/4533258 bl.ocks.org/4348435 ) แต่ Google ก็ไม่ง่าย อย่างไรก็ตามในขณะที่คุณชี้ให้เห็นมีข้อควรพิจารณามากมายและฉันกำลังพยายามสำรวจการเปรียบเทียบแบบเคียงข้างกันเพื่อเรียนรู้สิ่งนี้
Luke

2
ทั้งสองบล็อกอ้างอิง shapefile ต้นฉบับเดียวกัน: bl.ocks.org/4485308และbl.ocks.org/4348435 TopoJSON เริ่มจมดิ่งลงไปเมื่อในที่สุดฉันก็เข้าใจว่าฉันสามารถแสดงคุณสมบัติหลายอย่าง (ขอบเขตระดับชาติแผนกและเทศบาล) ด้วยข้อมูลเดียวกันในไฟล์เดียวกัน (คุณไม่สามารถทำได้ด้วย geojson) สิ่งนี้ทำได้โดยใช้ฟังก์ชันตัวกรอง: ฟังก์ชัน (a, b) {return a.id! == b.id;}) พยายามเข้าใจสิ่งนั้นและ topojson จะเริ่มมีเหตุผล สำหรับการอ้างอิงโค้ดที่ดีขึ้นและความเรียบง่ายแบบเปลือยโปรดดูบล็อกของ Mike: bl.ocks.org/4108203
wsvekla
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.