Perspectiva 3D em mapas no Leaflet, CartoDB?


12

Existe alguma biblioteca JS por aí que renderize mapas planos e normais (como o Leaflet) em um mapa em perspectiva como este, na Web:

insira a descrição da imagem aqui

Além disso, alguém viu algo que pudesse transformar dados do CartoDB em representação 3D, assim?


1
Não tenho certeza sobre a integração com o cartodb, mas recentemente vi este post sobre a criação de mapas 3D do QGIS usando a biblioteca three.js . Você pode dar uma olhada nisso.
RyanKDalton

2
Veja também: Three.js + folheto = mapas 3D? No StackOverflow
RyanKDalton 18/03/2014


1
Talvez você encontrar esta visualização útil: pluto.cartodb.com/viz/bf4dacd4-003c-11e3-aaf8-a9294e572fad/...
javisantana

Respostas:


7

Talvez você possa usar Osmbuildings . É uma biblioteca JavaScript para visualizar o OpenStreetMaps (ou GeoJSON personalizado) criando geometria em uma perspectiva 3D.

OSMbuildingJS

Ele usa os dados do OpenStreetMaps diretamente. Basta adicionar o método 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)

Ou você pode carregar seu próprio GeoJSON. Apenas mude o método loadData () para setData (geojson):

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

Seus dados precisam ter uma propriedade height e você pode alterar a cor da parede e do telhado dinamicamente:

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

E até mude a perspectiva da sombra definindo o dia:

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

A versão atual do OSM Buildings (0.2.2b) não suporta setDatamétodo, mas setfunciona! É tjus torna-se:var osmb = new OSMBuildings(map).setData(geoJSON);
bradypus

4

Este é um dos principais casos de uso do ViziCities (cidades 3D no navegador desenvolvido pelo OpenStreetMap), embora as camadas de dados ainda não estejam funcionando no momento. Talvez algo a considerar para o futuro: https://github.com/robhawkes/vizicities

Disclaimer: Eu sou o desenvolvedor do ViziCities


1
Projeto legal! Além disso, embora seja bastante óbvio que este é um projeto ao qual você é afiliado, convém deixar isso um pouco mais claro (mesmo que seja de código aberto).
blah238

Obrigado, mas estou procurando uma solução não WebGL.
knutole

1
Não se preocupe, só queria lhe dar um aviso.
Robin Hawkes

Esta versão possui plotagens ou alguma versão aprimorada?
Joker21

2

Você pode usar o OSM2world para transmitir dados 2D do OpenStreetMap (map.osm) para objetos 3D (map.obj) e, em seguida, usar outro conversor ( convert_obj_three.py ) para convertê-lo em um modelo JSON threejs (map.js) e, em seguida, usar em uma cena de três garotos.

Você pode ver como aqui:

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


Muito obrigado. Mas isso requer WebGL, certo?
knutole

1
Threejs é uma biblioteca javascript / API que tira proveito do WebGL. Mas no código você só precisa incluir duas bibliotecas: three.js e OrbitControls.js (é para gerenciar a órbita da câmera).
21414 sigon

1
e sim, threejs funciona apenas em navegadores suportados pelo WebGL.
21414 sigon



Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.