跳到主要内容
版本:9.15.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必填要更新的状态对象。