3D перспектива на картах в Leaflet, CartoDB?


12

Существует ли какая-либо библиотека JS, которая бы отображала обычные плоские карты (например, Leaflet) в перспективную карту, подобную этой, в Интернете:

введите описание изображения здесь

Кроме того, кто-нибудь видел что-нибудь, что могло бы превратить данные CartoDB в трехмерное представление, как это?


1
Я не уверен насчет интеграции с cartodb, но недавно я увидел этот пост о создании 3D-карт из QGIS с использованием библиотеки three.js . Вы можете взглянуть на это.
RyanKDalton

2
Смотрите также: Three.js + leaflet = 3D карты? на StackOverflow
RyanKDalton


1
Может быть, вы найдете эту визуализацию полезной: pluto.cartodb.com/viz/bf4dacd4-003c-11e3-aaf8-a9294e572fad/…
javisantana

Ответы:


7

Может быть, вы могли бы использовать Osmbuildings . Это библиотека JavaScript для визуализации OpenStreetMaps (или пользовательского GeoJSON) построения геометрии в трехмерной перспективе.

OSMbuildingJS

Он использует данные OpenStreetMaps напрямую. Просто добавьте метод loadData ():

var map = new L.Map('map').setView([52.50440, 13.33522], 17);
var osmb = new OSMBuildings(map).loadData();
L.control.layers({}, { Buildings:osmb }).addTo(map); // add to layer switcher (optional)

Или вы можете загрузить свой собственный GeoJSON. Просто измените метод loadData () на setData (geojson):

var osmb = new OSMBuildings(map).setData(geoJSON);

Ваши данные должны иметь свойство height, и вы можете динамически изменять цвет стен и крыши:

osmb.setStyle({ 
     wallColor:'rgba(100, 100, 250, 0.701961)', 
     roofColor:'rgb(220, 220, 50)', 
     shadows:true 
});

И даже измените перспективу тени, установив дневное время:

osmb.setDate(new Date(2014, 3, 24, 13, 0));

Текущая версия OSM Buildings (0.2.2b) не поддерживает setDataметод, но setработает! Это становится:var osmb = new OSMBuildings(map).setData(geoJSON);
брадип

4

Это один из основных вариантов использования ViziCities (3D-города в браузере на базе OpenStreetMap), хотя слои данных в настоящее время еще не работают. Возможно, стоит подумать о будущем: https://github.com/robhawkes/vizicities

Отказ от ответственности: я разработчик ViziCities


1
Классный проект! Кроме того, хотя совершенно очевидно, что это проект, к которому вы присоединились, вы можете просто сделать это немного более понятным (даже если это открытый код).
blah238

Спасибо, но я ищу решение не из WebGL.
Кнутоль

1
Не беспокойся, просто хотел тебя предупредить.
Робин Хокс

Есть ли в этой версии сюжеты или улучшенная версия?
joker21

2

Вы можете использовать OSM2world для передачи 2D-данных из OpenStreetMap (map.osm) в 3D-объекты (map.obj), затем использовать другой конвертер ( convert_obj_three.py ) для преобразования их в модель JSON Threejs (map.js) и затем использовать это в сцене трижды.

Вы можете увидеть, как здесь:

https://www.youtube.com/watch?v=S6LbKH6NnZU


Большое спасибо. Но для этого нужен WebGL, верно?
Кнутоль

1
Threejs - это библиотека javascript / api, использующая преимущества WebGL. Но в коде вы должны включить только две библиотеки: three.js и OrbitControls.js (это для управления орбитой камеры).
Sigon

1
и да, threejs работает только в браузерах, поддерживаемых WebGL.
Сигон

1

Самым близким, что я видел, была работа Майка Бостока .

У него действительно классная карта с наклонной проекцией .

Но нет ничего, что облегчает. D3 помогает мне в создании прогнозов. Вы можете делать удивительные вещи, если вы работаете над этим, хотя.


ОК, как Майк это делает? Спасибо за совет
кнутоль


1

http://osm2world.org/ работает без WebGL, но использует Java вместо js.

Предназначен для вывода данных зданий Openstreetmap, он также должен быть адаптирован для других 3D-данных.

В результате получается скользкая карта, похожая на буклет: http://maps.osm2world.org/


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.