google-maps-drawing-tools
Version:
Unified drawing tools for Google Maps
65 lines • 8.08 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const tool_1 = require("../tool");
const overlay_to_feature_1 = require("../utils/overlay-to-feature");
class CircleTool extends tool_1.default {
constructor(options) {
super(options);
this.id = tool_1.ToolId.Circle;
this.data = options.data;
// private
this.dmId = google.maps.drawing.OverlayType.CIRCLE;
this.dm = new google.maps.drawing.DrawingManager({
drawingControl: false
});
this.dmOptions = options.style || {
strokeColor: '#374046',
fillColor: '#374046',
fillOpacity: 0.5,
strokeWeight: 2,
clickable: false
};
// TODO: should we have a temp data layer as well?
this.data.setStyle(this.dmOptions);
}
activate() {
let shape = super.activate();
let dm = this.dm;
dm.setDrawingMode(this.dmId);
dm.setOptions({
[`${this.dmId}Options`]: this.dmOptions
});
dm.setMap(this.map);
this.setupListeners();
return shape;
}
deactivate() {
super.deactivate();
let dm = this.dm;
// "casting" to `any` because the typings are wrong in googlemaps
dm.setDrawingMode(null);
dm.setMap(null);
this.cleanupListeners();
}
setupListeners() {
let dm = this.dm;
let listener = dm.addListener('overlaycomplete', (event) => {
let feature = overlay_to_feature_1.default(event.overlay);
if (event.overlay instanceof google.maps.Circle || event.overlay instanceof google.maps.Rectangle) {
event.overlay.setMap(null);
}
this.feature = feature;
this.data.add(feature);
this.deactivate();
});
this.feature = undefined;
this.dmListener = listener;
}
cleanupListeners() {
if (this.dmListener) {
google.maps.event.removeListener(this.dmListener);
}
}
}
exports.default = CircleTool;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2lyY2xlLmpzIiwic291cmNlUm9vdCI6Ii9Vc2Vycy9pcmFkY2hlbmtvL3dvcmtzcGFjZS9nb29nbGUtbWFwcy1kcmF3aW5nLXRvb2xzLyIsInNvdXJjZXMiOlsidG9vbHMvY2lyY2xlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsa0NBQTJEO0FBQzNELG9FQUEyRDtBQU8zRCxnQkFBZ0MsU0FBUSxjQUFJO0lBUzFDLFlBQVksT0FBMEI7UUFDcEMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRWYsSUFBSSxDQUFDLEVBQUUsR0FBRyxhQUFNLENBQUMsTUFBTSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQztRQUV6QixVQUFVO1FBQ1YsSUFBSSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDO1FBQ25ELElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUM7WUFDL0MsY0FBYyxFQUFFLEtBQUs7U0FDdEIsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFNBQVMsR0FBRyxPQUFPLENBQUMsS0FBSyxJQUFJO1lBQ2hDLFdBQVcsRUFBRSxTQUFTO1lBQ3RCLFNBQVMsRUFBRSxTQUFTO1lBQ3BCLFdBQVcsRUFBRSxHQUFHO1lBQ2hCLFlBQVksRUFBRSxDQUFDO1lBQ2YsU0FBUyxFQUFFLEtBQUs7U0FDakIsQ0FBQztRQUVGLGtEQUFrRDtRQUNsRCxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLEtBQUssR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDN0IsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUVqQixFQUFFLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM3QixFQUFFLENBQUMsVUFBVSxDQUFDO1lBQ1osQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLFNBQVMsQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTO1NBQ3hDLENBQUMsQ0FBQztRQUNILEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRXBCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUV0QixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxVQUFVO1FBQ1IsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBRW5CLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7UUFFakIsaUVBQWlFO1FBQ2pFLEVBQUUsQ0FBQyxjQUFjLENBQUMsSUFBVyxDQUFDLENBQUM7UUFDL0IsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVoQixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRU8sY0FBYztRQUNwQixJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ2pCLElBQUksUUFBUSxHQUFHLEVBQUUsQ0FBQyxXQUFXLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxLQUErQyxFQUFFLEVBQUU7WUFDbkcsSUFBSSxPQUFPLEdBQUcsNEJBQWdCLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBRTlDLElBQUksS0FBSyxDQUFDLE9BQU8sWUFBWSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsT0FBTyxZQUFZLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFO2dCQUNqRyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUM1QjtZQUVELElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNwQixDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxPQUFPLEdBQUcsU0FBUyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxVQUFVLEdBQUcsUUFBUSxDQUFDO0lBQzdCLENBQUM7SUFFTyxnQkFBZ0I7UUFDdEIsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ25CLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDbkQ7SUFDSCxDQUFDO0NBQ0Y7QUFsRkQsNkJBa0ZDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFRvb2wsIHsgU2hhcGUsIFRvb2xJZCwgVG9vbE9wdGlvbnMgfSBmcm9tICcuLi90b29sJztcbmltcG9ydCBvdmVybGF5VG9GZWF0dXJlIGZyb20gJy4uL3V0aWxzL292ZXJsYXktdG8tZmVhdHVyZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2lyY2xlVG9vbE9wdGlvbnMgZXh0ZW5kcyBUb29sT3B0aW9ucyB7XG4gIGRhdGE6IGdvb2dsZS5tYXBzLkRhdGE7XG4gIHN0eWxlPzogZ29vZ2xlLm1hcHMuQ2lyY2xlT3B0aW9ucztcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2lyY2xlVG9vbCBleHRlbmRzIFRvb2wge1xuICBpZDogVG9vbElkO1xuICBkYXRhOiBnb29nbGUubWFwcy5EYXRhO1xuXG4gIHByaXZhdGUgZG1JZDogZ29vZ2xlLm1hcHMuZHJhd2luZy5PdmVybGF5VHlwZTtcbiAgcHJpdmF0ZSBkbTogZ29vZ2xlLm1hcHMuZHJhd2luZy5EcmF3aW5nTWFuYWdlcjtcbiAgcHJpdmF0ZSBkbU9wdGlvbnM6IGdvb2dsZS5tYXBzLkNpcmNsZU9wdGlvbnM7XG4gIHByaXZhdGUgZG1MaXN0ZW5lcj86IGdvb2dsZS5tYXBzLk1hcHNFdmVudExpc3RlbmVyO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IENpcmNsZVRvb2xPcHRpb25zKSB7XG4gICAgc3VwZXIob3B0aW9ucyk7XG5cbiAgICB0aGlzLmlkID0gVG9vbElkLkNpcmNsZTtcbiAgICB0aGlzLmRhdGEgPSBvcHRpb25zLmRhdGE7XG5cbiAgICAvLyBwcml2YXRlXG4gICAgdGhpcy5kbUlkID0gZ29vZ2xlLm1hcHMuZHJhd2luZy5PdmVybGF5VHlwZS5DSVJDTEU7XG4gICAgdGhpcy5kbSA9IG5ldyBnb29nbGUubWFwcy5kcmF3aW5nLkRyYXdpbmdNYW5hZ2VyKHtcbiAgICAgIGRyYXdpbmdDb250cm9sOiBmYWxzZVxuICAgIH0pO1xuICAgIHRoaXMuZG1PcHRpb25zID0gb3B0aW9ucy5zdHlsZSB8fCB7XG4gICAgICBzdHJva2VDb2xvcjogJyMzNzQwNDYnLFxuICAgICAgZmlsbENvbG9yOiAnIzM3NDA0NicsXG4gICAgICBmaWxsT3BhY2l0eTogMC41LFxuICAgICAgc3Ryb2tlV2VpZ2h0OiAyLFxuICAgICAgY2xpY2thYmxlOiBmYWxzZVxuICAgIH07XG5cbiAgICAvLyBUT0RPOiBzaG91bGQgd2UgaGF2ZSBhIHRlbXAgZGF0YSBsYXllciBhcyB3ZWxsP1xuICAgIHRoaXMuZGF0YS5zZXRTdHlsZSh0aGlzLmRtT3B0aW9ucyk7XG4gIH1cblxuICBhY3RpdmF0ZSgpOiBTaGFwZSB7XG4gICAgbGV0IHNoYXBlID0gc3VwZXIuYWN0aXZhdGUoKTtcbiAgICBsZXQgZG0gPSB0aGlzLmRtO1xuXG4gICAgZG0uc2V0RHJhd2luZ01vZGUodGhpcy5kbUlkKTtcbiAgICBkbS5zZXRPcHRpb25zKHtcbiAgICAgIFtgJHt0aGlzLmRtSWR9T3B0aW9uc2BdOiB0aGlzLmRtT3B0aW9uc1xuICAgIH0pO1xuICAgIGRtLnNldE1hcCh0aGlzLm1hcCk7XG5cbiAgICB0aGlzLnNldHVwTGlzdGVuZXJzKCk7XG5cbiAgICByZXR1cm4gc2hhcGU7XG4gIH1cblxuICBkZWFjdGl2YXRlKCkge1xuICAgIHN1cGVyLmRlYWN0aXZhdGUoKTtcblxuICAgIGxldCBkbSA9IHRoaXMuZG07XG5cbiAgICAvLyBcImNhc3RpbmdcIiB0byBgYW55YCBiZWNhdXNlIHRoZSB0eXBpbmdzIGFyZSB3cm9uZyBpbiBnb29nbGVtYXBzXG4gICAgZG0uc2V0RHJhd2luZ01vZGUobnVsbCBhcyBhbnkpO1xuICAgIGRtLnNldE1hcChudWxsKTtcblxuICAgIHRoaXMuY2xlYW51cExpc3RlbmVycygpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cExpc3RlbmVycygpIHtcbiAgICBsZXQgZG0gPSB0aGlzLmRtO1xuICAgIGxldCBsaXN0ZW5lciA9IGRtLmFkZExpc3RlbmVyKCdvdmVybGF5Y29tcGxldGUnLCAoZXZlbnQ6IGdvb2dsZS5tYXBzLmRyYXdpbmcuT3ZlcmxheUNvbXBsZXRlRXZlbnQpID0+IHtcbiAgICAgIGxldCBmZWF0dXJlID0gb3ZlcmxheVRvRmVhdHVyZShldmVudC5vdmVybGF5KTtcblxuICAgICAgaWYgKGV2ZW50Lm92ZXJsYXkgaW5zdGFuY2VvZiBnb29nbGUubWFwcy5DaXJjbGUgfHwgZXZlbnQub3ZlcmxheSBpbnN0YW5jZW9mIGdvb2dsZS5tYXBzLlJlY3RhbmdsZSkge1xuICAgICAgICBldmVudC5vdmVybGF5LnNldE1hcChudWxsKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5mZWF0dXJlID0gZmVhdHVyZTtcbiAgICAgIHRoaXMuZGF0YS5hZGQoZmVhdHVyZSk7XG4gICAgICB0aGlzLmRlYWN0aXZhdGUoKTtcbiAgICB9KTtcblxuICAgIHRoaXMuZmVhdHVyZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmRtTGlzdGVuZXIgPSBsaXN0ZW5lcjtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYW51cExpc3RlbmVycygpIHtcbiAgICBpZiAodGhpcy5kbUxpc3RlbmVyKSB7XG4gICAgICBnb29nbGUubWFwcy5ldmVudC5yZW1vdmVMaXN0ZW5lcih0aGlzLmRtTGlzdGVuZXIpO1xuICAgIH1cbiAgfVxufVxuIl19