跳到主要内容
版本:9.2.0

模式

在 Mapmost Draw 中, modes 用于将一组用户交互行为组合成一个行为。在内部,Draw 有 draw_polygon 模式,用于控制绘制多边形的一系列交互。Draw 还有 simple_select 模式,用于控制在选择零个、一个或多个要素时的交互,包括当用户的交互暗示他们希望对单个要素进行详细编辑时,切换到 direct_select 模式。

为了帮助开发人员更好地控制其基于 Mapmost Draw 的应用程序,Draw 提供了一个编写和连接自定义模式的接口。

自定义绘制模式

我们将创建一个名为 LotsOfPointsMode 的自定义模式。激活后,此模式将在用户每次单击地图时创建一个新点,并在用户按 esc 键时转换为默认模式。

案例

var LotsOfPointsMode = {};

// 模式启动时调用这个函数。
// `opts`参数来自`draw.changeMode('lotsofpoints', {count:7})`。
// 返回值应该是一个对象并将传递给所有其他生命周期函数。
LotsOfPointsMode.onSetup = function(opts) {
var state = {};
state.count = opts.count || 0;
return state;
};

// 当用户点击地图时,Draw将调用`onClick`
LotsOfPointsMode.onClick = function(state, e) {
// `this.newFeature`接受geojson并生成一个DrawFeature
var point = this.newFeature({
type: 'Feature',
properties: {
count: state.count
},
geometry: {
type: 'Point',
coordinates: [e.lngLat.lng, e.lngLat.lat]
}
});
this.addFeature(point); // 将点放置到地图上
};

// 当用户点击地图上的一个按键时,它将被发送到这里
LotsOfPointsMode.onKeyUp = function(state, e) {
if (e.keyCode === 27) return this.changeMode('simple_select');
};

// 这是一个模式唯一需要的函数
// 它决定了哪个当前在Draw的数据存储中的特征将被渲染到地图上。
// 所有传递给`display`的特征将被渲染,所以你可以传递多个显示内部特征的特征。
// 在`API.md`中查找`styling-draw`在显示功能方面的建议。
LotsOfPointsMode.toDisplayFeatures = function(state, geojson, display) {
display(geojson);
};

// 添加新绘制模式到MapmostDraw对象中
var draw = new MapmostDraw({
defaultMode: 'lots_of_points',
// 将LotsOfPointsMode添加到内置模式集
modes: Object.assign({
lots_of_points: LotsOfPointsMode,
}, MapmostDraw.modes),
});

有关如何处理地图交互的详细信息,请参阅下方的 生命周期函数 。有关如何与 Draw 的内部状态交互的更多信息,请参阅下方的 设置与获取

可直接使用的绘制模式

请随时通过 PR 将您自己的模式添加到此列表中

生命周期函数

MODE.onClick

单击鼠标时触发。

参数

名称类型描述
stateObject必填由 onSetup 创建的一个可变状态对象。
eObject必填触发此生命周期事件的捕获事件。

MODE.onCombineFeature

调用 draw.combineFeatures() 时触发。

参数

名称类型描述
stateObject必填由 onSetup 创建的一个可变状态对象。

MODE.onDrag

当在地图上检测到拖动事件时触发。

参数

名称类型描述
stateObject必填由 onSetup 创建的一个可变状态对象。
eObject必填触发此生命周期事件的捕获事件。

MODE.onKeyDown

当检测到按键按下事件时触发。

参数

名称类型描述
stateObject必填由 onSetup 创建的一个可变状态对象。
eObject必填触发此生命周期事件的捕获事件。

MODE.onKeyUp

当检测到按键释放事件时触发。

参数

名称类型描述
stateObject必填由 onSetup 创建的一个可变状态对象。
eObject必填触发此生命周期事件的捕获事件。

MODE.onMouseDown

当鼠标按钮按下时触发。

参数

名称类型描述
stateObject必填由 onSetup 创建的一个可变状态对象。
eObject必填触发此生命周期事件的捕获事件。

MODE.onMouseMove

当鼠标移动时触发。

参数

名称类型描述
stateObject必填由 onSetup 创建的一个可变状态对象。
eObject必填触发此生命周期事件的捕获事件。

MODE.onMouseOut

鼠标离开地图容器时触发。

参数

名称类型描述
stateObject必填由 onSetup 创建的一个可变状态对象。
eObject必填触发此生命周期事件的捕获事件。

MODE.onMouseUp

当鼠标按钮释放时触发。

参数

名称类型描述
stateObject必填由 onSetup 创建的一个可变状态对象。
eObject必填触发此生命周期事件的捕获事件。

MODE.onSetup

在模式过渡期间触发。

参数

名称类型描述
optsObject必填通过 "draw.changeMode(mode, opts)" 传递的对象。

返回 Object ,该对象将会被传递给所有其他生命周期函数。

MODE.onStop

在退出模式时触发,用于清理残留物,例如无效要素等。

参数

名称类型描述
stateObject必填由 onSetup 创建的一个可变状态对象。

MODE.onTap

当快速点击地图时触发。

参数

名称类型描述
stateObject必填由 onSetup 创建的一个可变状态对象。
eObject必填触发此生命周期事件的捕获事件。

MODE.onTouchEnd

当将手指从地图上移开时触发。

参数

名称类型描述
stateObject必填由 onSetup 创建的一个可变状态对象。
eObject必填触发此生命周期事件的捕获事件。

MODE.onTouchMove

当在移动设备上用手指拖动时触发。

参数

名称类型描述
stateObject必填由 onSetup 创建的一个可变状态对象。
eObject必填触发此生命周期事件的捕获事件。

MODE.onTouchStart

当触摸事件开始时触发。

参数

名称类型描述
stateObject必填由 onSetup 创建的一个可变状态对象。
eObject必填触发此生命周期事件的捕获事件。

MODE.onTrash

当调用 draw.trash() 时触发。

参数

名称类型描述
stateObject必填由 onSetup 创建的一个可变状态对象。

MODE.onUncombineFeature

当调用draw.uncombineFeatures() 时触发。

参数

名称类型描述
stateObject必填由 onSetup 创建的一个可变状态对象。

MODE.toDisplayFeatures

在渲染时,对每个要素触发,将原始要素转换为在地图上显示的要素集。

有关Draw在渲染中使用的GeoJSON属性的详细信息,请参阅API文档中的 绘制样式 获取完整的样式参考。

参数

名称类型描述
stateObject必填由 onSetup 创建的一个可变状态对象。
geojsonObject必填GeoJSON对象。需要将其传递给 "display" 函数进行渲染。
displayFunction必填所有传递给此函数的GeoJSON对象都将被渲染到地图上。

设置与获取

clearSelectedCoordinates

清除所有选定的坐标。

clearSelectedFeatures

清除所有选定的要素。

this.activateUIButton

如果提供了一个名称,它会使该按钮处于激活状态,否则会使所有按钮都处于非激活状态。

参数

名称类型描述
nameString必填要激活的按钮名称,设置 "undefined" 将使按钮处于非激活状态。

this.addFeature

添加一个 DrawFeature。请参阅 this.newFeature 将 GeoJSON 转换为 DrawFeature 。

参数

名称类型描述
featureDrawFeature必填要添加的要素。

this.changeMode

触发模式更改。

参数

名称类型默认值描述
modeString必填要设置的模式。
optsObject{}可选传递给新模式的选项对象。
eventOptsObject{}可选用于控制发出的事件类型。

this.delete

从选定状态中移除一个要素。

参数

名称类型描述
idString必填要素的 id。

this.deleteFeature

移除一个要素。

参数

名称类型默认值描述
idString必填要素的 id。
optsObject{}可选要素属性。

this.doRender

强制绘图工具重新渲染指定ID对应的要素。

参数

名称类型描述
idString必填要素的 id。

this.featuresAt

获取事件对象位置或边界框内的要素。

参数

名称类型默认值描述
eventFunction必填事件对象。
bboxArray必填边界范围。
bufferTypeStringclick可选click或者tap事件。

this.getFeature

通过 ID 获取 DrawFeature,返回 DrawFeature

参数

名称类型描述
idString必填要素的 id。

this.getSelected

将所有选定的要素作为DrawFeature获取,返回 Array[DrawFeature]

this.getSelectedIds

获取当前所有选定要素的ID,返回 Array[String]

this.isInstanceOf

检查一个对象是否是 DrawFeature 实例,返回布尔值。

参数

名称类型描述
typeString必填可以选择"Point", "LineString", "Polygon", "MultiFeature"类型。
featureObject必填需要检查的要素。

this.isSelected

检查一个要素是否被选中,返回布尔值。

参数

名称类型描述
idString必填要素的 id。

this.newFeature

从GeoJSON创建一个新的 DrawFeature,返回 DrawFeature

参数

名称类型描述
geojsonGeoJSONFeature必填GeoJSON要素。

this.select

将要素添加到绘图工具内部的选定状态中。

参数

名称类型描述
idString必填要素的 id。

this.setActionableState

指示您的模式当前是否可以执行不同的操作。请参阅 draw.actionalbe 以获取可能的操作列表。所有未定义的操作默认设置为false。

参数

名称类型默认值描述
actionsObject{}必填操作对象。

this.setSelected

设置绘图工具的内部选择状态。

参数

名称类型描述
features必填要素。
null-nullArray必填选择的 DrawFeature。

this.setSelectedCoordinates

设置绘图工具的内部选择坐标状态。

参数

名称类型描述
coordsArray必填形如{coord_path: "string", feature_id: "string"}

this.updateUIClasses

更新绘图地图类的状态。

参数

名称类型描述
optsObject必填要更新的状态对象。