google-maps-draw-shape-lib
Version:
javascript library that allows drawing a polygon shape over a Google Map and get it's coordinates
3 lines (2 loc) • 11.5 kB
JavaScript
;Object.defineProperty(exports,"__esModule",{value:!0});var e=require("jsts/dist/jsts");function t(){return(t=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var a in n)Object.prototype.hasOwnProperty.call(n,a)&&(e[a]=n[a])}return e}).apply(this,arguments)}var n=0;function a(e){return"__private_"+n+++"_"+e}function r(e,t){if(!Object.prototype.hasOwnProperty.call(e,t))throw new TypeError("attempted to use private field on non-instance");return e}var o=function e(t,n,a){var r=this;this.onAdd=function(){r.div=document.createElement("div"),r.div.style.cssText="position: absolute; transform: translate(-50%, -50%);",r.div.innerHTML=r.content,r.callback&&google.maps.event.addDomListener(r.div,"click",r.callback),r.getPanes().floatPane.appendChild(r.div)},this.onRemove=function(){r.div&&(google.maps.event.clearInstanceListeners(r.div),r.div.parentNode.removeChild(r.div),delete r.div)},this.close=function(){r.setMap(null)},this.draw=function(){var e=r.position,t=r.getProjection();if(e&&t){var n=t.fromLatLngToDivPixel(e);r.div&&(r.div.style.top=n.y+"px",r.div.style.left=n.x+"px")}},this.show=function(e){r.setMap(e),r.draw()},this.remove=function(){r.close()},this.extend=function(e,t){for(var n in t.prototype)e.prototype[n]=t.prototype[n]},this.content=t,this.position=n,this.callback=a,this.extend(e,google.maps.OverlayView)},i=function(){};i.getZoom=function(e){return e.getZoom()},i.getBounds=function(e){var t=e.getBounds(),n=t.getNorthEast(),a=t.getSouthWest();return{nw:{lat:n.lat(),lng:a.lng()},se:{lat:a.lat(),lng:n.lng()}}},i.pointToLatLng=function(e,t){var n=e.getDiv().getBoundingClientRect(),a=t.clientX-n.left,r=t.clientY-n.top,o=e.getProjection(),l=e.getBounds(),s=l.getNorthEast(),g=l.getSouthWest(),p=o.fromLatLngToPoint(s),d=o.fromLatLngToPoint(g),c=i.getZoom(e),u=Math.pow(2,c);return o.fromPointToLatLng(new google.maps.Point(a/u+d.x,r/u+p.y))},i.freezeMap=function(e,t){e.setOptions({draggable:!t,scrollwheel:!t,draggableCursor:t?"pointer":null,disableDoubleClickZoom:t})},i.enableCrossair=function(e,t){e.setOptions({draggableCursor:t?"crosshair":null,disableDoubleClickZoom:t})};var l=a("simplifyPolygon"),s=a("convertFromJstsGeometry"),g=a("convertFromJstsCoordinates"),p=a("validateGeometry"),d=a("addPolygon"),c=a("addLineString"),u=a("toPolygonGeometry"),f=function(){};f.processShape=function(t,n){var a=[];if((null==t?void 0:t.length)>2){for(var o=[],i=[],l=null,g=0;g<t.length;g++)l?(i.push(n?new e.geom.Coordinate(t[g].lng,t[g].lat):new google.maps.LatLng(t[g].lat,t[g].lng)),l.lat===t[g].lat&&l.lng===t[g].lng?(i.length>3&&o.push(i),l=null):g===t.length-1&&(i.push(i[0]),i.length>3&&o.push(i))):(l=t[g],(i=[]).push(n?new e.geom.Coordinate(t[g].lng,t[g].lat):new google.maps.LatLng(t[g].lat,t[g].lng)));if(n){if(o.length>0){var d=new e.geom.GeometryFactory,c=o.map((function(e){var t=d.createLinearRing(e);return d.createPolygon(t)})),u=c.length>1?d.createMultiPolygon(c):c[0],h=r(f,p)[p](u);h&&h.getCoordinates().length&&(a=r(f,s)[s](h))}}else a=o}return a},f.processPolygon=function(t,n){var a=[];if((null==t?void 0:t.length)>2){var o=t.map((function(t){return new e.geom.Coordinate(t.lng(),t.lat())}));o.length>0&&o.push(o[0]);var i=new e.geom.GeometryFactory,g=i.createLinearRing(o),d=i.createPolygon(g);n&&(d=r(f,l)[l](d,n));var c=r(f,p)[p](d);c&&c.getCoordinates().length&&(a=r(f,s)[s](c))}return a},Object.defineProperty(f,l,{writable:!0,value:function(t,n){var a=.1;switch(n){case 7:case 8:case 9:a=.01;break;case 10:case 11:case 12:case 13:a=.001;break;case 14:case 15:case 16:case 17:a=1e-4;break;case 18:case 19:case 20:case 21:case 22:a=1e-5;break;default:a=.1}return e.simplify.TopologyPreservingSimplifier.simplify(t,a)}}),Object.defineProperty(f,s,{writable:!0,value:function(t){var n=[];if(t.normalize(),t instanceof e.geom.Polygon){var a=r(f,g)[g](t.getCoordinates());n.push(a)}if(t instanceof e.geom.MultiPolygon)for(var o=t.getNumGeometries();o>0;o--){var i=r(f,g)[g](t.getGeometryN(o-1).getCoordinates());n.push(i)}return n}}),Object.defineProperty(f,g,{writable:!0,value:function(e){var t=[];if(e)for(var n=null,a=0;a<e.length;a++)n&&n.x===e[a].x&&n.y===e[a].y||(n=e[a],t.push(new google.maps.LatLng(n.y,n.x)));return t}}),Object.defineProperty(f,p,{writable:!0,value:function(t){if(t instanceof e.geom.Polygon){if(t.isValid())return t;var n=new e.operation.polygonize.Polygonizer;return r(f,d)[d](t,n),r(f,u)[u](n.getPolygons())}if(t instanceof e.geom.MultiPolygon){if(t.isValid())return t;for(var a=new e.operation.polygonize.Polygonizer,o=t.getNumGeometries();o>0;o--)r(f,d)[d](t.getGeometryN(o-1),a);return r(f,u)[u](a.getPolygons())}return t}}),Object.defineProperty(f,d,{writable:!0,value:function(e,t){r(f,c)[c](e.getExteriorRing(),t);for(var n=e.getNumInteriorRing();n>0;n--)r(f,c)[c](e.getInteriorRingN(n),t)}}),Object.defineProperty(f,c,{writable:!0,value:function(t,n){t instanceof e.geom.LinearRing&&(t=t.getFactory().createLineString(t.getCoordinateSequence()));var a=t.getFactory().createPoint(t.getCoordinateN(0)),r=t.union(a);n.add(r)}}),Object.defineProperty(f,u,{writable:!0,value:function(e){switch(e.size()){case 0:return null;case 1:return e.iterator().next();default:for(var t=e.iterator(),n=t.next();t.hasNext();)n=n.symDifference(t.next());return n}}});var h=a("setInitialDrawPoint"),w=a("setDeleteDrawPoint"),m=a("getDrawnShapeHighestPoint"),v=a("initDraw"),y=a("draw"),P=a("drawComplete"),D=a("clearDrawListeners"),b=a("initDrawFreeHand"),S=a("drawFreeHand"),L=a("drawFreeHandComplete"),O=a("clearDrawFreeHandListeners");exports.default=function(e,n,a,l,s,g,p){var d=this;this.initDrawnShape=function(e){if((null==e?void 0:e.length)>0&&!d.drawnShape){var n=f.processShape(e);n.length>0&&(d.drawnShape=[],n.forEach((function(e){d.drawnShape.push(new google.maps.Polygon(t({path:e},d.polygonOptions)))})),r(d,w)[w]())}},this.resetDrawnShape=function(){d.drawnShape&&d.drawnShape.forEach((function(e){return e.setMap(null)})),d.deleteDrawnShape&&d.deleteDrawnShape.remove(),d.drawnShape=null,d.deleteDrawnShape=null},this.setDrawFreeHandMode=function(e){d.startedDrawing||d.startedDrawingFreeHand||(d.drawFreeHandMode=e)},this.setDrawingMode=function(e){e?(d.drawnShape&&d.drawnShape.forEach((function(e){return e.setMap(null)})),d.deleteDrawnShape&&d.deleteDrawnShape.remove(),d.drawFreeHandMode?r(d,b)[b]():r(d,v)[v]()):(d.initialDrawPoint&&d.initialDrawPoint.remove(),d.initialDrawPoint=null,d.drawFreeHandMode?d.startedDrawingFreeHand&&(d.startedDrawingFreeHand=!1,i.freezeMap(d.map,!1),d.drawnShape&&d.drawnShape.forEach((function(e){return e.setMap(d.map)})),d.deleteDrawnShape&&d.deleteDrawnShape.show(d.map),r(d,O)[O]()):d.startedDrawing&&(d.startedDrawing=!1,i.enableCrossair(d.map,!1),d.drawnPolylineDraft&&d.drawnPolylineDraft.setMap(null),d.drawnPolygonDraft&&d.drawnPolygonDraft.setMap(null),d.drawnPolylineDraft=null,d.drawnPolygonDraft=null,d.drawnShape&&d.drawnShape.forEach((function(e){return e.setMap(d.map)})),d.deleteDrawnShape&&d.deleteDrawnShape.show(d.map),r(d,D)[D]()))},Object.defineProperty(this,h,{writable:!0,value:function(e,t){d.initialDrawPoint=new o(d.initialPointInnerHtml,e,t),d.initialDrawPoint.show(d.map)}}),Object.defineProperty(this,w,{writable:!0,value:function(){d.deleteDrawnShape=new o(d.deletePointInnerHtml,r(d,m)[m](),(function(){d.drawnShape&&d.drawnShape.forEach((function(e){return e.setMap(null)})),d.deleteDrawnShape&&d.deleteDrawnShape.remove(),d.drawnShape=null,d.deleteDrawnShape=null,d.callback([])})),d.startedDrawing||d.startedDrawingFreeHand||(d.drawnShape.forEach((function(e){return e.setMap(d.map)})),d.deleteDrawnShape.show(d.map))}}),Object.defineProperty(this,m,{writable:!0,value:function(){var e=null,t=0;return d.drawnShape.forEach((function(n){n.getPath().getArray().forEach((function(n){var a=n.lat();a>t&&(t=a,e=n)}))})),e}}),Object.defineProperty(this,v,{writable:!0,value:function(){d.startedDrawing||(d.startedDrawing=!0,i.enableCrossair(d.map,!0),r(d,y)[y]())}}),Object.defineProperty(this,y,{writable:!0,value:function(){d.drawnPolylineDraft=new google.maps.Polyline(t({map:d.map},d.polygonOptions)),d.drawnPolygonDraft=new google.maps.Polygon(t({map:d.map},d.polygonOptions,{strokeOpacity:0})),google.maps.event.addDomListener(d.map.getDiv(),"click",(function(e){var t=i.pointToLatLng(d.map,e);d.initialDrawPoint||r(d,h)[h](t,(function(){n.removeAt(n.length-1),r(d,P)[P]()}));var n=d.drawnPolylineDraft.getPath();n.length>0&&n.removeAt(n.length-1),n.push(t),n.push(t),d.drawnPolygonDraft.setPath(n)})),google.maps.event.addDomListener(d.map.getDiv(),"mousemove",(function(e){var t=d.drawnPolylineDraft.getPath();if(t.length>0){var n=i.pointToLatLng(d.map,e);t.setAt(t.length-1,n)}})),google.maps.event.addListenerOnce(d.map,"dblclick",(function(){setTimeout((function(){r(d,P)[P]()}),1)}))}}),Object.defineProperty(this,P,{writable:!0,value:function(){r(d,D)[D](),d.startedDrawing=!1,i.enableCrossair(d.map,!1),d.initialDrawPoint&&d.initialDrawPoint.remove(),d.initialDrawPoint=null,d.drawnPolylineDraft.setMap(null),d.drawnPolygonDraft.setMap(null);var e=f.processPolygon(d.drawnPolygonDraft.getPath().getArray());if(e.length>0){d.drawnShape=[];var n=[];e.forEach((function(e){d.drawnShape.push(new google.maps.Polygon(t({path:e},d.polygonOptions))),n=n.concat(e.map((function(e){return{lat:e.lat(),lng:e.lng()}})))})),r(d,w)[w](),d.callback(n)}else r(d,v)[v]()}}),Object.defineProperty(this,D,{writable:!0,value:function(){google.maps.event.clearListeners(d.map.getDiv(),"click"),google.maps.event.clearListeners(d.map.getDiv(),"mousemove"),google.maps.event.clearListeners(d.map,"dblclick")}}),Object.defineProperty(this,b,{writable:!0,value:function(){d.startedDrawingFreeHand||(d.startedDrawingFreeHand=!0,i.freezeMap(d.map,!0),r(d,S)[S]())}}),Object.defineProperty(this,S,{writable:!0,value:function(){d.drawnPolylineDraft=new google.maps.Polyline(t({map:d.map},d.polygonOptions)),google.maps.event.addListenerOnce(d.map,"mousedown",(function(e){event.preventDefault(),event.stopPropagation(),d.initialDrawPoint||r(d,h)[h](e.latLng),d.drawnPolylineDraft.getPath().push(e.latLng),google.maps.event.addListener(d.map,"mousemove",(function(e){d.drawnPolylineDraft.getPath().push(e.latLng)})),google.maps.event.addListenerOnce(d.map,"mouseup",(function(){r(d,L)[L]()}))}))}}),Object.defineProperty(this,L,{writable:!0,value:function(){r(d,O)[O](),d.startedDrawingFreeHand=!1,i.freezeMap(d.map,!1),d.initialDrawPoint&&d.initialDrawPoint.remove(),d.initialDrawPoint=null,d.drawnPolylineDraft.setMap(null);var e=f.processPolygon(d.drawnPolylineDraft.getPath().getArray(),i.getZoom(d.map));if(e.length>0){d.drawnShape=[];var n=[];e.forEach((function(e){d.drawnShape.push(new google.maps.Polygon(t({path:e},d.polygonOptions))),n=n.concat(e.map((function(e){return{lat:e.lat(),lng:e.lng()}})))})),r(d,w)[w](),d.callback(n)}else r(d,b)[b]()}}),Object.defineProperty(this,O,{writable:!0,value:function(){google.maps.event.clearListeners(d.map,"mousedown"),google.maps.event.clearListeners(d.map,"mousemove"),google.maps.event.clearListeners(d.map,"mouseup")}}),this.map=e,this.callback=n,this.drawFreeHandMode=l,this.polygonOptions=s,this.initialPointInnerHtml=g,this.deletePointInnerHtml=p,this.initialDrawPoint=null,this.startedDrawing=!1,this.startedDrawingFreeHand=!1,this.drawnPolylineDraft=null,this.drawnPolygonDraft=null,this.drawnShape=null,this.deleteDrawnShape=null,this.setDrawingMode(a)};
//# sourceMappingURL=google-maps-draw-shape-lib.cjs.production.min.js.map