antv L7/G2 plot组件库学习经验总结

1,318 阅读2分钟

「这是我参与11月更文挑战的第8天,活动详情查看:2021最后一次更文挑战

在做用户画像的时候,有很多数据分析的模块,需要用到图表,给大家推荐几个图标库

1.antv L7地图 绘制大小不受控制bug

原因: 地图的画布原本底层就设置了相对定位,所以会出现地图绘制出来的相对定位的差错\

.l7-marker-container{
    width:100%;
    height:100%;
    overflow:hidden;
    position:absolute;
 }

所以为了绘制时候的定位,需要对画布进行相对定位,不然相对定位到页面上更上层的元素,甚至会到页面body层,那样页面绘制就更不可控制了

 #box {
    position: relative;
    width: 100px;
    height: 100px;
  }

2.两个绘制版本的地图

有几个关键的API单独描述一下:

  • logoVisible: false, // 是否显示logo
  • scale('value',{type: 'cat',})//数据映射类型,默认值cat--大坑
  • dragEnable: false, // 是否允许地图拖拽
  • keyboardEnable: false, // 是否允许形键盘事件
  • doubleClickZoom: false, // 双击放大
  • zoomEnable: false, // 滚动缩放
  • rotateEnable: false, // 旋转

地图的数据映射---度量
连续型 linear 线性 log pow 指数型
连续分类型 quantile 等分位 quantize 等间距
枚举型 cat 枚举----默认

import { Scene, PolygonLayer, LineLayer, PointLayer ,Popup} from "@antv/l7";
import { CountryLayer } from "@antv/l7-district";
import { Mapbox } from "@antv/l7-maps";

initscene() {
   const scene = new Scene({
   id: "map",
   logoVisible: false, // 是否显示logo
   map: new Mapbox({
       pitch: 0,
       style: "blank",
       center: [ 116.368652, 39.93866 ],
       zoom: 10.07
       }),
   });
scene.setMapStatus({
      dragEnable: false, // 是否允许地图拖拽
      keyboardEnable: false, // 是否允许形键盘事件
      doubleClickZoom: false, // 双击放大
      zoomEnable: false, // 滚动缩放
      rotateEnable: false, // 旋转
});
scene.on("loaded", () => {
    //CountryLayer地图组件,展示会有bug--上面度量默认值导致
      new CountryLayer(scene, {
          data: this.ProvinceData,
          joinBy: ["NAME_CHN", "name"],
          depth: 1,
          showBorder: false,
          fill: {
            color: {
             field: "value",
             values: this.colors,
            },
          },
          label: {
             enable: false,
          },
          popup: {
             enable: true,
             Html: (props) => {
                  return `<div class="flex-sb" style="width:100px;"><div>${props.name}</div><div>${props.value}%</div></div>`;
                   },
          },
      });
      //PolygonLayer地图组件----------------
      const chinaPolygonLayer = new PolygonLayer({
            autoFit: true
        })
        .source(this.chinachat)
        .color('value', this.colors)
        .shape('fill')
        .scale('value',{
              type: 'quantize',
        })
        .style({
              opacity: 1
        });
        scene.addLayer(chinaPolygonLayer);
        chinaPolygonLayer.on('mousemove', (ev) => {
            const popup = new Popup({
                    offsets: [ 0, 0 ],
                    closeButton: false
                   })
                  .setLnglat(ev.lngLat)
                  .setHTML(`<span>${ev.feature.properties.name}: ${ev.feature.properties.value}%</span>`);
        scene.addPopup(popup);
        });
        //----------------------------
  });
}