前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Openlayers3中统计图的实现

Openlayers3中统计图的实现

作者头像
lzugis
发布2018-10-23 13:34:13
6000
发布2018-10-23 13:34:13
举报

概述:

在前文中讲到了在Arcgis for js中统计图的实现,在本文,讲述在Openlayers3中结合highcharts实现统计图。

实现:

在Openlayers3中实现统计图比较方便,通过ol.Overlay即可。首先,了解下Overlay。在OL3的借口文档中,Overlay的描述如下:

An element to be displayed over the map and attached to a single map location。

大概意思就是一个有空间位置的可以在地图上展示的要素。

关键代码:

代码语言:javascript
复制
			$("#addchart").on("click",function(){
				for(var i=0;i<data.length;i++){
					var d = data[i];
					var pt = [d.x, d.y];
					var domid = "chart"+i;
					$("#chart").append("<div id='"+domid+"'></div>");
					var chart = new ol.Overlay({
						position: pt,
						positioning: ol.OverlayPositioning.CENTER_CENTER,
						element: document.getElementById(domid)
					});
					map.addOverlay(chart);
					addChart(domid,d,100);
				}
			});
代码语言:javascript
复制
		function addChart(domid,data,size){
			$('#'+domid).highcharts({
				chart: {
					backgroundColor: 'rgba(255, 255, 255, 0)',
					plotBorderColor: null,
					plotBackgroundColor: null,
					plotBackgroundImage: null,
					plotBorderWidth: null,
					plotShadow: false,
					width: size,
					height: size
				},
				tooltip: {
					pointFormat: '<b>{point.percentage:.1f}%</b>'
				},
				credits:{
					enabled:false
				},
				title: {
					text: ''
				},
				plotOptions:{
					pie: {
						dataLabels: {
							enabled: false
						}
					}
				},
				series: [{
					type: 'pie',
					name: data.name,
					data: data.data
				}]
			});
		}

上述代码运行后的效果如下:

上述示例的完整代码如下:

代码语言:javascript
复制
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
	<title>Ol3 wms</title>
	<link rel="stylesheet" type="text/css" href="../../../plugin/ol3/css/ol.css"/>
	<style type="text/css">
		body, #map {
			border: 0px;
			margin: 0px;
			padding: 0px;
			width: 100%;
			height: 100%;
			font-size: 13px;
		}
		.tool{
			position: absolute;
			top:10pt;
			right: 10pt;
			padding: 5px;
			background: #fff;
			border: 1px solid #ff5500;
			z-index: 100;
		}
	</style>
	<script type="text/javascript" src="../../../plugin/ol3/build/ol-debug.js"></script>
	<script type="text/javascript" src="../../../plugin/jquery/jquery-1.8.3.js"></script>
	<script src="../../../plugin/highcharts/highcharts.js"></script>
	<script type="text/javascript">
		var data = [{name:"乌鲁木齐",x:87.5758285931,y:43.7822116460,data:[
			{
				name: '男',
				y: 40.0,
				color:"#5ab1ef"
			},{
				name: '女',
				y: 60.0,
				color:"#d87a80"
			}
		]},
			{name:"拉萨",x:91.1629975040,y:29.7104204643,data:[
				{
					name: '男',
					y: 45.0,
					color:"#5ab1ef"
				},{
					name: '女',
					y: 55.0,
					color:"#d87a80"
				}
			]},
			{name:"北京",x:116.4575803581078,y:40.04054437977018,data:[
				{
					name: '男',
					y: 35.0,
					color:"#5ab1ef"
				},{
					name: '女',
					y: 65.0,
					color:"#d87a80"
				}
			]},
			{name:"兰州",x:103.584297498,y:36.1190864503,data:[
				{
					name: '男',
					y: 44.0,
					color:"#5ab1ef"
				},{
					name: '女',
					y: 56.0,
					color:"#d87a80"
				}
			]}];
		var map;
		function init(){
			var format = 'image/png';
			var bounds = [73.4510046356223, 18.1632471876417,
				134.976797646506, 53.5319431522236];
			var tiled = new ol.layer.Tile({
				visible: true,
				source: new ol.source.TileWMS({
					url: 'http://localhost:8088/geoserver/lzugis/wms',
					params: {'FORMAT': format,
						'VERSION': '1.1.1',
						tiled: true,
						LAYERS: 'lzugis:province',
						STYLES: ''
					}
				})
			});
			var projection = new ol.proj.Projection({
				code: 'EPSG:4326',
				units: 'degrees'
			});
			map = new ol.Map({
				controls: ol.control.defaults({
					attribution: false
				}),
				target: 'map',
				layers: [
					tiled
				],
				view: new ol.View({
					projection: projection
				})
			});
			map.getView().fitExtent(bounds, map.getSize());
			var view =map.getView();
			$("#addchart").on("click",function(){
				for(var i=0;i<data.length;i++){
					var d = data[i];
					var pt = [d.x, d.y];
					var domid = "chart"+i;
					$("#chart").append("<div id='"+domid+"'></div>");
					var chart = new ol.Overlay({
						position: pt,
						positioning: ol.OverlayPositioning.CENTER_CENTER,
						element: document.getElementById(domid)
					});
					map.addOverlay(chart);
					addChart(domid,d,100);
				}
			});
		}
		function addChart(domid,data,size){
			$('#'+domid).highcharts({
				chart: {
					backgroundColor: 'rgba(255, 255, 255, 0)',
					plotBorderColor: null,
					plotBackgroundColor: null,
					plotBackgroundImage: null,
					plotBorderWidth: null,
					plotShadow: false,
					width: size,
					height: size
				},
				tooltip: {
					pointFormat: '<b>{point.percentage:.1f}%</b>'
				},
				credits:{
					enabled:false
				},
				title: {
					text: ''
				},
				plotOptions:{
					pie: {
						dataLabels: {
							enabled: false
						}
					}
				},
				series: [{
					type: 'pie',
					name: data.name,
					data: data.data
				}]
			});
		}
	</script>
</head>
<body onLoad="init()">
<div id="map">
	<div class="tool">
		<button id="addchart">添加统计图</button>
	</div>
	<div style="display: none;" id="chart">
	</div>
</div>
</body>
</html>
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016年03月18日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档