zoukankan      html  css  js  c++  java
  • OpenLayer4与mapV结合蜂巢图效果

    在这里mapV是一款数据可视化的软件,数据的展示的效果灰常炫酷,但是问题来了,mapV是百度出的,是基于百度地图api做的,百度地图api是不开源的,说到是不是感觉很绝望,如果想做到mapV和OpenLayer结合,我们可以超图的一款api基于openlayer开发的api,刚好该api也结合mapV,我们可以间接结合二者。

    来张图:

    一、js文件引入

        <link rel="stylesheet" href="https://openlayers.org/en/v4.6.5/css/ol.css" type="text/css">
        <script src="https://openlayers.org/en/v4.6.5/build/ol.js" type="text/javascript"></script>
        <script src="http://mapv.baidu.com/build/mapv.min.js"></script>
        <link href="../script/leaflet/Supermapopenlayers/iclient9-openlayers.css" rel="stylesheet" />
        <script src="../script/leaflet/Supermapopenlayers/iclient9-openlayers.js"></script>

    二、关于mapV声明以及数据添加(核心)

            var randomCount = 300;
            var data = [];
            var citys = ["北京", "天津", "上海", "重庆", "石家庄", "太原", "呼和浩特", "哈尔滨", "长春", "沈阳", "济南", "南京", "合肥", "杭州", "南昌", "福州", "郑州", "武汉", "长沙", "广州", "南宁", "西安", "银川", "兰州", "西宁", "乌鲁木齐", "成都", "贵阳", "昆明", "拉萨", "海口"];
            // 构造数据
            for (var i = 0; i < 300; i++) {
                var cityCenter = mapv.utilCityCenter.getCenterByCityName(citys[parseInt(Math.random() * citys.length)]);
                data.push({
                    geometry: {
                        type: 'Point',
                        coordinates: ol.proj.transform([cityCenter.lng - 2 + Math.random() * 4, cityCenter.lat - 2 + Math.random() * 4], 'EPSG:4326', 'EPSG:3857')
                    },
                    count: 30 * Math.random()
                });
            }      
            
            var dataSet = new mapv.DataSet(data);
            //参数设置
            var mapvOptions = {
                fillStyle: 'rgba(55, 50, 250, 0.8)',
                shadowColor: 'rgba(255, 250, 50, 1)',
                shadowBlur: 20,
                max: 100,
                size: 50,
                label: {
                    show: true,
                    fillStyle: 'white'
                },
                globalAlpha: 0.5,
                gradient: { 0.25: "rgb(0,0,255)", 0.55: "rgb(0,255,0)", 0.85: "yellow", 1.0: "rgb(255,0,0)" },
                draw: 'honeycomb'
            };
            var options = {
                map: map,
                dataSet: dataSet,
                mapvOptions: mapvOptions
            };

    三、全部源码

    <!DOCTYPE html>
    <html lang="en-US">
    <head>
        <meta charset="UTF-8">
    
        <!--<script type="text/javascript" include="mapv" src="../script/leaflet/Supermapopenlayers/include-openlayers.js"></script>-->
        <title></title>
        <link rel="stylesheet" href="https://openlayers.org/en/v4.6.5/css/ol.css" type="text/css">
        <script src="https://openlayers.org/en/v4.6.5/build/ol.js" type="text/javascript"></script>
        <script src="http://mapv.baidu.com/build/mapv.min.js"></script>
        <link href="../script/leaflet/Supermapopenlayers/iclient9-openlayers.css" rel="stylesheet" />
        <script src="../script/leaflet/Supermapopenlayers/iclient9-openlayers.js"></script>
        <!--<script src="../script/leaflet/Supermapopenlayers/include-web.js"></script>-->
    </head>
    <body style=" margin: 0;overflow: hidden;background: #fff; 100%;height:100%">
        <div id="map" style=" 100%;height:100%"></div>
        <script type="text/javascript">
    
            function getTdtLayer(lyr) {
                var url = "http://t{0-7}.tianditu.com/DataServer?T=" + lyr + "&X={x}&Y={y}&L={z}";
                var layer = new ol.layer.Tile({
                    source: new ol.source.XYZ({
                        url: url
                    })
                });
                return layer;
            }
            var vec_c = getTdtLayer("vec_w");
            var cva_c = getTdtLayer("cva_w");
            var map = new ol.Map({
                target: 'map',
                layers: [vec_c, cva_c],
                view: new ol.View({
                    center: ol.proj.transform([105.403119, 38.028658], 'EPSG:4326', 'EPSG:3857'),
                    zoom: 4,
                    projection: 'EPSG:3857'
                })
            });
            var randomCount = 300;
            var data = [];
            var citys = ["北京", "天津", "上海", "重庆", "石家庄", "太原", "呼和浩特", "哈尔滨", "长春", "沈阳", "济南", "南京", "合肥", "杭州", "南昌", "福州", "郑州", "武汉", "长沙", "广州", "南宁", "西安", "银川", "兰州", "西宁", "乌鲁木齐", "成都", "贵阳", "昆明", "拉萨", "海口"];
            // 构造数据
            for (var i = 0; i < 300; i++) {
                var cityCenter = mapv.utilCityCenter.getCenterByCityName(citys[parseInt(Math.random() * citys.length)]);
                data.push({
                    geometry: {
                        type: 'Point',
                        coordinates: ol.proj.transform([cityCenter.lng - 2 + Math.random() * 4, cityCenter.lat - 2 + Math.random() * 4], 'EPSG:4326', 'EPSG:3857')
                    },
                    count: 30 * Math.random()
                });
            }      
            
            var dataSet = new mapv.DataSet(data);
            //参数设置
            var mapvOptions = {
                fillStyle: 'rgba(55, 50, 250, 0.8)',
                shadowColor: 'rgba(255, 250, 50, 1)',
                shadowBlur: 20,
                max: 100,
                size: 50,
                label: {
                    show: true,
                    fillStyle: 'white'
                },
                globalAlpha: 0.5,
                gradient: { 0.25: "rgb(0,0,255)", 0.55: "rgb(0,255,0)", 0.85: "yellow", 1.0: "rgb(255,0,0)" },
                draw: 'honeycomb'
            };
            var options = {
                map: map,
                dataSet: dataSet,
                mapvOptions: mapvOptions
            };
            map.addLayer(new ol.layer.Image({
                source: new ol.source.Mapv(options)
            }));
    
        </script>
    </body>
    </html>

    四、总结

    蜂巢图也是散点聚合的一种,虽然并不是很常用,感觉效果很赞,超图也有基于leaflet的api,这些api都是开源的,以前认为api开不开源没啥区别,现在感觉开源的东西是真的好,不仅会用,还可以自己扩展。

  • 相关阅读:
    spark系列-6、对Application,Driver,Job,Task,Stage的理解
    spark系列-5、RDD、DataFrame、Dataset的区别和各自的优势
    spark系列-4、spark序列化方案、GC对spark性能的影响
    spark系列-2、Spark 核心数据结构:弹性分布式数据集 RDD
    nginx学习(九):跨域配置和防盗链配置
    nginx学习(八):nginx配置gzip
    nginx学习(七):nginx提供静态资源服务
    nginx学习(六):日志切割
    nginx学习(五):nginx.conf 核心配置文件详解
    nginx学习(四):nginx处理web请求机制
  • 原文地址:https://www.cnblogs.com/tuboshu/p/10752318.html
Copyright © 2011-2022 走看看