1

draw_line_string モードで Shift キーを使用して前のポイントを削除できるように MapboxDraw.modes.draw_line_string.clickAnywhere 関数を書き直そうとしています。機能しますが、前のポイントを削除すると、新しい場所に新しいポイントが作成されます。

  1. 線を引く
  2. Shift キーを押しながら、前のポイントをクリックします
  3. 古いものを削除し、新しいものを作成します

古いポイントを削除して、新しいポイントを追加し続けたい 例はこちら https://jsfiddle.net/benderlio/5fxwhkdp/7/

MapboxDraw.modes.draw_line_string.clickAnywhere = function (state, e) {
        if (e.originalEvent.shiftKey) {
            const line = state.line.coordinates;
            const lastClick = line[line.length - 1]
            const a = map.project(lastClick)

        const res = line.map((i, index) => {
            const b = map.project(i)
            const d = distance(a, b)
            return {
                index,
                distance: d
            };
        }).find(i => i.distance < 5  && i.distance > 0)
        console.log('res', res);

        if (res) {
            //state.line.removeCoordinate(res.index)
            state.line.coordinates = state.line.coordinates.filter((i, index) => index !== res.index)
        }

    } else {
        console.log('NO SHiFT');
        if (state.currentVertexPosition > 0 && isEventAtCoordinates(e, state.line.coordinates[state.currentVertexPosition - 1]) ||
            state.direction === 'backwards' && isEventAtCoordinates(e, state.line.coordinates[state.currentVertexPosition + 1])) {
            return this.changeMode('simple_select', { featureIds: [state.line.id] });
        }
        this.updateUIClasses({ mouse: 'add' });
        state.line.updateCoordinate(state.currentVertexPosition, e.lngLat.lng, e.lngLat.lat);
        if (state.direction === 'forward') {
            state.currentVertexPosition++;
            state.line.updateCoordinate(state.currentVertexPosition, e.lngLat.lng, e.lngLat.lat);
        } else {
            state.line.addCoordinate(0, e.lngLat.lng, e.lngLat.lat);
        }
    }

};

UPD: OK、ポイントは currentVertexPosition を設定することです

 state.line.coordinates.splice(res.index,1)
 state.currentVertexPosition = state.currentVertexPosition - 1 
4

0 に答える 0