许可优化
许可优化
产品
产品
解决方案
解决方案
服务支持
服务支持
关于
关于
软件库
当前位置:服务支持 >  软件文章 >  ArcGIS JS API 4.18简单实现Leaflet的divOverlay功能

ArcGIS JS API 4.18简单实现Leaflet的divOverlay功能

阅读数 17
点赞 0
article_banner

介绍

在leaflet里有一个非常好用divOverylay 类  ,可以使用html+css构建元素直接叠加到地图,并随地图拖动实时改变位置,用于表现复杂的弹窗气泡或标注都很实用,但在arcgis js api 里没有相关的实现方式,这里参考leaflet的实现方式基于arcgis api实现类似的功能。

实现 代码

// divOverlay.ts 类
const supportClass = ['esri.layers.FeatureLayer', 'esri.layers.GraphicsLayer'];
const getGeometryCenter = (geometry: __esri.Geometry) => {
   
   
  if (!geometry) {
   
   
    window.console.log(new Error('map:getGeometryCenter:几何对象为空'));
    return null
  }
  const {
   
    type } = geometry;
  // 获取图形中心点
  let center: __esri.Geometry | any = null;
  switch (type) {
   
   
    case 'point':
      center = geometry
      break;
    case 'polyline':
      center = geometry.extent.center;
      break;
    case 'polygon':
      // center = geometry.centroid;
      center = geometry.extent.center;
      break;
    case 'extent':
      center = geometry.center;
      break;
    default:
      break;
  }
  return center;
}
const setClass = (el: HTMLElement, name: string) => {
   
   
  if (!el.className['baseVal']) {
   
   
    el.className = name;
  } else {
   
   
    // in case of SVG element
    el.className['baseVal'] = name;
  }
};
const getClass = (el: HTMLElement) => {
   
   
  if (el['correspondingElement']) {
   
   
    el = el['correspondingElement'];
  }
  return el.className['baseVal'] === undefined ? el.className : el.className['baseVal'];
};
const hasClass = (el: HTMLElement, name: string) => {
   
   
  if (el.classList !== undefined) {
   
   
    return el.classList.contains(name);
  }
  const className = getClass(el);
  return className.length > 0 && new RegExp('(^|\\s)' + name + '(\\s|$)').test(className);
};
function splitWords(str: string) {
   
   
  return trim(str).split(/\s+/);
}
const addClass = (el, name) => {
   
   
  if (el.classList !== undefined) {
   
   
    const classes = splitWords(name);
    for (let i = 0, len = classes.length; i < len; i++) {
   
   
      el.classList.add(classes[i]);
    }
  } else if (!hasClass(el, name)) {
   
   
    const className = getClass(el);
    setClass(el, (className ? className + ' ' : '') + name);
  }
};

export default class DivOverlay{
   
   
  declaredClass: string = 'divoverlay';
  uiKey: string = 'div-overlay';
  map: __esri.WebMap | __esri.WebScene;
  mapView: __esri.MapView | __esri.SceneView;
  source: __esri.Graphic[] | __esri.GraphicsLayerView | __esri.FeatureLayerView;
  options: any = {
   
   };
  container: any;
  data: any = [];
  domNodes: any = {
   
   };
  displayField: string = 'name';
  currentAlignment: string = 'top-center'; // top-center\top-left\top-right\bottom-center\bottom-left\bottom-right\left-center\right-center
  
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删


相关文章
技术文档
QR Code
微信扫一扫,欢迎咨询~
customer

online

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 board-phone 155-2731-8020
close1
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

姓名不为空

姓名不为空
手机不正确

手机不正确

手机不正确
公司不为空

公司不为空

公司不为空