Source: ext/draw/EasyDrawTool.js

import * as maptalks from '../../libs/maptalks'
import Geom from '../geom'

class EasyDrawTool {
    /**
     * 绘制工具类
     * @constructor
     * @param {Object} options 配置项
     */
    constructor(options) {
        this.drawTool = new maptalks.DrawTool(options)
    }

    /**
     * 添加到地图
     * @param {EasyMap} easyMap 地图对象
     * @returns {EasyDrawTool}
     */
    addTo(easyMap) {
        this.drawTool.addTo(easyMap.map)
        return this
    }

    /**
     * 事件绑定
     * @param {String} eventsOn 要注册的事件类型
     * @param {*} handler 要调用的处理函数
     * @param {*} context 处理程序的上下文
     * @returns {*} 返回handler用于事件移除
     */
    on(eventsOn, handler, context = null) {
        const _handler = function(param) {
            param.geometry = new Geom(param.geometry, param.geometry.type)
            handler(param)
        }
        this.drawTool.on(eventsOn, _handler, context)
        return _handler
    }

    /**
     * 事件绑定,别名
     * @param {String} eventsOn 要注册的事件类型
     * @param {*} handler 要调用的处理函数
     * @param {*} context 处理程序的上下文
     * @returns {*} 返回handler用于事件移除
     */
    addMapEventListener(eventsOn, handler, context = null) {
        const _handler = function(param) {
            param.geometry = new Geom(param.geometry, param.geometry.type)
            handler(param)
        }
        this.drawTool.addEventListener(eventsOn, _handler, context)
        return _handler
    }

    /**
     * 单次事件绑定,调用一次后移除
     * @param {String} eventTypes 要注册的事件类型
     * @param {*} handler 要调用的处理函数
     * @param {*} context 处理程序的上下文
     */
    once(eventTypes, handler, context = null) {
        const _handler = function(param) {
            param.geometry = new Geom(param.geometry, param.geometry.type)
            handler(param)
        }
        this.drawTool.once(eventTypes, _handler, context)
    }

    /**
     * 单次事件绑定,调用一次后移除,别名
     * @param {String} eventTypes 要注册的事件类型
     * @param {*} handler 要调用的处理函数
     * @param {*} context 处理程序的上下文
     */
    addMapEventListenerOnce(eventTypes, handler, context = null) {
        const _handler = function(param) {
            param.geometry = new Geom(param.geometry, param.geometry.type)
            handler(param)
        }
        this.drawTool.once(eventTypes, _handler, context)
    }

    /**
     * 事件移除
     * @param {String} eventsOff 要移除的事件类型
     * @param {*} handler 要调用的处理函数
     * @param {*} context 处理程序的上下文
     */
    un(eventsOff, handler, context = null) {
        this.drawTool.off(eventsOff, handler, context)
    }

    /**
     * 事件移除,别名
     * @param {String} eventsOff 要移除的事件类型
     * @param {*} handler 要调用的处理函数
     * @param {*} context 处理程序的上下文
     */
    removeMapEventListener(eventsOff, handler, context = null) {
        this.drawTool.removeEventListener(eventsOff, handler, context)
    }

    /**
     * 启用绘图工具
     * @returns {EasyDrawTool}
     */
    enable() {
        this.drawTool.enable()
        return this
    }

    /**
     * 禁用绘图工具
     * @returns {EasyDrawTool}
     */
    disable() {
        this.drawTool.disable()
        return this
    }

    /**
     * 绘制点
     */
    drawPointFeature() {
        this.drawTool.setMode('Point').enable()
    }

    /**
     * 绘制线
     */
    drawLineStringFeature() {
        this.drawTool.setMode('LineString').enable()
    }

    /**
     * 绘制多边形
     */
    drawPolygonFeature() {
        this.drawTool.setMode('Polygon').enable()
    }

    /**
     * 绘制圆
     */
    drawCircleFeature() {
        this.drawTool.setMode('Circle').enable()
    }

    /**
     * 绘制矩形
     */
    drawRectangleFeature() {
        this.drawTool.setMode('Rectangle').enable()
    }
}

export default EasyDrawTool