123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- /**
- * @class L.Draw.Polygon
- * @aka Draw.Polygon
- * @inherits L.Draw.Polyline
- */
- L.Draw.Polygon = L.Draw.Polyline.extend({
- statics: {
- TYPE: 'polygon'
- },
- Poly: L.Polygon,
- options: {
- showArea: false,
- shapeOptions: {
- stroke: true,
- color: '#3388ff',
- weight: 4,
- opacity: 0.5,
- fill: true,
- fillColor: null, //same as color by default
- fillOpacity: 0.2,
- clickable: true
- },
- metric: true // Whether to use the metric measurement system or imperial
- },
- // @method initialize(): void
- initialize: function (map, options) {
- L.Draw.Polyline.prototype.initialize.call(this, map, options);
- // Save the type so super can fire, need to do this as cannot do this.TYPE :(
- this.type = L.Draw.Polygon.TYPE;
- },
- _updateFinishHandler: function () {
- var markerCount = this._markers.length;
- // The first marker should have a click handler to close the polygon
- if (markerCount === 1) {
- this._markers[0].on('click', this._finishShape, this);
- }
- // Add and update the double click handler
- if (markerCount > 2) {
- this._markers[markerCount - 1].on('dblclick', this._finishShape, this);
- // Only need to remove handler if has been added before
- if (markerCount > 3) {
- this._markers[markerCount - 2].off('dblclick', this._finishShape, this);
- }
- }
- },
- _getTooltipText: function () {
- var text, subtext;
- if (this._markers.length === 0) {
- text = L.drawLocal.draw.handlers.polygon.tooltip.start;
- } else if (this._markers.length < 3) {
- text = L.drawLocal.draw.handlers.polygon.tooltip.cont;
- } else {
- text = L.drawLocal.draw.handlers.polygon.tooltip.end;
- subtext = this._getMeasurementString();
- }
- return {
- text: text,
- subtext: subtext
- };
- },
- _getMeasurementString: function () {
- var area = this._area;
- if (!area) {
- return null;
- }
- return L.GeometryUtil.readableArea(area, this.options.metric);
- },
- _shapeIsValid: function () {
- return this._markers.length >= 3;
- },
- _vertexChanged: function (latlng, added) {
- var latLngs;
- // Check to see if we should show the area
- if (!this.options.allowIntersection && this.options.showArea) {
- latLngs = this._poly.getLatLngs();
- this._area = L.GeometryUtil.geodesicArea(latLngs);
- }
- L.Draw.Polyline.prototype._vertexChanged.call(this, latlng, added);
- },
- _cleanUpShape: function () {
- var markerCount = this._markers.length;
- if (markerCount > 0) {
- this._markers[0].off('click', this._finishShape, this);
- if (markerCount > 2) {
- this._markers[markerCount - 1].off('dblclick', this._finishShape, this);
- }
- }
- }
- });
|