Echarts GL 3d地图初体验,浙江天地图作为底图mapbox

网上看到一张图效果非常好,斜45度角模式的3d地图,用在大屏模式上非常有科技感,高端大气上档次。

于是,研究了下怎么做,发现Echarts GL能做出相似的描边3D效果,地图可以加载浙江天地图(如下图)。

下面更新代码: 

<!DOCTYPE html>
<html>
<head>
    <title>3D</title>
    <meta http-equiv="content-type" content="text/html; charset=utf-8">
    <script src="echarts.min.js"></script>
    <script src="http://echarts.baidu.com/resource/echarts-gl-latest/dist/echarts-gl.js"></script>
    
	<!-- <script src="geoJson.js"></script> -->
	<script src="xihuGeoJson.js"></script>
	
	<!-- <script src='https://api.mapbox.com/mapbox-gl-js/v0.38.0/mapbox-gl.js'></script> -->
<link href='https://api.mapbox.com/mapbox-gl-js/v0.38.0/mapbox-gl.css' rel='stylesheet' />
<script src="http://map.zjditu.cn/vmap/static/mapbox-gl.js"></script>

    <style type="text/css">
    #main,body,html {
        width:100%;
        /*border:2px solid green;*/
        height: 100%;
    }
</style>

</head>

<body>
    <div id="main"></div>
    <script type="text/javascript">
	mapboxgl.accessToken = 'pk.eyJ1IjoiZG9uZ2hhb3JhbiIsImEiOiJjandhZm9xNjcwMnZtNGJwYXkybzVhdG85In0.8DJQHNvOZusu1SoRXAyhxg';
    var mapboxgl_style = 'http://map.zjditu.cn/vtiles/styles/tdt/dark.json';
    var mapboxgl_center = [120.07507324218751,30.172233581542972];
	var city=[{name:'北山街道',value:[120.154838003,30.258482691,1000,1]},
			{name:'西溪街道',value:[120.144639266,30.284229016,1000,4]},
			{name:'翠苑街道',value:[120.11448985,30.27882795,1000,5]},
			{name:'古荡街道',value:[120.109018946,30.267039801,1000,6]},
			{name:'西湖街道',value:[120.112460758,30.245933384,1000,12]},
			{name:'留下街道',value:[120.097317827,30.251029793,1000,7]},
			{name:'转塘街道',value:[120.071572043,30.203773692,1000,8]},
			{name:'蒋村街道',value:[120.058503755,30.302117763,1000,9]},
			{name:'灵隐街道',value:[120.124163036,30.244626798,1000,0]},
			{name:'文新街道',value:[120.103150815,30.276086614,1000,11]},
			{name:'三墩镇',value:[120.097619169,30.300190135,1000,13]},
			{name:'双浦镇',value:[120.136229388,30.100187806,1000,14]}]
		
	var maxSize4Pin = 100, minSize4Pin = 20;
	
    var regionsData = geojson.features.map(function(feature) {
        return {
            name: feature.properties.name,
            value: parseFloat(feature.properties.center.split(',')[1].slice(0,11)),
            height: feature.properties.height||700,
            //coords: feature.geometry.coordinates,
			itemStyle: {
				opacity: 1,
				borderWidth: 2,
				borderColor: "#a7e4e6", //省市边界线
				color:feature.properties.color
			}
        };
    });
	echarts.registerMap('buildings', geojson);
	var chart = echarts.init(document.getElementById('main'));
	var min=0,max=300;
	var option = {
		mapbox: {
			center: mapboxgl_center,
			zoom: 11,
			pitch: 50,
			bearing: -10,
			style: mapboxgl_style,
			shading: 'realistic',
			light: {
				main: {
					intensity: 0.5,
					shadow: false,
					//alpha: 10,
					//beta: -10
				},
				ambient: {
					intensity: 0.2
				},
				ambientCubemap: {
					//texture: './img_mapbox/sunlight.hdr',
					exposure: 1,
					diffuseIntensity: 0.5,
					specularIntensity: 2
				}
			},
			zlevel: 1
		},
		tooltip:{
			formatter:function(params){
			console.log(params.seriesName);
				params
				var res='<div><p>区县:'+params.name +'</p></div>' ;
					res+='<p>'+'值'+':'+params.value+'</p>';
				 return res;
			},
		},
		//backgroundColor:'#00bcd459',
		visualMap: {
			show: false,
			min: 30.1,
			max: 30.5,
			inRange: {
			   color: ['#0066ff', '#4575b4', '#74add1', '#abd9e9', '#e0f3f8', '#ffffbf', '#fee090', '#fdae61', '#f46d43', '#d73027', '#a50026']
			}
		},
		series: [{
			name:'buildings',
			type: 'map3D',
			coordinateSystem: 'mapbox',
			map: 'buildings',
			data:regionsData,
			shading: 'lambert',
			regionHeight: 8,
			label: {
				show: true,
				textStyle: {
					color: '#fff', //地图初始化区域字体颜色
					fontSize: 12,
					opacity: 1,
					backgroundColor: 'rgba(0,0,0,0.4)'
					//backgroundColor: 'rgba(53,171,199,0)'
				},
			},
			itemStyle: {
				opacity: 0.5,
				borderWidth: 2,
				borderColor: "#a7e4e6", //省市边界线
			}
		},
        {
            name: '点',
            type: 'scatter3D',
            coordinateSystem: 'mapbox',
            symbol: 'pin',
            symbolSize: 30,
			<!-- function (val) { -->
                <!-- var a = (maxSize4Pin - minSize4Pin) / (max - min); -->
                <!-- var b = minSize4Pin - a*min; -->
                <!-- b = maxSize4Pin - a*max; -->
                <!-- return a*val[2]+b; -->
            <!-- }, -->
            
            label: {
				formatter: function (params) {
                    var ret = params.value[3];
					console.log(ret);
                    return ret;
                },
				position:'top',//
				distance:-10,
				show: true,
				textStyle: {
					color: '#fff',
					fontSize: 9,
				}
                
            },
            itemStyle: {
                normal: {
                    color: '#F62157', //标志颜色
                }
            },
            zlevel: 10,
            data: city,
        }]
	}
	chart.setOption(option);
	chart.on('click', function (params) {
		var cout=params.data.name;

		//window.open('https://www.baidu.com');
		console.log(params);
	});
	</script>
</body>
</html>

 

  • 4
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 24
    评论
你想了解关于 Mapbox GLEcharts 迁徙图的相关内容吗?Mapbox GL 是一个开源的地图绘制库,可以用来创建交互式的地图应用程序。Echarts 是一个基于 JavaScript 的数据可视化库,可以用来展示各种类型的图表,包括迁徙图。 要使用 Mapbox GLEcharts 创建迁徙图,你可以按照以下步骤进行操作: 1. 首先,引入 Mapbox GLEcharts 的相关库文件到你的项目中。你可以从官方网站或使用包管理工具如npm或yarn来安装它们。 2. 创建一个包含地图容器的 HTML 元素,在这个容器中将显示迁徙图。你可以使用 Mapbox GL 提供的 API 来初始化地图和设置样式。 3. 准备迁徙数据。迁徙数据通常包含起始地点、目标地点和迁徙人数等信息。你可以将这些数据存储在一个 JSON 文件中,或者通过网络请求从后端获取。 4. 在 JavaScript 代码中,使用 Echarts 的 API 创建一个迁徙图实例。通过配置项,你可以设置迁徙图的样式、数据源和交互行为等。 5. 将迁徙图实例绑定到地图容器中,这样迁徙图就会在地图上进行渲染。 以下是一个简单的示例代码,演示了如何使用 Mapbox GLEcharts 创建迁徙图: ```html <!DOCTYPE html> <html> <head> <title>Mapbox GL + Echarts 迁徙图</title> <meta charset="utf-8" /> <style> #map { width: 800px; height: 600px; } </style> </head> <body> <div id="map"></div> <script src="path/to/mapbox-gl.js"></script> <script src="path/to/echarts.js"></script> <script> // 初始化地图 mapboxgl.accessToken = 'your-access-token'; var map = new mapboxgl.Map({ container: 'map', style: 'mapbox://styles/mapbox/streets-v11', center: [lon, lat], zoom: 10 }); // 准备迁徙数据 var migrationData = [ { from: [fromLon1, fromLat1], to: [toLon1, toLat1], count: 100 }, { from: [fromLon2, fromLat2], to: [toLon2, toLat2], count: 200 }, // ... ]; // 创建迁徙图实例 var chartDom = document.getElementById('map'); var myChart = echarts.init(chartDom); var option = { series: [{ type: 'lines', data: migrationData.map(function (item) { return { coords: [item.from, item.to], value: item.count }; }), // 其他配置项... }] }; myChart.setOption(option); // 将迁徙图绑定到地图容器中 map.on('load', function () { var canvas = myChart.getCanvas(); var container = map.getCanvasContainer(); container.appendChild(canvas); }); </script> </body> </html> ``` 请注意,上述代码中的一些参数如 access token、经纬度等需要根据你的实际情况进行设置。 希望这个回答能够帮到你!如果有任何问题,请随时提问。
评论 24
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值