0.0.1 • Published 12 months ago

@rev-ai/screen-map v0.0.1

Weekly downloads
-
License
MIT
Repository
gitlab
Last release
12 months ago

screen-map

Screen Map

Install

# $ npm config set @revai:registry https://npm.aibee.cn
$ npm i -S @revai/screen-map

Usage

使用示例
https://gitlab.revai.cn/web/screen-map/-/tree/master/examples/main.js

import ScreenMap from '@revai/screen-map';

const dom = document.querySelector('#root');
const map = new ScreenMap(dom);
// 基于svg和对齐参数创建地图
map.addMapFromSvg(
  svgPath,
  align_params,
);
// 地图上添加一个图层
map.addLayer({ moveable: true, selectable: true }, 'layer1');
// 在图层上加入poi
map.setPois(list.map((d) => {
  return {
    iconSize: [40, 40],
    name: d.poiKey,
    icon: d.icon,
    offsetY: 20,
    text: d.name,
    angle: 80,
  };
}), 'layer1');

// 添加覆盖层
const overlay = map.addOverlay({
  element: document.querySelector('#overlay'),
  className: 'my-overlay',
  offset: [0, -10],
});

// 添加事件
map.addEventListener('poi-click', (ev) => {
  const { poi, position, coordinate } = ev.detail;
  // 点击layer1图层,更新图标
  if (poi.getLayerKey() === 'layer1') {
    poi.updateData({
      icon: 'https://prod-deployment.oss-cn-hangzhou.aliyuncs.com/ab3d081187a14e5ea07e5c3b16829513_c1.png',
    });
  }
  // 设置覆盖层位置,并显示
  overlay.setPosition(coordinate);
  overlay.show();
  // overlay.hide();
});

// poi移动结束事件
map.addEventListener('modify-end', (ev) => {
  const { poi, position } = ev.detail;
  console.log(poi, position);
});

// 切换地图可先销毁地图,再实例化
map.dispose();
map = new ScreenMap(dom);
map.addMapFromSvg(
  svgPath,
  align_params,
);
// ...

API

ScreenMap实例方法

方法说明属性/方法参数
new ScreenMap(container)构造函数container地图容器
addMapFromSvg(svgPath, svgAlignParams, mapConfig)使用svg初始化地图svgPath:svg地图, svgAlignParams:对齐参数, mapConfig:地图配置参考ol.Map/View的配置, 如果配置了convertToJson=true将svg转换成json后渲染,效果同addMapFromJson
addMapFromJson(jsonPath, svgAlignParams, mapConfig)使用json初始化地图jsonPath:json地图, svgAlignParams:对齐参数, mapConfig:地图配置参考ol.Map/View的配置,
addLayer(layerOptions, layerKey)添加一个图层layerOptions:图层配置(参考), layerKey:图层id
removeLayer(layerKey)删除一个图层layerKey:图层id
setLayerVisible(layerKey, bool)设置图层显隐layerKey:图层id, bool: Boolean
setPois(poiList, layerKey)清空图层poi,加入新的poipoiList:poi列表(poiOptions), layerKey:指定图层
addPoi(poiOptions,layerKey)在图层上添加poipoiOptions:配置参数(参考), layerKey:指定图层
removePoi(poi)删除一个poipoi:poiId或者poi对象
getPoiByName(name)根据poi配置name字段查找poiname:poi配置的name字段
addOverlay(overlayOptions)根据overlay配置创建覆盖层overlayOptions:overlay配置(参考)
getEventPosition(event)获取鼠标事件位置的地图坐标event:鼠标事件
rotatePoiTo(poi, angle, duration)旋转poipoi: poiId或者poi对象, angle: 旋转角度0-360, duration: 延迟动画0
translatePoiTo(poi, x, y, z, duration)移动poipoi: poiId或者poi对象, x, y, z, duration: 延迟动画0
setPerspective(angle, options)设置地图倾斜度angle: 倾斜角度0-30, { duration: 500, easing, x: 0, y: -500 }
setCenter(position, duration, callback)position:设置地图中心点坐标, duration:动画时长, callback: 成功回调-
getMapExtent()获取地图底图的范围-
getMapCenter()获取地图底图的中心点-
fit(extent, options)根据给定的边界适应范围extent:地图边界(为空时取地图边界), options:配置参数{duration:动画时长, padding:边界距离容器的paddingtop, right, bottom, left, callback: 成功回调}
scaleExtendCenter(padding, duration, callback)居中并缩放地图底图区域(fit方法的简化版)padding:边界距离容器的paddingtop, right, bottom, left, duration:duration:动画时长, callback: 成功回调
animate(options, callback)执行一个地图动画options:参考ol.View.animate, {center,zoom,resolution,rotation,duration}, callback:动画完成的回调
convertPositionToCoordinate(position)工具类:基于对齐配置,3D坐标转换成2D地图坐标position:3D坐标
convertCoordinateToPosition(coordinate)工具类:基于对齐配置,2D地图坐标转换成3D坐标coordinate:2D坐标
addNavigation(nav)添加导航路线控制nav:导航路线对象(参考)
removeNavigation(nav)删除导航路线控制nav:导航路线对象
setRender3D(options, layerKey)设置图层的3D渲染options:{height: 高度50, defaultHeight: 默认高度30, duration: 动画时长1000}, layerKey:需要渲染的图层id,不传默认svg底图
dispose()销毁地图-

POI实例方法

方法说明属性/方法参数
updateData(poiOptions)更新poi配置,更新地图poipoiOptions:POI配置参数
getPosition()获取poi的坐标-
getId()获取poi的Id-
getLayerKey()获取poi所在图层id-
get(key)获取poi的原始配置属性key:属性key

layerOptions 图层配置参数

参考 https://openlayers.org/en/latest/apidoc/module-ol_layer_Vector-VectorLayer.html |属性|说明|默认值| |:--|:--|:--| |declutter|poi是否碰撞隐藏|false| |moveable|poi是否可拖动(选中后才可拖动)|false| |selectable|poi是否可选中|false| |zIndex|图层优先级|默认按添加顺序|

poiOptions POI配置参数

其他配置参考 文本配置:https://openlayers.org/en/latest/apidoc/module-ol_style_Text-Text.html 图标配置:https://openlayers.org/en/latest/apidoc/module-ol_style_Icon-Icon.html |属性|说明|默认值| |:--|:--|:--| |name|poi名称,getPoiByName按此字段查询|-| |text|poi显示文本|-| |font|文字样式|'10px / 1 sans-serif'| |labelOffset|文本偏移|0,0| |icon|poi图标|-| |iconSize|图标尺寸|20,20| |anchor|图标相对中心点位置|0.5, 0.5居中| |iconOffset|图标偏移量|0, 0| |angle|图标旋转角度(0-360)|0| |moveable|poi选中后,设置moveable=false可以阻止拖动|true|

overlayOptions 覆盖层配置参数

参考 https://openlayers.org/en/latest/apidoc/module-ol_Overlay-Overlay.html |属性|说明|默认值| |:--|:--|:--| |element|覆盖层处显示的dom|-| |className|覆盖层包裹的样式class|-| |offset|覆盖层像素偏移量|0,0|

地图事件

map.addEventListener(eventName,callback) |事件名称|说明|回调参数| |:--|:--|:--| |map-load-start|地图加载前|-| |map-load-end|地图加载完成|{detail:map实例}| |poi-click|poi点击|{detail:{poi}}| |map-click|地图点击|{detail:{poi,position}} 如果点击了空白处,poi为空| |block-click|地图块点击(svg转json后才有)|{detail:{svg,position}} 如果点击了空白处,svg为空| |modify-start|poi移动前|{detail:{poi,position}}| |modify-end|poi移动后|{detail:{poi,position}}|

Navigation 实例方法

方法说明属性/方法参数
new Navigation(paths, options)构造函数paths:path导航接口 coordinate_2d.coords, options:导航配置参数,配置如下lineArrowShow: true, // 显示线上箭头lineArrowGap: 100, // 线上箭头间距pxlineArrowAnimate: false, // 箭头前进动画lineArrowSpeed: 10, // 箭头前进动画速度testNavShow: false, // 模拟导航显示箭头testNavSpeed: 20, // 模拟导航前进速度testNavCenter: false, // 模拟导航是否居中地图testNavRotate: false, // 模拟导航是否旋转地图testNavDiffAngle: 15, // 导航旋转超过角度才旋转(默认15°)autoRecoveryExtend: false, // 操作地图,5秒不动后自动恢复extendautoRecoveryDuration: 5000, // 操作地图,5秒不动后自动恢复extend
startNav(options)开始导航options:导航配置参数(同上)
stopNav()暂停导航-
scaleExtendCenter(padding, duration, callback)居中并缩放导航路线区域padding:路线区域距离容器边界paddingtop, right, bottom, left, duration:动画时长, callback:动画完成的回调
getFirstCoordinate()获取路线起点坐标-
getLastCoordinate()获取路线终点坐标-
dispose()销毁导航-

Update

$ npm i @revai/screen-map@latest