在Leafto,CartoDB中使用3D透视图?


12

在网络上是否有任何JS库可以将普通的平面图(如Leaflet)渲染成这样的透视图:

在此处输入图片说明

另外,有人看到过可以将CartoDB数据转换为3D表示的东西吗?


1
我不确定是否要与cartodb集成,但是最近我看到了这篇有关使用three.js库从QGIS制作3D地图的文章。您可能需要看一下。
RyanKDalton 2014年

2
另请参阅:Three.js +传单= 3D地图?在StackOverflow上
RyanKDalton 2014年


Answers:


7

也许您可以使用Osmbuildings。它是一个JavaScript库,用于将OpenStreetMaps(或自定义的GeoJSON)可视化为3D透视图。

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)不支持setDatamethod,但是set可以使用!它变成:var osmb = new OSMBuildings(map).setData(geoJSON);
布雷迪普斯

4

这是ViziCities(由OpenStreetMap驱动的浏览器中的3D城市)的主要用例之一,尽管数据层目前尚不可用。也许将来要考虑的事情:https : //github.com/robhawkes/vizicities

免责声明:我是ViziCities的开发人员


1
很棒的项目!另外,虽然很明显这是您所隶属的项目,但您可能希望使其更加清晰(即使它是开源的)。
blah238

谢谢,但是我正在寻找非WebGL解决方案。
knutole 2014年

1
不用担心,只是想给您一个提示。
罗宾·霍克斯2014年

这个版本有剧情或任何改进的版本吗?
joker21年

2

您可以使用OSM2world将2D数据从OpenStreetMap(map.osm)传递到3D对象(map.obj),然后使用另一个转换器(convert_obj_three.py)将其转换为Threejs JSON模型(map.js),然后使用在Threejs场景中。

您可以在这里看到:

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


非常感谢。但这需要WebGL,对吗?
knutole 2014年

1
Threejs是利用WebGL的javascript库/ api。但是在代码中,您仅需包含两个库:three.js和OrbitControls.js(这是管理摄像机轨道的库)。
sigon

1
是的,Threejs仅在WebGL支持的浏览器中有效。
sigon



By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.