Бібліотеки для відображення векторних карт у браузері


13

Чи існує бібліотека JavaScript з відкритим кодом, наприклад, Leaflet або OpenLayers, яку можна використовувати в Інтернеті чи мобільному додатку та завантажувати векторні карти замість зображень? Мені потрібна лише інформація про дорогу та деякі POI.

Єдиною бібліотекою, яку я знайшов, були полімапи, але все ж мені знадобиться сервер або служба, яка обслуговує векторні SVG-дані (бажано від OpenStreetMap). Також є хороший Android-проект під назвою Mapsforge, але мені це знадобиться для веб-додатків чи інших мобільних пристроїв.

Відповіді:



10

Для простого малювання векторів, Leaflet або OpenLayers стануть чудово. Нічого нового там немає.

Для векторних плиткових карт (тобто різних дозволів / рівнів деталізації при різних рівнях збільшення) TileStache - простий і хороший сервер. Я використовував безліч експериментів із полімапами (AFAIK, єдиний загальнодоступний переглядач кахельних векторів загального призначення). Деякі люди використовували OpenLayers для додавання підтримки кахельних векторів , однак AFAIK він не був інтегрований до магістралі протягом року, тому, мабуть, не буде найближчим часом через відсутність інтересу.

Сам TileStache (сервер) працює дуже добре. Тим не менш, я знайшов кілька помилок з Polymaps, і оскільки він більше не оновлюється (покинутий проект), я не можу переконати себе використовувати його у виробництві (я повинен був би підтримувати його сам ... Я не можу виправдати це я ще тільки.)

Моїм рішенням для мене було написання користувальницького вітчизняного рендерінгу OpenGL, який використовується в AmigoCloud . Насправді саме так всі карти надаються в нашому сервісі. З цією метою TileStache поставив досить добре.

Ви хочете подивитися на провайдера TileStache Vector . Для прикладів того, як ним користуватися, ви можете подивитися дуже базовий векторний тестовий набір, який я написав .

На жаль, я не думаю, що Leaflet підтримує кахельні вектори.


Спасибі! Чи є в Інтернеті проста демонстраційна програма?
Каруссел

Щільність населення в полімапах використовує кеш-пам'ять провайдера вектора (тобто не працює сервер tilestache, а лише копію того, як виглядатиме вихід). Якщо дивитися на код, слід зрозуміти, що це векторний кахельний polymaps.org/ex/population.html . На жаль, демонстраційні демо-версії, доступні в Інтернеті, не використовують провайдера векторів. Тим не менш, якщо ви запустите tilestache-сервер локально і заміните демонстраційні URL-адреси для вашого localhost на налаштований векторний джерело даних (shapefile, postgis тощо), він буде працювати. Msg тут для допомоги, якщо буде потреба.
Рагі Ясер Бурхум

Я не згоден з цією відповіддю, особливо з цим. For just drawing vectors, Leaflet or OpenLayers will do just fine. Nothing new there.Це спрацює, якщо вектори будуть накладені, але як щодо того, якщо вся карта (весь базовий шар) організована як вектори?
giser

@giser Тому я розрізняю "просто малювання векторів" та "векторні кахельні карти". Друга відповідь - це термін, в якому я використовував "цілі" карти, зроблені з чисто векторів. Ось приклад такого: bl.ocks.org/mbostock/5593150
Ragi Yaser Burhum

@RagiYaserBurhum: Вибачте, я неправильно зрозумів це.
giser

10

Оновлення: з моменту публікації цього пакета Mapbox випустив Mapbox GL JS , який здійснює візуалізацію векторних базових карт на веб-основі в веб-переглядачі.

На даний момент немає встановленого варіанту. Єдина повністю векторна карта у виробництві - це MapsGL Google, і це дуже обмежено через підтримку та ефективність роботи браузера.

Найближчий з відкритим кодом на даний момент - Kothic.js і прокат власної плитки за сценарієм Kothic.


+1 ей, це круто! не зрозумій, чому ти не звернувся до уваги!
Каруссел

6

Якщо я правильно розумію ваше запитання, то і OpenLayers, і Leaflet завантажуватимуть / показуватимуть векторні дані.

Наприклад

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

це завантажує файл GeoJSON на карту листівки, яка використовує OSM через CloudMade у фоновому режимі.

OpenLayers, ймовірно, підтримує більше різних типів векторних форматів, як KML

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

Якщо ви маєте на увазі, що ви хочете, щоб сервер подавав векторні дані на карту, тоді подивіться на MapServer, GeoServer та ESRI ArcGIS Server, які всі будуть вести серверні дані на вашу карту як сервер веб-функцій (WFS).


Я більше маю на увазі саму карту як векторні дані, а не деякі функції, які я завантажую на карту.
Каруссел

що подає багато даних через векторний тип, можна повісити або навіть вбити браузер, оскільки занадто багато <svg>елементів, ви повинні пам’ятати про це
Кристіян

@Krystian Тобто якщо ви візуалізуєте карту за допомогою SVG. Зрозуміло, що ви можете їх відтворити за допомогою OpenGL / WebGL (як це робить Карти Google на Android / iOS та на експериментальних картах javascript JavaScript).
Рагі Ясер Бурхум

@RagiYaserBurhum Так, я не думав про це, але все-таки в цьому конкретному випадку ви не можете використовувати webGL через обмеження в API-програмах ..
Krystian

1
ОП не згадує ArcGIS API, тому я не припускав, що (багато GIS можна зробити без ArcGIS). Так, я погоджуюся, що змішування ArcGIS JS з WebGL було б болем. Черепичні вектори є новими - але вони мають хороші шанси бути майбутнім. Можливо
Ragi Yaser Burhum

2

Я знайшов ще один цікавий проект під назвою GL-Solar, який базується на технології webgl, а не на SVG чи полотні. Хоча це вже в ранньому розвитку, це виглядає перспективно.

Також слід згадати MapCSS , Cartagen та d3.js. d3.js використовується в iD- редакторі онлайн-осмів . Існує також публікація в блозі про відображення листівки та html5.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.