Các thư viện để hiển thị bản đồ dựa trên vector trong trình duyệt


13

Có một thư viện JavaScript mã nguồn mở như Leaflet hay OpenLayers có thể được sử dụng trong một ứng dụng web hoặc di động và tải các bản đồ dựa trên vector thay vì hình ảnh không? Tôi chỉ cần thông tin đường và một số POI.

Thư viện duy nhất tôi tìm thấy là polymaps - nhưng tôi vẫn cần một máy chủ hoặc dịch vụ phục vụ dữ liệu SVG vector (tốt nhất là từ OpenStreetMap). Ngoài ra còn có dự án Android đẹp có tên Mapsforge nhưng tôi sẽ cần nó cho một ứng dụng web hoặc các thiết bị di động khác.

Câu trả lời:



10

Đối với chỉ vẽ các vectơ, Leaflet hoặc OpenLayers sẽ làm tốt. Không có gì mới ở đó.

Đối với bản đồ lát gạch vector (tức là độ phân giải / mức độ chi tiết khác nhau ở các mức thu phóng khác nhau), TileStache là một máy chủ đơn giản và tốt. Tôi đã được sử dụng với rất nhiều thử nghiệm với Polymaps (AFAIK, trình xem vectơ js làm việc đa mục đích duy nhất). Một số người đã sử dụng OpenLayers để thêm hỗ trợ vectơ lát gạch , nhưng AFAIK, nó đã không được tích hợp vào thân cây trong một năm, vì vậy có lẽ nó sẽ không được quan tâm trong tương lai gần.

Bản thân TileStache (máy chủ) đang hoạt động rất tốt. Tuy nhiên, tôi đã tìm thấy một số lỗi với Polymaps và vì nó không được cập nhật nữa (dự án bị bỏ rơi), tôi không thể thuyết phục bản thân sử dụng nó trong sản xuất (Tôi phải tự duy trì nó ... Tôi không thể biện minh cho nó bản thân tôi chưa.)

Giải pháp của tôi cho tôi là viết một trình kết xuất vector gốc OpenGL tùy chỉnh được sử dụng trong AmigoCloud . Trên thực tế, đó là cách tất cả các bản đồ được hiển thị trong dịch vụ của chúng tôi. Với mục đích đó, TileStache đã cung cấp khá tốt.

Bạn muốn xem Nhà cung cấp Vector TileStache . Để biết ví dụ về cách sử dụng nó, bạn có thể xem một bộ kiểm tra véc tơ rất cơ bản mà tôi đã viết .

Đáng buồn thay, tôi không nghĩ Leaflet có hỗ trợ cho các vectơ lát gạch.


Cảm ơn! Có một bản demo cá rô đơn giản trên web?
Karussell

Mật độ dân số polymaps sử dụng bộ đệm của nhà cung cấp vector được lát gạch (tức là không chạy máy chủ tilestache, mà chỉ là một bản sao của ouput sẽ trông như thế nào). Nhìn vào mã sẽ làm cho nó rõ ràng rằng đó là vectơ lát gạch polymaps.org/ex/population.html . Đáng buồn thay, các bản demo tilestache có sẵn trực tuyến không sử dụng nhà cung cấp vector. Tuy nhiên, nếu bạn chạy tilestache-server cục bộ và thay thế các url demo cho localhost của bạn bằng một nguồn dữ liệu vector (shapefile, postgis, v.v.), nó sẽ hoạt động. Msg ở đây để được giúp đỡ nếu cần.
Ragi Yaser Burhum

Tôi không đồng ý với câu trả lời này, đặc biệt là For just drawing vectors, Leaflet or OpenLayers will do just fine. Nothing new there.Điều này sẽ hoạt động nếu các vectơ được phủ, nhưng nếu toàn bộ bản đồ (tất cả các lớp cơ sở) được tổ chức dưới dạng vectơ thì sao?
Giser

@giser Đó là lý do tại sao tôi phân biệt giữa "chỉ vẽ vectơ" và "bản đồ lát gạch vector". Câu trả lời thứ hai là thuật ngữ tôi sử dụng "toàn bộ" bản đồ được tạo ra từ các vectơ thuần túy. Dưới đây là một ví dụ về một điều như vậy: bl.ocks.org/mbostock/5593150
Ragi Yaser Burhum

@RagiYaserBurhum: Tôi xin lỗi, tôi hiểu nhầm rồi.
Giser

10

Cập nhật: kể từ khi đăng bài này, Mapbox đã phát hành Mapbox GL JS , công cụ hiển thị sơ đồ nền vector dựa trên WebGL trong trình duyệt.

Tại thời điểm này, không có tùy chọn thành lập. Bản đồ sản xuất vectơ đầy đủ duy nhất hiện có là MapsGL của Google và điều đó rất hạn chế do hỗ trợ & hiệu suất của trình duyệt.

Gần nhất bạn sẽ có được với nguồn mở tại thời điểm này là Kothic.js và cuộn các ô của riêng bạn với tập lệnh của Kothic.


+1 này, thật tuyệt! đừng hiểu tại sao bạn lại bị hạ thấp!
Karussell

6

Nếu tôi hiểu chính xác câu hỏi của bạn thì cả OpenLayers và Leaflet sẽ tải / hiển thị dữ liệu vectơ.

Ví dụ

http://leafletjs.com/examples/geojson/

việc này tải tệp GeoJSON lên bản đồ tờ rơi sử dụng OSM qua CloudMade trong nền.

OpenLayers có thể hỗ trợ nhiều loại định dạng vector khác nhau, như KML

http://dev.openlayers.org/examples/dynamic-text-layer.html

Nếu bạn có nghĩa là bạn đang theo dõi một máy chủ để phục vụ dữ liệu vectơ trên bản đồ thì hãy xem MapServer, GeoServer và ESRI ArcGIS Server, tất cả sẽ phục vụ dữ liệu vectơ trên bản đồ của bạn dưới dạng Máy chủ tính năng web (WFS).


Ý tôi hơn là bản đồ là dữ liệu vectơ chứ không phải một số tính năng mà tôi tải lên bản đồ.
Karussell

phục vụ nhiều dữ liệu thông qua loại vectơ có thể treo hoặc thậm chí giết trình duyệt, vì có quá nhiều <svg>yếu tố, bạn nên ghi nhớ điều này
Krystian

@Krystian Đó là nếu bạn kết xuất bản đồ với SVG. Rõ ràng bạn có thể kết xuất nó với OpenGL / WebGL (như Google Maps thực hiện trên Android / iOS và trong các bản đồ javascript WebGL thử nghiệm).
Ragi Yaser Burhum

@RagiYaserBurhum yeah, tôi đã không nghĩ về điều đó, nhưng trong trường hợp cụ thể này, bạn không thể sử dụng webGL, vì giới hạn trong API ect ..
K603ian

1
OP đã không đề cập đến API ArcGIS vì vậy tôi không cho rằng (rất nhiều GIS có thể được thực hiện mà không cần ArcGIS). Có, tôi đồng ý rằng việc trộn ArcGIS JS với WebGL sẽ là một nỗi đau. Các vectơ lát gạch là mới - nhưng chúng có cơ hội tốt để trở thành tương lai. Có lẽ
Ragi Yaser Burhum

2

Tôi tìm thấy một dự án thú vị khác có tên GL-Solar dựa trên công nghệ webgl chứ không phải SVG hoặc canvas. Mặc dù nó đang trong giai đoạn phát triển ban đầu nhưng điều này có vẻ đầy hứa hẹn.

Ngoài ra MapCSS , Cartagend3.js nên được đề cập. d3.js được sử dụng trong trình soạn thảo osm trực tuyến iD . Ngoài ra còn có một bài viết trên blog về kết xuất tờ rơi và html5.

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.