UNPKG

google-maps-drawing-tools

Version:
115 lines 11.2 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const tool_1 = require("./tool"); const circle_1 = require("./tools/circle"); const line_1 = require("./tools/line"); const marker_1 = require("./tools/marker"); const polygon_1 = require("./tools/polygon"); const rectangle_1 = require("./tools/rectangle"); 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 tool_1.ToolId.Circle: { return new circle_1.default({ map: this.map, data: this.data }); } case tool_1.ToolId.Polygon: { return new polygon_1.default({ map: this.map, data: this.data }); } case tool_1.ToolId.Line: { return new line_1.default({ map: this.map, data: this.data }); } case tool_1.ToolId.Rectangle: { return new rectangle_1.default({ map: this.map, data: this.data }); } case tool_1.ToolId.Marker: { return new marker_1.default({ 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; } } } exports.default = DrawingManager; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiL1VzZXJzL2lyYWRjaGVua28vd29ya3NwYWNlL2dvb2dsZS1tYXBzLWRyYXdpbmctdG9vbHMvIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLGlDQUE2QztBQUM3QywyQ0FBb0M7QUFDcEMsdUNBQWdDO0FBQ2hDLDJDQUFvQztBQUNwQyw2Q0FBc0M7QUFDdEMsaURBQTBDO0FBYzFDO0lBVUUsWUFBWSxVQUEwQixFQUFFO1FBQ3RDLElBQUksQ0FBQyxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQztRQUN2QixJQUFJLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLElBQUksSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBRW5ELElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMzQixJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFVBQVUsQ0FBQyxNQUFxQjtRQUM5QixJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDYixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1NBQ3hCO1FBRUQsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRS9CLElBQUksSUFBSSxDQUFDLElBQUksRUFBRTtZQUNiLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFFakMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFeEIsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUVELE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILFdBQVcsQ0FBQyxLQUFZO1FBQ3RCLElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRTtZQUNqQixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDakM7UUFFRCxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUV2QyxJQUFJLEtBQUssS0FBSyxDQUFDLENBQUMsRUFBRTtZQUNoQixJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDOUI7SUFDSCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxRQUFRLENBQUMsS0FBWTtRQUNuQixJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUU7WUFDakIsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQzlCO1FBRUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDMUIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxVQUFVLENBQUMsTUFBcUI7UUFDOUIsUUFBUSxNQUFNLEVBQUU7WUFDZCxLQUFLLGFBQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDbEIsT0FBTyxJQUFJLGdCQUFNLENBQUM7b0JBQ2hCLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRztvQkFDYixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7aUJBQ2hCLENBQUMsQ0FBQzthQUNKO1lBRUQsS0FBSyxhQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ25CLE9BQU8sSUFBSSxpQkFBTyxDQUFDO29CQUNqQixHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUc7b0JBQ2IsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO2lCQUNoQixDQUFDLENBQUM7YUFDSjtZQUVELEtBQUssYUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNoQixPQUFPLElBQUksY0FBSSxDQUFDO29CQUNkLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRztvQkFDYixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7aUJBQ2hCLENBQUMsQ0FBQzthQUNKO1lBRUQsS0FBSyxhQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ3JCLE9BQU8sSUFBSSxtQkFBUyxDQUFDO29CQUNuQixHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUc7b0JBQ2IsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO2lCQUNoQixDQUFDLENBQUM7YUFDSjtZQUVELEtBQUssYUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUNsQixPQUFPLElBQUksZ0JBQU0sQ0FBQztvQkFDaEIsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHO29CQUNiLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtpQkFDaEIsQ0FBQyxDQUFDO2FBQ0o7U0FDRjtRQUVELE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLEdBQTJCO1FBQ2hDLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQ2YsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFdEIsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ2IsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO1NBQ3JCO0lBQ0gsQ0FBQztDQUNGO0FBcklELGlDQXFJQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBUb29sLCB7IFNoYXBlLCBUb29sSWQgfSBmcm9tICcuL3Rvb2wnO1xuaW1wb3J0IENpcmNsZSBmcm9tICcuL3Rvb2xzL2NpcmNsZSc7XG5pbXBvcnQgTGluZSBmcm9tICcuL3Rvb2xzL2xpbmUnO1xuaW1wb3J0IE1hcmtlciBmcm9tICcuL3Rvb2xzL21hcmtlcic7XG5pbXBvcnQgUG9seWdvbiBmcm9tICcuL3Rvb2xzL3BvbHlnb24nO1xuaW1wb3J0IFJlY3RhbmdsZSBmcm9tICcuL3Rvb2xzL3JlY3RhbmdsZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWFuYWdlck9wdGlvbnMge1xuICAvKipcbiAgICogUmVjb21tZW5kZWQgdG8gc2V0IGhlcmUsIGJ1dCBjYW4gYWxzbyBiZSBzZXQgdmlhIGBzZXRNYXBgLlxuICAgKi9cbiAgbWFwPzogZ29vZ2xlLm1hcHMuTWFwO1xuICAvKipcbiAgICogUGFzcyBpbiB5b3VyIG93biBgZ29vZ2xlLm1hcHMuRGF0YWAgaW5zdGFuY2UgdG8gcHV0IHRoZSBkcmF3aW5nc1xuICAgKiBvbi5cbiAgICovXG4gIGRhdGE/OiBnb29nbGUubWFwcy5EYXRhO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEcmF3aW5nTWFuYWdlciB7XG4gIG1hcDogYW55O1xuICBkYXRhOiBnb29nbGUubWFwcy5EYXRhO1xuXG4gIC8qKlxuICAgKiBUaGUgY3VycmVudGx5IHNlbGVjdGVkIHRvb2wuXG4gICAqL1xuICB0b29sPzogVG9vbDtcbiAgc2hhcGVzOiBTaGFwZVtdO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IE1hbmFnZXJPcHRpb25zID0ge30pIHtcbiAgICB0aGlzLm1hcCA9IG9wdGlvbnMubWFwO1xuICAgIHRoaXMuZGF0YSA9IG9wdGlvbnMuZGF0YSB8fCBuZXcgZ29vZ2xlLm1hcHMuRGF0YSgpO1xuXG4gICAgdGhpcy5kYXRhLnNldE1hcCh0aGlzLm1hcCk7XG4gICAgdGhpcy5zaGFwZXMgPSBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGFuZ2UgdG8gYSBzcGVjaWZpZWQgdG9vbCB3aGljaCB3aWxsIGJlIHVzZWQgdG8gZHJhdyBvbiB0aGUgbWFwLlxuICAgKlxuICAgKiBAcGFyYW0gdG9vbElkIFRoZSBpZGVudGlmaWVyIG9mIHRoZSB0b29sIHRvIGNoYW5nZSB0b1xuICAgKi9cbiAgY2hhbmdlVG9vbCh0b29sSWQ6IFRvb2xJZCB8IG51bGwpOiBTaGFwZSB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHRoaXMudG9vbCkge1xuICAgICAgdGhpcy50b29sLmRlYWN0aXZhdGUoKTtcbiAgICB9XG5cbiAgICB0aGlzLnRvb2wgPSB0aGlzLmNyZWF0ZVRvb2wodG9vbElkKTtcbiAgICB0aGlzLmRhdGEuc2V0RHJhd2luZ01vZGUobnVsbCk7XG5cbiAgICBpZiAodGhpcy50b29sKSB7XG4gICAgICBsZXQgc2hhcGUgPSB0aGlzLnRvb2wuYWN0aXZhdGUoKTtcblxuICAgICAgdGhpcy5zaGFwZXMucHVzaChzaGFwZSk7XG5cbiAgICAgIHJldHVybiBzaGFwZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgYSBzaGFwZSBmcm9tIHRoZSBgc2hhcGVzYCBhcnJheS5cbiAgICogQWxzbyByZW1vdmVzIGl0IGZyb20gdGhlIGBkYXRhYCBsYXllciBpZiB0aGUgYGZlYXR1cmVgIGlzIHByZXNlbnQgb24gdGhlIHNoYXBlLlxuICAgKlxuICAgKiBAcGFyYW0gc2hhcGUgVGhlIHNoYXBlIHRvIHJlbW92ZVxuICAgKi9cbiAgcmVtb3ZlU2hhcGUoc2hhcGU6IFNoYXBlKSB7XG4gICAgaWYgKHNoYXBlLmZlYXR1cmUpIHtcbiAgICAgIHRoaXMuZGF0YS5yZW1vdmUoc2hhcGUuZmVhdHVyZSk7XG4gICAgfVxuXG4gICAgbGV0IGluZGV4ID0gdGhpcy5zaGFwZXMuaW5kZXhPZihzaGFwZSk7XG5cbiAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICB0aGlzLnNoYXBlcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgc2hhcGUgdG8gdGhlIGBzaGFwZXNgIGFycmF5LiBJZiB0aGUgc2hhcGUgY29udGFpbnMgYSBgZmVhdHVyZWAsIHRoZW4gdGhhdFxuICAgKiBmZWF0dXJlIGlzIGFkZGVkIHRvIHRoZSBgZGF0YWAgbGF5ZXIuXG4gICAqXG4gICAqIEBwYXJhbSBzaGFwZSBUaGUgc2hhcGUgdG8gYWRkXG4gICAqL1xuICBhZGRTaGFwZShzaGFwZTogU2hhcGUpIHtcbiAgICBpZiAoc2hhcGUuZmVhdHVyZSkge1xuICAgICAgdGhpcy5kYXRhLmFkZChzaGFwZS5mZWF0dXJlKTtcbiAgICB9XG5cbiAgICB0aGlzLnNoYXBlcy5wdXNoKHNoYXBlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSB0b29sIGJhc2VkIG9uIGl0J3MgaWQuXG4gICAqXG4gICAqIEBwYXJhbSB0b29sSWQgVGhlIHRvb2wgdG8gY3JlYXRlLCBieSBpZFxuICAgKi9cbiAgY3JlYXRlVG9vbCh0b29sSWQ6IFRvb2xJZCB8IG51bGwpOiAoVG9vbCB8IHVuZGVmaW5lZCkge1xuICAgIHN3aXRjaCAodG9vbElkKSB7XG4gICAgICBjYXNlIFRvb2xJZC5DaXJjbGU6IHtcbiAgICAgICAgcmV0dXJuIG5ldyBDaXJjbGUoe1xuICAgICAgICAgIG1hcDogdGhpcy5tYXAsXG4gICAgICAgICAgZGF0YTogdGhpcy5kYXRhXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBjYXNlIFRvb2xJZC5Qb2x5Z29uOiB7XG4gICAgICAgIHJldHVybiBuZXcgUG9seWdvbih7XG4gICAgICAgICAgbWFwOiB0aGlzLm1hcCxcbiAgICAgICAgICBkYXRhOiB0aGlzLmRhdGFcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGNhc2UgVG9vbElkLkxpbmU6IHtcbiAgICAgICAgcmV0dXJuIG5ldyBMaW5lKHtcbiAgICAgICAgICBtYXA6IHRoaXMubWFwLFxuICAgICAgICAgIGRhdGE6IHRoaXMuZGF0YVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgY2FzZSBUb29sSWQuUmVjdGFuZ2xlOiB7XG4gICAgICAgIHJldHVybiBuZXcgUmVjdGFuZ2xlKHtcbiAgICAgICAgICBtYXA6IHRoaXMubWFwLFxuICAgICAgICAgIGRhdGE6IHRoaXMuZGF0YVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgY2FzZSBUb29sSWQuTWFya2VyOiB7XG4gICAgICAgIHJldHVybiBuZXcgTWFya2VyKHtcbiAgICAgICAgICBtYXA6IHRoaXMubWFwLFxuICAgICAgICAgIGRhdGE6IHRoaXMuZGF0YVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFNob3cgb3IgaGlkZSB0aGUgZHJhd2luZ3MgYnkgY2hhbmdpbmcgdGhlIG1hcC5cbiAgICpcbiAgICogQHBhcmFtIG1hcCBHb29nbGUgTWFwIGluc3RhbmNlIG9uIHdoaWNoIHRvIHNob3cgdGhlIGRyYXdpbmdzXG4gICAqL1xuICBzZXRNYXAobWFwOiBnb29nbGUubWFwcy5NYXAgfCBudWxsKSB7XG4gICAgdGhpcy5tYXAgPSBtYXA7XG4gICAgdGhpcy5kYXRhLnNldE1hcChtYXApO1xuXG4gICAgaWYgKHRoaXMudG9vbCkge1xuICAgICAgdGhpcy50b29sLm1hcCA9IG1hcDtcbiAgICB9XG4gIH1cbn1cbiJdfQ==