function latlngToArray(e) { if(e && e.lng && e.lat) return [e.lng, e.lat]; return [0,0]; } function latlngArrayToArray(e) { var out=[]; for(var i=0; iOpenStreetMap contributors, ' + 'CC-BY-SA, ' + 'Imagery © Mapbox', id: 'mapbox.streets' }).addTo(this.mapData.map); var t = this; this.mapData.map.on('click', function(e){t.onClick(e)}) this.mapData.map.on('contextmenu', function(e){t.onRightClick(e)}) } onClick(e) { this.mapData.lines.push(e.latlng); this.update(); } onRightClick(e) { this.mapData.point=e.latlng; this.update(); } update() { if(this.mapData.marker) this.mapData.marker.remove(); if(this.mapData.polygon) this.mapData.polygon.remove(); if(this.mapData.lines.length>1) { this.mapData.polygon = new L.polygon(this.mapData.lines, { color: 'red', weight: 3, opacity: 0.5, smoothFactor: 1 }); this.mapData.polygon.addTo(this.mapData.map); } if(this.mapData.point!=null) { this.mapData.marker = new L.circleMarker(this.mapData.point); this.mapData.marker.addTo(this.mapData.map); } } removePolygon() { if(this.mapData.polygon) this.mapData.polygon.remove(); this.mapData.lines=[]; } removeMarker() { if(this.mapData.marker) this.mapData.marker.remove(); this.mapData.point=null; } getJson() { return { coordinates: [latlngArrayToArray(this.mapData.lines)], point: { coordinates: latlngToArray(this.mapData.point) } } } setJson(obj) { this.mapData.lines=arrayToLatlngArray(obj.coordinates); this.mapData.point=arrayToLatlng(obj.point.coordinates); this.update(); if(this.mapData.point) this.mapData.map.setView(this.mapData.point); else if(this.mapData.lines.length>0) this.mapData.map.setView(this.mapData.lines[0]); } } registerUiClass("areapicker", UIAreaPicker);