google-maps-drawing-tools
Version:
Unified drawing tools for Google Maps
65 lines • 8.13 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 RectangleTool extends tool_1.default {
constructor(options) {
super(options);
this.id = tool_1.ToolId.Rectangle;
this.data = options.data;
// private
this.dmId = google.maps.drawing.OverlayType.RECTANGLE;
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 = RectangleTool;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjdGFuZ2xlLmpzIiwic291cmNlUm9vdCI6Ii9Vc2Vycy9pcmFkY2hlbmtvL3dvcmtzcGFjZS9nb29nbGUtbWFwcy1kcmF3aW5nLXRvb2xzLyIsInNvdXJjZXMiOlsidG9vbHMvcmVjdGFuZ2xlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsa0NBQTJEO0FBQzNELG9FQUEyRDtBQU8zRCxtQkFBbUMsU0FBUSxjQUFJO0lBUzdDLFlBQVksT0FBNkI7UUFDdkMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRWYsSUFBSSxDQUFDLEVBQUUsR0FBRyxhQUFNLENBQUMsU0FBUyxDQUFDO1FBQzNCLElBQUksQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQztRQUV6QixVQUFVO1FBQ1YsSUFBSSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDO1FBQ3RELElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUM7WUFDL0MsY0FBYyxFQUFFLEtBQUs7U0FDdEIsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFNBQVMsR0FBRyxPQUFPLENBQUMsS0FBSyxJQUFJO1lBQ2hDLFdBQVcsRUFBRSxTQUFTO1lBQ3RCLFNBQVMsRUFBRSxTQUFTO1lBQ3BCLFdBQVcsRUFBRSxHQUFHO1lBQ2hCLFlBQVksRUFBRSxDQUFDO1lBQ2YsU0FBUyxFQUFFLEtBQUs7U0FDakIsQ0FBQztRQUVGLGtEQUFrRDtRQUNsRCxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLEtBQUssR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7UUFFN0IsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUVqQixFQUFFLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM3QixFQUFFLENBQUMsVUFBVSxDQUFDO1lBQ1osQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLFNBQVMsQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTO1NBQ3hDLENBQUMsQ0FBQztRQUNILEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRXBCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUV0QixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxVQUFVO1FBQ1IsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBRW5CLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7UUFFakIsaUVBQWlFO1FBQ2pFLEVBQUUsQ0FBQyxjQUFjLENBQUMsSUFBVyxDQUFDLENBQUM7UUFDL0IsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVoQixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRU8sY0FBYztRQUNwQixJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ2pCLElBQUksUUFBUSxHQUFHLEVBQUUsQ0FBQyxXQUFXLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxLQUErQyxFQUFFLEVBQUU7WUFDbkcsSUFBSSxPQUFPLEdBQUcsNEJBQWdCLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBRTlDLElBQUksS0FBSyxDQUFDLE9BQU8sWUFBWSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsT0FBTyxZQUFZLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFO2dCQUNqRyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUM1QjtZQUVELElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNwQixDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxPQUFPLEdBQUcsU0FBUyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxVQUFVLEdBQUcsUUFBUSxDQUFDO0lBQzdCLENBQUM7SUFFTyxnQkFBZ0I7UUFDdEIsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ25CLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDbkQ7SUFDSCxDQUFDO0NBQ0Y7QUFuRkQsZ0NBbUZDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFRvb2wsIHsgU2hhcGUsIFRvb2xJZCwgVG9vbE9wdGlvbnMgfSBmcm9tICcuLi90b29sJztcbmltcG9ydCBvdmVybGF5VG9GZWF0dXJlIGZyb20gJy4uL3V0aWxzL292ZXJsYXktdG8tZmVhdHVyZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVjdGFuZ2xlVG9vbE9wdGlvbnMgZXh0ZW5kcyBUb29sT3B0aW9ucyB7XG4gIGRhdGE6IGdvb2dsZS5tYXBzLkRhdGE7XG4gIHN0eWxlPzogZ29vZ2xlLm1hcHMuQ2lyY2xlT3B0aW9ucztcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVjdGFuZ2xlVG9vbCBleHRlbmRzIFRvb2wge1xuICBpZDogVG9vbElkO1xuICBkYXRhOiBnb29nbGUubWFwcy5EYXRhO1xuXG4gIHByaXZhdGUgZG1JZDogZ29vZ2xlLm1hcHMuZHJhd2luZy5PdmVybGF5VHlwZTtcbiAgcHJpdmF0ZSBkbTogZ29vZ2xlLm1hcHMuZHJhd2luZy5EcmF3aW5nTWFuYWdlcjtcbiAgcHJpdmF0ZSBkbU9wdGlvbnM6IGdvb2dsZS5tYXBzLkNpcmNsZU9wdGlvbnM7XG4gIHByaXZhdGUgZG1MaXN0ZW5lcj86IGdvb2dsZS5tYXBzLk1hcHNFdmVudExpc3RlbmVyO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IFJlY3RhbmdsZVRvb2xPcHRpb25zKSB7XG4gICAgc3VwZXIob3B0aW9ucyk7XG5cbiAgICB0aGlzLmlkID0gVG9vbElkLlJlY3RhbmdsZTtcbiAgICB0aGlzLmRhdGEgPSBvcHRpb25zLmRhdGE7XG5cbiAgICAvLyBwcml2YXRlXG4gICAgdGhpcy5kbUlkID0gZ29vZ2xlLm1hcHMuZHJhd2luZy5PdmVybGF5VHlwZS5SRUNUQU5HTEU7XG4gICAgdGhpcy5kbSA9IG5ldyBnb29nbGUubWFwcy5kcmF3aW5nLkRyYXdpbmdNYW5hZ2VyKHtcbiAgICAgIGRyYXdpbmdDb250cm9sOiBmYWxzZVxuICAgIH0pO1xuICAgIHRoaXMuZG1PcHRpb25zID0gb3B0aW9ucy5zdHlsZSB8fCB7XG4gICAgICBzdHJva2VDb2xvcjogJyMzNzQwNDYnLFxuICAgICAgZmlsbENvbG9yOiAnIzM3NDA0NicsXG4gICAgICBmaWxsT3BhY2l0eTogMC41LFxuICAgICAgc3Ryb2tlV2VpZ2h0OiAyLFxuICAgICAgY2xpY2thYmxlOiBmYWxzZVxuICAgIH07XG5cbiAgICAvLyBUT0RPOiBzaG91bGQgd2UgaGF2ZSBhIHRlbXAgZGF0YSBsYXllciBhcyB3ZWxsP1xuICAgIHRoaXMuZGF0YS5zZXRTdHlsZSh0aGlzLmRtT3B0aW9ucyk7XG4gIH1cblxuICBhY3RpdmF0ZSgpOiBTaGFwZSB7XG4gICAgbGV0IHNoYXBlID0gc3VwZXIuYWN0aXZhdGUoKTtcblxuICAgIGxldCBkbSA9IHRoaXMuZG07XG5cbiAgICBkbS5zZXREcmF3aW5nTW9kZSh0aGlzLmRtSWQpO1xuICAgIGRtLnNldE9wdGlvbnMoe1xuICAgICAgW2Ake3RoaXMuZG1JZH1PcHRpb25zYF06IHRoaXMuZG1PcHRpb25zXG4gICAgfSk7XG4gICAgZG0uc2V0TWFwKHRoaXMubWFwKTtcblxuICAgIHRoaXMuc2V0dXBMaXN0ZW5lcnMoKTtcblxuICAgIHJldHVybiBzaGFwZTtcbiAgfVxuXG4gIGRlYWN0aXZhdGUoKSB7XG4gICAgc3VwZXIuZGVhY3RpdmF0ZSgpO1xuXG4gICAgbGV0IGRtID0gdGhpcy5kbTtcblxuICAgIC8vIFwiY2FzdGluZ1wiIHRvIGBhbnlgIGJlY2F1c2UgdGhlIHR5cGluZ3MgYXJlIHdyb25nIGluIGdvb2dsZW1hcHNcbiAgICBkbS5zZXREcmF3aW5nTW9kZShudWxsIGFzIGFueSk7XG4gICAgZG0uc2V0TWFwKG51bGwpO1xuXG4gICAgdGhpcy5jbGVhbnVwTGlzdGVuZXJzKCk7XG4gIH1cblxuICBwcml2YXRlIHNldHVwTGlzdGVuZXJzKCkge1xuICAgIGxldCBkbSA9IHRoaXMuZG07XG4gICAgbGV0IGxpc3RlbmVyID0gZG0uYWRkTGlzdGVuZXIoJ292ZXJsYXljb21wbGV0ZScsIChldmVudDogZ29vZ2xlLm1hcHMuZHJhd2luZy5PdmVybGF5Q29tcGxldGVFdmVudCkgPT4ge1xuICAgICAgbGV0IGZlYXR1cmUgPSBvdmVybGF5VG9GZWF0dXJlKGV2ZW50Lm92ZXJsYXkpO1xuXG4gICAgICBpZiAoZXZlbnQub3ZlcmxheSBpbnN0YW5jZW9mIGdvb2dsZS5tYXBzLkNpcmNsZSB8fCBldmVudC5vdmVybGF5IGluc3RhbmNlb2YgZ29vZ2xlLm1hcHMuUmVjdGFuZ2xlKSB7XG4gICAgICAgIGV2ZW50Lm92ZXJsYXkuc2V0TWFwKG51bGwpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmZlYXR1cmUgPSBmZWF0dXJlO1xuICAgICAgdGhpcy5kYXRhLmFkZChmZWF0dXJlKTtcbiAgICAgIHRoaXMuZGVhY3RpdmF0ZSgpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5mZWF0dXJlID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuZG1MaXN0ZW5lciA9IGxpc3RlbmVyO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhbnVwTGlzdGVuZXJzKCkge1xuICAgIGlmICh0aGlzLmRtTGlzdGVuZXIpIHtcbiAgICAgIGdvb2dsZS5tYXBzLmV2ZW50LnJlbW92ZUxpc3RlbmVyKHRoaXMuZG1MaXN0ZW5lcik7XG4gICAgfVxuICB9XG59XG4iXX0=