绘制和编辑时可能遇到的问题

9/18/2024

标绘时需要进行的操作,大多需要绑定事件,在事件中进行处理;

图层可绑定的事件在图上标绘示例 (opens new window)中都有演示,以及里面的参数;

# 绘制

# 绘制结束后想直接编辑绘制的矢量,不通过点击

可选择以下方式:

  1. 参数:对图层设置isAutoEditing 参数,为 true;

  2. 事件:绑定绘制完成事件,在事件中对矢量对象使用startEditing方法

# 绘制过程中如何实现“回退”的操作

记录每次点击点的位置,撤销就删除这个点,然后重新绘制一个图形, 为了保留绘制过程,可以有右键撤回功能,可以获取编辑中的矢量对象,对该对象执行 _onRightClickHandler 方法;

graphic._onRightClickHandler();
1

# 小模型绘制时,想点击三维模型上也想点击在地形上

问题描述:绘制的时候,有三维模型时,有时会点击加载在地形上,不太准确;

解决办法:可参考示例 - gLTF 模型标绘及编辑 (opens new window)设置drawShow参数

image

# 绘制的时候,想要自动吸附到已经加载过的矢量上

可开启顶点吸附功能,自动吸附其他矢量的尖角处;

map.onlyVertexPosition = true;
1

# 绘制的时候怎么加入一个已确定坐标

设置 positions 数组,里面加入已确定的坐标

graphicLayer.startDraw({
  type: "polyline",
  positions: [[117.358187, 31.838662, 12.23]],
  ...其他参数,
});
1
2
3
4
5

# 绘制结束后获取矢量的坐标

单坐标可通过 positionShow 获取;

多坐标则通过 positionsShow 获取

graphic.positionShow;
1

# 绘制过程中右键可以删除上一点,如何自定义触发该事件

以键盘事件为例

map.on(mars3d.EventType.keyup, function (e) {
  console.log("按下了键盘", e);

  if (e.keyCode === 27) {
    graphicLayer._graphic_drawing._positions_draw.pop();
    graphicLayer._graphic_drawing._editPointHandler();
  }
});
1
2
3
4
5
6
7
8

# 编辑

# 编辑的时候,右键菜单只想要其中的某个选项

查看对应矢量的 api 文档,设置 hasEditContextMenu 为 false,即可使用外部自定义的右键菜单

内置的菜单无法进行增删,只能外部自定义;

# 某个矢量进入编辑模式后,其他的矢量的 tooltip 都会失效

为了提高效率所以关闭,若有所需求可以手动开启下;

graphicLayer.on(mars3d.EventType.editStart, function (event) {
  map.mouseEvent.enabledMoveTarget = true;
});
1
2
3

# 编辑的时候怎么只修改高度或者只左右偏移

使用 MatrixMove ,构造后自行改下 xy 轴隐藏掉

matrixMove._graphic_move_x.show = false;
matrixMove._graphic_move_y.show = false;

// 样式可以matrixMove._graphic_move_z.setStyle(); //是PolylinePrimitive对象。
1
2
3
4

# 编辑时,小模型右键有个编辑方向,怎么不通过右键直接编辑

graphic.readyPromise.then(() => {
  graphic.startEditing();
  graphic.editing._hasEditHeading = true;
  graphic.editing.updateDraggers();
});
1
2
3
4
5
最后更新: 10/12/2024, 2:30:08 PM