UNPKG

google-maps-drawing-tools

Version:
112 lines 11.1 kB
import { ToolId } from './tool'; import Circle from './tools/circle'; import Line from './tools/line'; import Marker from './tools/marker'; import Polygon from './tools/polygon'; import Rectangle from './tools/rectangle'; export default class DrawingManager { constructor(options = {}) { this.map = options.map; this.data = options.data || new google.maps.Data(); this.data.setMap(this.map); this.shapes = []; } /** * Change to a specified tool which will be used to draw on the map. * * @param toolId The identifier of the tool to change to */ changeTool(toolId) { if (this.tool) { this.tool.deactivate(); } this.tool = this.createTool(toolId); this.data.setDrawingMode(null); if (this.tool) { let shape = this.tool.activate(); this.shapes.push(shape); return shape; } return undefined; } /** * Removes a shape from the `shapes` array. * Also removes it from the `data` layer if the `feature` is present on the shape. * * @param shape The shape to remove */ removeShape(shape) { if (shape.feature) { this.data.remove(shape.feature); } let index = this.shapes.indexOf(shape); if (index !== -1) { this.shapes.splice(index, 1); } } /** * Adds a shape to the `shapes` array. If the shape contains a `feature`, then that * feature is added to the `data` layer. * * @param shape The shape to add */ addShape(shape) { if (shape.feature) { this.data.add(shape.feature); } this.shapes.push(shape); } /** * Create a tool based on it's id. * * @param toolId The tool to create, by id */ createTool(toolId) { switch (toolId) { case ToolId.Circle: { return new Circle({ map: this.map, data: this.data }); } case ToolId.Polygon: { return new Polygon({ map: this.map, data: this.data }); } case ToolId.Line: { return new Line({ map: this.map, data: this.data }); } case ToolId.Rectangle: { return new Rectangle({ map: this.map, data: this.data }); } case ToolId.Marker: { return new Marker({ map: this.map, data: this.data }); } } return undefined; } /** * Show or hide the drawings by changing the map. * * @param map Google Map instance on which to show the drawings */ setMap(map) { this.map = map; this.data.setMap(map); if (this.tool) { this.tool.map = map; } } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiL1VzZXJzL2lyYWRjaGVua28vd29ya3NwYWNlL2dvb2dsZS1tYXBzLWRyYXdpbmctdG9vbHMvIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFhLEVBQVMsTUFBTSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQzdDLE9BQU8sTUFBTSxNQUFNLGdCQUFnQixDQUFDO0FBQ3BDLE9BQU8sSUFBSSxNQUFNLGNBQWMsQ0FBQztBQUNoQyxPQUFPLE1BQU0sTUFBTSxnQkFBZ0IsQ0FBQztBQUNwQyxPQUFPLE9BQU8sTUFBTSxpQkFBaUIsQ0FBQztBQUN0QyxPQUFPLFNBQVMsTUFBTSxtQkFBbUIsQ0FBQztBQWMxQyxNQUFNLENBQUMsT0FBTztJQVVaLFlBQVksVUFBMEIsRUFBRTtRQUN0QyxJQUFJLENBQUMsR0FBRyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUM7UUFDdkIsSUFBSSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxJQUFJLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUVuRCxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDM0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7SUFDbkIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxVQUFVLENBQUMsTUFBcUI7UUFDOUIsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ2IsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztTQUN4QjtRQUVELElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUUvQixJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDYixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBRWpDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBRXhCLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFFRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxXQUFXLENBQUMsS0FBWTtRQUN0QixJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUU7WUFDakIsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQ2pDO1FBRUQsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFdkMsSUFBSSxLQUFLLEtBQUssQ0FBQyxDQUFDLEVBQUU7WUFDaEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQzlCO0lBQ0gsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsUUFBUSxDQUFDLEtBQVk7UUFDbkIsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFO1lBQ2pCLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUM5QjtRQUVELElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsVUFBVSxDQUFDLE1BQXFCO1FBQzlCLFFBQVEsTUFBTSxFQUFFO1lBQ2QsS0FBSyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ2xCLE9BQU8sSUFBSSxNQUFNLENBQUM7b0JBQ2hCLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRztvQkFDYixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7aUJBQ2hCLENBQUMsQ0FBQzthQUNKO1lBRUQsS0FBSyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ25CLE9BQU8sSUFBSSxPQUFPLENBQUM7b0JBQ2pCLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRztvQkFDYixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7aUJBQ2hCLENBQUMsQ0FBQzthQUNKO1lBRUQsS0FBSyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ2hCLE9BQU8sSUFBSSxJQUFJLENBQUM7b0JBQ2QsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHO29CQUNiLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtpQkFDaEIsQ0FBQyxDQUFDO2FBQ0o7WUFFRCxLQUFLLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDckIsT0FBTyxJQUFJLFNBQVMsQ0FBQztvQkFDbkIsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHO29CQUNiLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtpQkFDaEIsQ0FBQyxDQUFDO2FBQ0o7WUFFRCxLQUFLLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDbEIsT0FBTyxJQUFJLE1BQU0sQ0FBQztvQkFDaEIsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHO29CQUNiLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtpQkFDaEIsQ0FBQyxDQUFDO2FBQ0o7U0FDRjtRQUVELE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLEdBQTJCO1FBQ2hDLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQ2YsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFdEIsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ2IsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO1NBQ3JCO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFRvb2wsIHsgU2hhcGUsIFRvb2xJZCB9IGZyb20gJy4vdG9vbCc7XG5pbXBvcnQgQ2lyY2xlIGZyb20gJy4vdG9vbHMvY2lyY2xlJztcbmltcG9ydCBMaW5lIGZyb20gJy4vdG9vbHMvbGluZSc7XG5pbXBvcnQgTWFya2VyIGZyb20gJy4vdG9vbHMvbWFya2VyJztcbmltcG9ydCBQb2x5Z29uIGZyb20gJy4vdG9vbHMvcG9seWdvbic7XG5pbXBvcnQgUmVjdGFuZ2xlIGZyb20gJy4vdG9vbHMvcmVjdGFuZ2xlJztcblxuZXhwb3J0IGludGVyZmFjZSBNYW5hZ2VyT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBSZWNvbW1lbmRlZCB0byBzZXQgaGVyZSwgYnV0IGNhbiBhbHNvIGJlIHNldCB2aWEgYHNldE1hcGAuXG4gICAqL1xuICBtYXA/OiBnb29nbGUubWFwcy5NYXA7XG4gIC8qKlxuICAgKiBQYXNzIGluIHlvdXIgb3duIGBnb29nbGUubWFwcy5EYXRhYCBpbnN0YW5jZSB0byBwdXQgdGhlIGRyYXdpbmdzXG4gICAqIG9uLlxuICAgKi9cbiAgZGF0YT86IGdvb2dsZS5tYXBzLkRhdGE7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERyYXdpbmdNYW5hZ2VyIHtcbiAgbWFwOiBhbnk7XG4gIGRhdGE6IGdvb2dsZS5tYXBzLkRhdGE7XG5cbiAgLyoqXG4gICAqIFRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgdG9vbC5cbiAgICovXG4gIHRvb2w/OiBUb29sO1xuICBzaGFwZXM6IFNoYXBlW107XG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogTWFuYWdlck9wdGlvbnMgPSB7fSkge1xuICAgIHRoaXMubWFwID0gb3B0aW9ucy5tYXA7XG4gICAgdGhpcy5kYXRhID0gb3B0aW9ucy5kYXRhIHx8IG5ldyBnb29nbGUubWFwcy5EYXRhKCk7XG5cbiAgICB0aGlzLmRhdGEuc2V0TWFwKHRoaXMubWFwKTtcbiAgICB0aGlzLnNoYXBlcyA9IFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIENoYW5nZSB0byBhIHNwZWNpZmllZCB0b29sIHdoaWNoIHdpbGwgYmUgdXNlZCB0byBkcmF3IG9uIHRoZSBtYXAuXG4gICAqXG4gICAqIEBwYXJhbSB0b29sSWQgVGhlIGlkZW50aWZpZXIgb2YgdGhlIHRvb2wgdG8gY2hhbmdlIHRvXG4gICAqL1xuICBjaGFuZ2VUb29sKHRvb2xJZDogVG9vbElkIHwgbnVsbCk6IFNoYXBlIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAodGhpcy50b29sKSB7XG4gICAgICB0aGlzLnRvb2wuZGVhY3RpdmF0ZSgpO1xuICAgIH1cblxuICAgIHRoaXMudG9vbCA9IHRoaXMuY3JlYXRlVG9vbCh0b29sSWQpO1xuICAgIHRoaXMuZGF0YS5zZXREcmF3aW5nTW9kZShudWxsKTtcblxuICAgIGlmICh0aGlzLnRvb2wpIHtcbiAgICAgIGxldCBzaGFwZSA9IHRoaXMudG9vbC5hY3RpdmF0ZSgpO1xuXG4gICAgICB0aGlzLnNoYXBlcy5wdXNoKHNoYXBlKTtcblxuICAgICAgcmV0dXJuIHNoYXBlO1xuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyBhIHNoYXBlIGZyb20gdGhlIGBzaGFwZXNgIGFycmF5LlxuICAgKiBBbHNvIHJlbW92ZXMgaXQgZnJvbSB0aGUgYGRhdGFgIGxheWVyIGlmIHRoZSBgZmVhdHVyZWAgaXMgcHJlc2VudCBvbiB0aGUgc2hhcGUuXG4gICAqXG4gICAqIEBwYXJhbSBzaGFwZSBUaGUgc2hhcGUgdG8gcmVtb3ZlXG4gICAqL1xuICByZW1vdmVTaGFwZShzaGFwZTogU2hhcGUpIHtcbiAgICBpZiAoc2hhcGUuZmVhdHVyZSkge1xuICAgICAgdGhpcy5kYXRhLnJlbW92ZShzaGFwZS5mZWF0dXJlKTtcbiAgICB9XG5cbiAgICBsZXQgaW5kZXggPSB0aGlzLnNoYXBlcy5pbmRleE9mKHNoYXBlKTtcblxuICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgIHRoaXMuc2hhcGVzLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBzaGFwZSB0byB0aGUgYHNoYXBlc2AgYXJyYXkuIElmIHRoZSBzaGFwZSBjb250YWlucyBhIGBmZWF0dXJlYCwgdGhlbiB0aGF0XG4gICAqIGZlYXR1cmUgaXMgYWRkZWQgdG8gdGhlIGBkYXRhYCBsYXllci5cbiAgICpcbiAgICogQHBhcmFtIHNoYXBlIFRoZSBzaGFwZSB0byBhZGRcbiAgICovXG4gIGFkZFNoYXBlKHNoYXBlOiBTaGFwZSkge1xuICAgIGlmIChzaGFwZS5mZWF0dXJlKSB7XG4gICAgICB0aGlzLmRhdGEuYWRkKHNoYXBlLmZlYXR1cmUpO1xuICAgIH1cblxuICAgIHRoaXMuc2hhcGVzLnB1c2goc2hhcGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIHRvb2wgYmFzZWQgb24gaXQncyBpZC5cbiAgICpcbiAgICogQHBhcmFtIHRvb2xJZCBUaGUgdG9vbCB0byBjcmVhdGUsIGJ5IGlkXG4gICAqL1xuICBjcmVhdGVUb29sKHRvb2xJZDogVG9vbElkIHwgbnVsbCk6IChUb29sIHwgdW5kZWZpbmVkKSB7XG4gICAgc3dpdGNoICh0b29sSWQpIHtcbiAgICAgIGNhc2UgVG9vbElkLkNpcmNsZToge1xuICAgICAgICByZXR1cm4gbmV3IENpcmNsZSh7XG4gICAgICAgICAgbWFwOiB0aGlzLm1hcCxcbiAgICAgICAgICBkYXRhOiB0aGlzLmRhdGFcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGNhc2UgVG9vbElkLlBvbHlnb246IHtcbiAgICAgICAgcmV0dXJuIG5ldyBQb2x5Z29uKHtcbiAgICAgICAgICBtYXA6IHRoaXMubWFwLFxuICAgICAgICAgIGRhdGE6IHRoaXMuZGF0YVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgY2FzZSBUb29sSWQuTGluZToge1xuICAgICAgICByZXR1cm4gbmV3IExpbmUoe1xuICAgICAgICAgIG1hcDogdGhpcy5tYXAsXG4gICAgICAgICAgZGF0YTogdGhpcy5kYXRhXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBjYXNlIFRvb2xJZC5SZWN0YW5nbGU6IHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZWN0YW5nbGUoe1xuICAgICAgICAgIG1hcDogdGhpcy5tYXAsXG4gICAgICAgICAgZGF0YTogdGhpcy5kYXRhXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBjYXNlIFRvb2xJZC5NYXJrZXI6IHtcbiAgICAgICAgcmV0dXJuIG5ldyBNYXJrZXIoe1xuICAgICAgICAgIG1hcDogdGhpcy5tYXAsXG4gICAgICAgICAgZGF0YTogdGhpcy5kYXRhXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogU2hvdyBvciBoaWRlIHRoZSBkcmF3aW5ncyBieSBjaGFuZ2luZyB0aGUgbWFwLlxuICAgKlxuICAgKiBAcGFyYW0gbWFwIEdvb2dsZSBNYXAgaW5zdGFuY2Ugb24gd2hpY2ggdG8gc2hvdyB0aGUgZHJhd2luZ3NcbiAgICovXG4gIHNldE1hcChtYXA6IGdvb2dsZS5tYXBzLk1hcCB8IG51bGwpIHtcbiAgICB0aGlzLm1hcCA9IG1hcDtcbiAgICB0aGlzLmRhdGEuc2V0TWFwKG1hcCk7XG5cbiAgICBpZiAodGhpcy50b29sKSB7XG4gICAgICB0aGlzLnRvb2wubWFwID0gbWFwO1xuICAgIH1cbiAgfVxufVxuIl19