使用 leaflet-geoman 限制折线中的制造商点(成为一条线)
Limit maker points in Polyline (to be a Line) using leaflet-geoman
我想让用户画一条线(这是一条只有 2 个点的折线)。
我为 vertexadded
启用绘图和监听。当 _rings
标记计数等于 2 时,我禁用绘图。
这感觉不对有几个原因:
- 我访问一个私有变量
_rings
- 现在我禁用绘图但要可视化线条我必须在可视模式下重新启动它
- 要允许用户移动线的 2 个点,我必须在编辑模式下重新启动线。
- 在编辑模式下,必须禁用 2 个标记之间的线拆分,这可能吗?
我是否缺少更简单的方法?
map.pm.enableDraw('Line', {
snappable: true,
snapDistance: 20,
});
map.on('pm:drawstart', (event: any) => {
const { workingLayer } = event;
workingLayer.on('pm:vertexadded', (e: any) => {
if (workingLayer._rings[0].length >= 2) {
map.pm.disableDraw('Line', {
snappable: true,
snapDistance: 20,
});
}
});
});
- 使用
layer.getLatLngs()
代替变量_rings
。
- 不要调用
map.pm.disableDraw()
,用map.pm.Draw.Line._finishShape()
完成形状以将绘制的图层添加到地图
- 您可以调用
map.pm.enableGlobalEditMode()
为所有图层启用编辑,或者您可以使用 layer.pm.enable()
启用所需的图层
- 使用选项
hideMiddleMarkers: true
map.pm.setGlobalOptions({hideMiddleMarkers: true})
map.on('pm:drawstart', (event) => {
const { workingLayer } = event;
workingLayer.on('pm:vertexadded', (e) => {
if (workingLayer.getLatLngs().length >= 2) {
map.pm.Draw.Line._finishShape()
}
});
});
map.pm.enableDraw('Line');
我想让用户画一条线(这是一条只有 2 个点的折线)。
我为 vertexadded
启用绘图和监听。当 _rings
标记计数等于 2 时,我禁用绘图。
这感觉不对有几个原因:
- 我访问一个私有变量
_rings
- 现在我禁用绘图但要可视化线条我必须在可视模式下重新启动它
- 要允许用户移动线的 2 个点,我必须在编辑模式下重新启动线。
- 在编辑模式下,必须禁用 2 个标记之间的线拆分,这可能吗?
我是否缺少更简单的方法?
map.pm.enableDraw('Line', {
snappable: true,
snapDistance: 20,
});
map.on('pm:drawstart', (event: any) => {
const { workingLayer } = event;
workingLayer.on('pm:vertexadded', (e: any) => {
if (workingLayer._rings[0].length >= 2) {
map.pm.disableDraw('Line', {
snappable: true,
snapDistance: 20,
});
}
});
});
- 使用
layer.getLatLngs()
代替变量_rings
。 - 不要调用
map.pm.disableDraw()
,用map.pm.Draw.Line._finishShape()
完成形状以将绘制的图层添加到地图 - 您可以调用
map.pm.enableGlobalEditMode()
为所有图层启用编辑,或者您可以使用layer.pm.enable()
启用所需的图层
- 使用选项
hideMiddleMarkers: true
map.pm.setGlobalOptions({hideMiddleMarkers: true})
map.on('pm:drawstart', (event) => {
const { workingLayer } = event;
workingLayer.on('pm:vertexadded', (e) => {
if (workingLayer.getLatLngs().length >= 2) {
map.pm.Draw.Line._finishShape()
}
});
});
map.pm.enableDraw('Line');