zoukankan      html  css  js  c++  java
  • arcgis api 4.x for js 图层拓展篇之mapvLayer(附源码下载)

    因为在项目开发过程中,使用的arcgis js api版本是4.7,并不能支持客户端渲染热力图,想到arcgis js api 4.x的渲染是基于canvas,故琢磨着是否能借助类似于mapVechartheatmap.js等同样基于canvas的优秀可视化库来操作,本篇主要讲述拓展支持mapV图层的过程,我们可以参看mapV的相关说明,它的渲染是基于我们的屏幕坐标,而在arcgis api js 4.x中便有屏幕坐标和地理坐标的互相转换,所以这便是拓展的关键点,好了,我们来上手吧。

    效果图:

    安装mapV

    • npm install mapv

    引用mapV对象(DataSet、图层对象)

    • import { DataSet, canvasDrawHeatmap, canvasDrawHoneycomb } from 'mapv' ;

    初始化mapV图层参数

    constructor(view, option) {
    this.view = null;
    this.box = null;
    this.mapvOption = {};
    this.mapv_ctx = null;
    this.map_ExtentChange_Listener = null;
    this.map_RotateView_Listener = null;
    this._init(view, option);
    }
    _init(view, option) {
    this._setBaseMap(view);
    this._setMapvOption(option);//设置mapv图层参数
    this.createLayer(view);//创建图层
    }sv

    创建mapV图层对象,并加入到地图容器

    createLayer(view) {
    if (this.mapvOption.geoData) {
    if (!document.querySelector('#mapv')) {
    let box = this.box = document.createElement("canvas");
    box.setAttribute("id", "mapv")
    box.setAttribute("name", "mapv")
    box.style.width = view.width + 'px';
    box.style.height = view.height + 'px';
    box.style.position = "absolute";
    box.style.top = 0;
    box.style.left = 0;
    let parent = document.getElementsByClassName("esri-view-surface")[0];
    parent.appendChild(box);
    }
    this.getCanvas();//获取canvas图层
    this.renderLayer();//渲染图层
    this.startMapEventListeners();//开启地图的监听事件
    }
    else {
    document.querySelector('#mapv') && this.removeCanavs();
    }
    }
    getCanvas() {
    let canvas = document.querySelector('#mapv');
    canvas.width = document.body.offsetWidth;
    canvas.height = document.body.offsetHeight;
    this.mapv_ctx = canvas.getContext('2d');
    }

    渲染mapV图层到地图上

    renderLayer() {
    let { type, visualMap } = this.mapvOption, renderLyr;
    let dataset = this.createDataSet();//构建图层数据及转换
    switch (type) {
    case "heatmap"://热力图
    renderLyr = canvasDrawHeatmap.draw(this.mapv_ctx, dataset, visualMap);
    break;
    case "honeycomb"://蜂窝图
    renderLyr = canvasDrawHoneycomb.draw(this.mapv_ctx, dataset, visualMap);
    break;
    default:
    renderLyr = null;
    break;
    }
    }

    构建图层数据及坐标转换

    createDataSet() {
    let { geoData } = this.mapvOption;
    let data = this.geo2Screen(geoData);
    data = new DataSet(data);
    return data;
    }
    geo2Screen(geoData) {
    let { view } = this;
    return geoData.map((item, index) => {
    let temp = {};
    let mapPoint = {
    ……

    更多的详情见GIS之家小专栏

    文章尾部提供源代码下载,对本专栏感兴趣的话,可以关注一波

  • 相关阅读:
    IOS实现自动循环滚动广告--ScrollView的优化和封装
    iOS开发知识点总结
    iOS项目常用效果方法注意点集锦
    项目功能大全,让你的项目一天搞定
    Xcode调试技巧(断点和重构)
    Swift学习笔记-ARC
    常用的属性修饰
    __ block
    小笔记
    java+tomcat安装
  • 原文地址:https://www.cnblogs.com/giserhome/p/10969603.html
Copyright © 2011-2022 走看看