Sự khác biệt giữa GeoJSON và TopoJSON


Câu trả lời:


147

Nếu bạn quan tâm đến kích thước tệp hoặc cấu trúc liên kết, hãy sử dụng TopoJSON. Nếu bạn không quan tâm, hãy sử dụng GeoJSON vì mục đích đơn giản.

Ưu điểm chính của TopoJSON là kích thước. Bằng cách loại bỏ sự dư thừa và sử dụng mã hóa tọa độ số nguyên có độ chính xác cố định hiệu quả hơn, các tệp TopoJSON thường có thứ tự độ lớn nhỏ hơn các tệp GeoJSON. Ưu điểm thứ hai của tệp TopoJSON là mã hóa cấu trúc liên kết có các ứng dụng hữu ích, chẳng hạn như đơn giản hóa bảo toàn cấu trúc liên kết (tương tự như MapShaper ) và tạo lưới tự động (như trong ranh giới trạng thái-trạng thái trong ví dụ này choropleth ).

Những lợi thế này đi kèm với cái giá phải trả: định dạng tệp phức tạp hơn. Ví dụ: trong JavaScript, bạn thường sử dụng thư viện máy khách TopoJSON để chuyển đổi TopoJSON thành GeoJSON để sử dụng với các công cụ tiêu chuẩn như d3.geoPath . (Trong Python, bạn có thể sử dụng topojson.py .) Ngoài ra, định dạng số nguyên của TopoJSON yêu cầu các tọa độ lượng tử hóa, có nghĩa là nó có thể gây ra lỗi làm tròn nếu bạn không cẩn thận. (Xem tài liệu cho topojson -q.)

Đối với thao tác phía máy chủ đối với các hình học không yêu cầu cấu trúc liên kết, thì GeoJSON có lẽ là lựa chọn đơn giản hơn. Ngược lại, nếu bạn cần cấu trúc liên kết hoặc muốn gửi hình học qua dây tới máy khách, hãy sử dụng TopoJSON.


2
Và ngay cả khi tôi nhớ đã đọc về "các đoạn đường được chia sẻ", tôi vẫn cho rằng "topo" là viết tắt của "địa hình", nhưng không phải vậy. Đây là một bài đọc hay về sự khác biệt giữa "cấu trúc liên kết" và "địa hình" (cái trước là nguồn gốc của "topo" trong topojson) - và tôi sẽ phải đọc bài viết của Mike ở đây về cấu trúc liên kết suy luận
The Red Pea

Tôi muốn sử dụng geobuf khác với các giải pháp kết hợp như toposjon khi truyền qua internet.
tibetty

9

TopoJSON lý tưởng cho các tính năng gọn gàng "gắn chặt" với nhau, chẳng hạn như các khu vực hành chính, nhưng không giúp ích cho các dữ liệu lộn xộn hoặc hữu cơ hơn. Nếu dữ liệu của bạn chỉ đơn giản là điểm, thì TopoJSON không giúp được gì cả.


22
Ngay cả khi không có cấu trúc liên kết được chia sẻ, mã hóa số nguyên có độ chính xác cố định của TopoJSON có thể hiệu quả hơn đáng kể so với dấu chấm động của GeoJSON.
mbostock

16
Thật. Tôi đã sai. Tôi muốn xóa câu trả lời của mình, nhưng chúng tôi sẽ mất nhận xét có giá trị của bạn!
sgillies

Ha, cảm ơn. :) Tôi đã gửi một câu trả lời riêng bao gồm các cân nhắc bổ sung.
mbostock

3

Nó phụ thuộc vào nhiều cân nhắc. Trong số đó có những điều sau:

1) Bản chất (mô hình dữ liệu) của đối tượng địa lý hoặc các tính năng bạn muốn đại diện 2) Bất kỳ thuộc tính nào bạn muốn có liên quan đến các tính năng đó 3) Cách bạn muốn các tính năng này hoạt động trên trang (tĩnh so với động)

Tuy nhiên, đây là một câu hỏi khó trả lời trong phần tóm tắt. Về một số chi tiết cụ thể, nếu bạn có phạm vi đa giác liền kề hoặc một tình huống khác mà các đối tượng địa lý đang chia sẻ ranh giới, mô hình của topojson cho phép bạn khai thác sự dư thừa và yếu tố đó vào mô hình.

Đọc tài liệu, phân tích các ví dụ (ví dụ: bl.ocks.org), sau đó lấy một số dữ liệu và biểu diễn nó trong cả geojson và topojson và tạo hình ảnh trực quan của riêng bạn.


Cảm ơn wsvekla. Tôi đã làm điều đó - trên thực tế, tôi đã tìm thấy ý kiến ​​của bạn trên bl.ocks.org ( bl.ocks.org/wsvekla/4533258 bl.ocks.org/4348435 ) nhưng không dễ dàng để google. Tuy nhiên, như bạn đã chỉ ra, có rất nhiều cân nhắc và tôi đang cố gắng khám phá các so sánh song song để tìm hiểu điều này.
Luke

2
Hai khối này tham chiếu đến cùng một shapefile gốc: bl.ocks.org/4485308bl.ocks.org/4348435 . TopoJSON thực sự bắt đầu chìm đắm khi cuối cùng tôi đã hiểu cách tôi có thể đại diện cho nhiều đối tượng địa lý (ranh giới quốc gia, sở và thành phố) với cùng một dữ liệu trong cùng một tệp (bạn không thể làm điều đó với geojson). Điều này được thực hiện thông qua hàm bộ lọc: function (a, b) {return a.id! == b.id;}). Hãy cố gắng hiểu điều đó, và topojson sẽ bắt đầu có ý nghĩa. Để tham khảo mã tốt hơn và chủ nghĩa tối giản trần trụi, hãy xem khối của Mike: bl.ocks.org/4108203
wsvekla
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.