Prospettiva 3D su mappe in Leaflet, CartoDB?


12

Esistono librerie JS là fuori che renderebbero normali le mappe piatte (come Leaflet) in una mappa prospettica come questa, sul web:

inserisci qui la descrizione dell'immagine

Inoltre, qualcuno ha visto qualcosa che potesse trasformare i dati CartoDB in una rappresentazione 3D, come questa?


1
Non sono sicuro dell'integrazione con cartodb, ma di recente ho visto questo post sulla creazione di mappe 3D da QGIS utilizzando la libreria three.js . Potresti dare un'occhiata a quello.
RyanK Dalton,

2
Vedi anche: Three.js + leaflet = mappe 3D? su StackOverflow
RyanKDalton


Risposte:


7

Forse potresti usare Osmbuildings . È una libreria JavaScript per visualizzare OpenStreetMaps (o GeoJSON personalizzato) costruendo la geometria in una prospettiva 3D.

OSMbuildingJS

Utilizza direttamente i dati OpenStreetMaps. Aggiungi il metodo 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)

Oppure puoi caricare il tuo GeoJSON. Basta cambiare il metodo loadData () in setData (geojson):

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

I tuoi dati devono avere una proprietà altezza e puoi cambiare dinamicamente il colore del muro e del tetto:

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

E persino cambiare la prospettiva dell'ombra impostando il giorno:

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

La versione corrente di OSM Buildings (0.2.2b) non supporta il setDatametodo, ma setfunziona! Diventa così:var osmb = new OSMBuildings(map).setData(geoJSON);
bradypus

4

Questo è uno dei principali casi d'uso per ViziCities (città 3D nel browser fornite da OpenStreetMap), sebbene i livelli di dati non funzionino ancora. Forse qualcosa da considerare per il futuro: https://github.com/robhawkes/vizicities

Disclaimer: sono lo sviluppatore di ViziCities


1
Bel progetto! Inoltre, mentre è abbastanza ovvio che questo è un progetto a cui sei affiliato, potresti voler renderlo un po 'più chiaro (anche se è open source).
blah238,

Grazie, ma sto cercando una soluzione non WebGL.
Knutole

1
Nessun problema, volevo solo darti un avvertimento.
Robin Hawkes,

Questa versione ha i grafici o qualche versione migliorata?
joker21

2

È possibile utilizzare OSM2world per passare i dati 2D da OpenStreetMap (map.osm) a oggetti 3D (map.obj), quindi utilizzare un altro convertitore ( convert_obj_three.py ) per convertirli in un modello JSON threejs (map.js), quindi utilizzare in una scena trejs.

Puoi vedere come qui:

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


Molte grazie. Ma questo richiede WebGL, giusto?
Knutole,

1
Threejs è una libreria / api javascript che sfrutta WebGL. Ma nel codice devi solo includere due librerie: three.js e OrbitControls.js (questo serve per gestire l'orbita della telecamera).
sigon

1
e sì, threejs funziona solo nei browser supportati da WebGL.
sigon,



Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.