美文网首页
react中使用openlayers第二篇(加载热力图)

react中使用openlayers第二篇(加载热力图)

作者: 黑白不过灰 | 来源:发表于2019-08-16 10:12 被阅读0次

    既然有第一篇,那就要有第二篇嘛!

    佛说要有光,世界便有了光

    啊呸

    是上帝说要有光,世界便有了光

    好的,我们来到了第二篇,第二篇我们干啥呢?有了,我们来加载一个热点图

    import React, { PureComponent } from 'react';
    import { Map, View } from 'ol';
    import { Tile, Heatmap } from 'ol/layer';
    import { OSM, Vector } from 'ol/source';
    import GeoJSON from 'ol/format/GeoJSON';
    import { fromLonLat } from 'ol/proj';
    import ScaleLine from 'ol/control/ScaleLine';
    import ZoomSlider from 'ol/control/ZoomSlider';
    
    const control = require('ol/control');
    
    export default class Home extends PureComponent {
        // 生命周期函数时调用
        componentDidMount() {
            let map = new Map({
                // 设置挂载点为map
                target: 'map',
                // 设置图层
                layers: [
                    new Tile({
                        source: new OSM()
                    })
                ],
                // 设置地图的可视区域,center为中心点,zoom为缩放的层级
                view: new View({
                    center: fromLonLat([114, 41]),
                    zoom: 4
                }),
                //加载控件到地图容器中
                controls: control.defaults({
                    // zoom: false,
                    rotate: false,
                    attribution: false
                }).extend([
                    new ScaleLine(),
                    new ZoomSlider()
                ])
            });
    
            //矢量图层 获取geojson数据
            var vector = new Vector({
                url: '../src/pages/maphot/test.geojson',
                format: new GeoJSON()
            });
            let heatMap = new Heatmap({
                source: vector,
                // 透明度
                // opacity: [0, 0.8], 
                // 模糊大小
                blur: 5,
                // 半径大小(以像素为单位,默认8)
                radius: 5,
                // 阴影像素大小,默认250
                // shadow:250,
                // 矢量图层的渲染模式:
                // image:矢量图层呈现为图像。性能出色,但是点符号和文本始末始终随着视图一起旋转,像素在缩放动画期间缩放
                // vector:矢量图层呈现为矢量。即使在动画期间也能获得最准确的渲染,但是性能降低
            });
            map.addLayer(heatMap);
        }
        render() {
            return (
                <div style={{ width: '100%', height: '100%' }}>
                    <div id="map" style={{ width: '100%', height: "930px" }} />
                    {/*  地图的挂载点,可以设置大小,控制地图的大小 */}
                    {/* <div id="map" style={{ width: '1920px', height: "1080px" }} /> */}
                </div>
            );
        }
    }
    

    代码有了,注释也有了,哦,我知道了,还缺一个效果图

    热力图效果图
    至于说代码中使用的geojson的数据,额,这个,不知道怎么上传
    https://links.jianshu.com/go?to=https%3A%2F%2Fearthquake.usgs.gov%2Fearthquakes%2Ffeed%2Fv1.0%2Fsummary%2Fall_month.geojson
    嘻嘻嘻,这篇文章主要是参考大佬的https://www.jianshu.com/p/10f7c04eda17](https://www.jianshu.com/p/10f7c04eda17)
    本人前端切图仔,希望可以和大家多多交流技术方面的知识

    相关文章

      网友评论

          本文标题:react中使用openlayers第二篇(加载热力图)

          本文链接:https://www.haomeiwen.com/subject/suffsctx.html