terra-draw-maplibre-gl-adapter
Version:
Terra Draw Adapter for Maplibre GL JS
3 lines (2 loc) • 8.64 kB
JavaScript
import{TerraDrawExtend as e}from"terra-draw";function t(){return t=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var i=arguments[t];for(var n in i)({}).hasOwnProperty.call(i,n)&&(e[n]=i[n])}return e},t.apply(null,arguments)}function i(e,t){return i=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},i(e,t)}var n=/*#__PURE__*/function(e){function n(t){var i;return(i=e.call(this,t)||this)._renderBeforeLayerId=void 0,i._prefixId=void 0,i._initialDragPan=void 0,i._initialDragRotate=void 0,i._nextRender=void 0,i._map=void 0,i._container=void 0,i.changedIds={deletion:!1,points:!1,linestrings:!1,polygons:!1,styling:!1},i._map=t.map,i._container=i._map.getContainer(),i._initialDragRotate=i._map.dragRotate.isEnabled(),i._initialDragPan=i._map.dragPan.isEnabled(),i._renderBeforeLayerId=t.renderBelowLayerId,i._prefixId=t.prefixId||"td",i}var r,a;a=e,(r=n).prototype=Object.create(a.prototype),r.prototype.constructor=r,i(r,a);var o=n.prototype;return o.hashCode=function(e){for(var t=0,i=0;i<e.length;i++)t=(t<<5)-t+e.charCodeAt(i),t|=0;return Math.abs(t)},o.resizeImage=function(e,t,i,n){var r=new Image;r.crossOrigin="anonymous",r.onload=function(){var e=document.createElement("canvas");e.width=t,e.height=i;var a=e.getContext("2d");if(!a)throw new Error("Could not get canvas context");a.drawImage(r,0,0,t,i);var o=e.toDataURL();n(o)},r.src=e},o.toGlDashArrayFromPixels=function(e,t){if(!e)return null;var i=e[0],n=e[1];if(!Number.isFinite(i)||!Number.isFinite(n)||i<0||n<0)return null;var r=Math.max(1e-4,t);return[i/r,n/r]},o.isMapLibreAtLeast=function(e){var t=this._map.version;if(!t)return!1;var i=function(e){var t=e.match(/(\d+)\.(\d+)\.(\d+)/);return t?[parseInt(t[1],10),parseInt(t[2],10),parseInt(t[3],10)]:null},n=i(t),r=i(e);if(!n||!r)return!0;var a=n[0],o=n[1],l=r[0],s=r[1];return a!==l?a>l:o!==s?o>s:n[2]>=r[2]},o._addGeoJSONSource=function(e,t){this._map.addSource(e,{type:"geojson",data:{type:"FeatureCollection",features:t},tolerance:0})},o._addFillLayer=function(e){return this._map.addLayer({id:e,source:e,type:"fill",layout:{"fill-sort-key":["get","zIndex"]},paint:{"fill-color":["get","polygonFillColor"],"fill-opacity":["get","polygonFillOpacity"]}})},o._addFillOutlineLayer=function(e){return this._map.addLayer({id:e+"-outline",source:e,type:"line",layout:{"line-sort-key":["get","zIndex"]},paint:{"line-width":["get","polygonOutlineWidth"],"line-color":["get","polygonOutlineColor"],"line-opacity":["get","polygonOutlineOpacity"]}})},o._addLineLayer=function(e){var i={};return this.isMapLibreAtLeast("5.8.0")&&(i["line-dasharray"]=["coalesce",["get","lineStringDash"],["literal",[1,0]]]),this._map.addLayer({id:e,source:e,type:"line",layout:{"line-sort-key":["get","zIndex"]},paint:t({},i,{"line-width":["get","lineStringWidth"],"line-color":["get","lineStringColor"],"line-opacity":["get","lineStringOpacity"]})})},o._addPointLayer=function(e){return this._map.addLayer({id:e,source:e,type:"circle",layout:{"circle-sort-key":["get","zIndex"]},paint:{"circle-stroke-color":["get","pointOutlineColor"],"circle-stroke-width":["get","pointOutlineWidth"],"circle-stroke-opacity":["get","pointOutlineOpacity"],"circle-radius":["get","pointWidth"],"circle-color":["get","pointColor"],"circle-opacity":["get","pointOpacity"]}})},o._addMarkerLayer=function(e){return this._map.addLayer({id:e+"-marker",source:e,type:"symbol",filter:["has","markerId"],layout:{"icon-image":["image",["get","markerId"]],"icon-anchor":"bottom","icon-allow-overlap":!0}})},o._addLayer=function(e,t){"Point"===t&&(this._addPointLayer(e),this._addMarkerLayer(e)),"LineString"===t&&this._addLineLayer(e),"Polygon"===t&&(this._addFillLayer(e),this._addFillOutlineLayer(e))},o._addGeoJSONLayer=function(e,t){var i=this._prefixId+"-"+e.toLowerCase();return this._addGeoJSONSource(i,t),this._addLayer(i,e),i},o._setGeoJSONLayerData=function(e,t){var i=this._prefixId+"-"+e.toLowerCase();return this._map.getSource(i).setData({type:"FeatureCollection",features:t}),i},o.updateChangedIds=function(e){var t=this;[].concat(e.updated,e.created).forEach(function(e){"Point"===e.geometry.type?t.changedIds.points=!0:"LineString"===e.geometry.type?t.changedIds.linestrings=!0:"Polygon"===e.geometry.type&&(t.changedIds.polygons=!0)}),e.deletedIds.length>0&&(this.changedIds.deletion=!0),0===e.created.length&&0===e.updated.length&&0===e.deletedIds.length&&(this.changedIds.styling=!0)},o.getLngLatFromEvent=function(e){var t=this._container.getBoundingClientRect();return this.unproject(e.clientX-t.left,e.clientY-t.top)},o.getMapEventElement=function(){return this._map.getCanvas()},o.setDraggability=function(e){e?(this._initialDragRotate&&this._map.dragRotate.enable(),this._initialDragPan&&this._map.dragPan.enable()):(this._initialDragRotate&&this._map.dragRotate.disable(),this._initialDragPan&&this._map.dragPan.disable())},o.project=function(e,t){var i=this._map.project({lng:e,lat:t});return{x:i.x,y:i.y}},o.unproject=function(e,t){var i=this._map.unproject({x:e,y:t});return{lng:i.lng,lat:i.lat}},o.setCursor=function(e){var t=this._map.getCanvas();"unset"===e?t.style.removeProperty("cursor"):t.style.cursor=e},o.setDoubleClickToZoom=function(e){e?this._map.doubleClickZoom.enable():this._map.doubleClickZoom.disable()},o.render=function(e,t){var i=this;this.updateChangedIds(e),this._nextRender&&cancelAnimationFrame(this._nextRender),this._nextRender=requestAnimationFrame(function(){if(i._currentModeCallbacks){for(var n=[].concat(e.created,e.updated,e.unchanged),r=[],a=[],o=[],l=function(){var e=n[s],l=e.properties,d=t[l.mode](e);if(l.zIndex=d.zIndex,l.zIndex=d.zIndex,"Point"===e.geometry.type){l.pointColor=d.pointColor,l.pointOutlineColor=d.pointOutlineColor,l.pointOutlineWidth=d.pointOutlineWidth;var p=d.pointOutlineOpacity;l.pointOutlineOpacity=void 0===p?1:p,l.pointWidth=d.pointWidth;var c=d.pointOpacity;if(l.pointOpacity=void 0===c?1:c,d.markerUrl&&d.markerWidth&&d.markerHeight){var g="marker-"+i.hashCode(d.markerUrl);i._map.hasImage(g)||i.resizeImage(d.markerUrl,d.markerWidth,d.markerHeight,function(e){i._map.loadImage(e).then(function(e){i._map.hasImage(g)||i._map.addImage(g,e.data)})}),l.markerId=g,l.pointWidth=0}r.push(e)}else if("LineString"===e.geometry.type){l.lineStringDash=i.toGlDashArrayFromPixels(d.lineStringDash,d.lineStringWidth),l.lineStringColor=d.lineStringColor,l.lineStringWidth=d.lineStringWidth;var h=d.lineStringOpacity;l.lineStringOpacity=void 0===h?1:h,a.push(e)}else if("Polygon"===e.geometry.type){var u=d.polygonOutlineOpacity;l.polygonFillColor=d.polygonFillColor,l.polygonFillOpacity=d.polygonFillOpacity,l.polygonOutlineOpacity=void 0===u?1:u,l.polygonOutlineColor=d.polygonOutlineColor,l.polygonOutlineWidth=d.polygonOutlineWidth,o.push(e)}},s=0;s<n.length;s++)l();var d=i.changedIds.deletion||i.changedIds.styling,p=d||i.changedIds.linestrings,c=d||i.changedIds.polygons;(d||i.changedIds.points)&&i._setGeoJSONLayerData("Point",r),p&&i._setGeoJSONLayerData("LineString",a),c&&i._setGeoJSONLayerData("Polygon",o),i.changedIds={points:!1,linestrings:!1,polygons:!1,deletion:!1,styling:!1}}})},o.clear=function(){this._currentModeCallbacks&&(this._currentModeCallbacks.onClear(),this._nextRender&&(cancelAnimationFrame(this._nextRender),this._nextRender=void 0),this._setGeoJSONLayerData("Point",[]),this._setGeoJSONLayerData("LineString",[]),this._setGeoJSONLayerData("Polygon",[]))},o.getCoordinatePrecision=function(){return e.prototype.getCoordinatePrecision.call(this)},o.unregister=function(){e.prototype.unregister.call(this),this.changedIds={points:!1,linestrings:!1,polygons:!1,deletion:!1,styling:!1},this._map.removeLayer(this._prefixId+"-point"),this._map.removeLayer(this._prefixId+"-point-marker"),this._map.removeSource(this._prefixId+"-point"),this._map.removeLayer(this._prefixId+"-linestring"),this._map.removeSource(this._prefixId+"-linestring"),this._map.removeLayer(this._prefixId+"-polygon"),this._map.removeLayer(this._prefixId+"-polygon-outline"),this._map.removeSource(this._prefixId+"-polygon")},o.register=function(t){var i;e.prototype.register.call(this,t);var n,r=this._addGeoJSONLayer("Polygon",[]),a=this._addGeoJSONLayer("LineString",[]),o=this._addGeoJSONLayer("Point",[]);this._renderBeforeLayerId&&(this._map.moveLayer(o,this._renderBeforeLayerId),this._map.moveLayer(a,o),this._map.moveLayer(r+"-outline",a),this._map.moveLayer(r,r+"-outline")),null!=(i=this._currentModeCallbacks)&&i.onReady&&(null==(n=this._currentModeCallbacks)||n.onReady())},n}(e.TerraDrawBaseAdapter);export{n as TerraDrawMapLibreGLAdapter};
//# sourceMappingURL=terra-draw-maplibre-gl-adapter.module.js.map