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之家小专栏

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

  • 相关阅读:
    界面控件DevExpress WPF入门 表达式编辑器功能
    Telerik UI for WPF全新版本——拥有Office2019高对比度主题
    DevExpress报表控件v21.2 全新的Visual Studio报表设计器
    报告生成器FastReport .NET入门指南 在Linux中启动应用程序
    文档控件DevExpress Office File API v21.2 自定义字体加载引擎
    UI组件库Kendo UI for Angular入门 如何开始使用图表功能
    WPF界面工具Telerik UI for WPF入门级教程 设置一个主题(二)
    DevExtreme初级入门教程(React篇) TypeScript支持
    报表开发利器FastReport .NET v2022.1 添加关键对象和属性
    python项目打包(一) setup.py、Python源代码项目结构
  • 原文地址:https://www.cnblogs.com/giserhome/p/10969603.html
Copyright © 2011-2022 走看看