mapboxgljs-ellipsis
Version:
Use Ellipsis Drive layers in mapboxgl.js projects.
1 lines • 4.96 kB
JavaScript
!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e(require("ellipsis-js-util")):"function"==typeof define&&define.amd?define(["ellipsis-js-util"],e):"object"==typeof exports?exports.MapboxgljsEllipsis=e(require("ellipsis-js-util")):t.MapboxgljsEllipsis=e(t["ellipsis-js-util"])}(self,(t=>(()=>{"use strict";var e={246:e=>{e.exports=t}},o={};function s(t){var i=o[t];if(void 0!==i)return i.exports;var r=o[t]={exports:{}};return e[t](r,r.exports,s),r.exports}s.d=(t,e)=>{for(var o in e)s.o(e,o)&&!s.o(t,o)&&Object.defineProperty(t,o,{enumerable:!0,get:e[o]})},s.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),s.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var i={};return(()=>{s.r(i),s.d(i,{AsyncEllipsisRasterLayer:()=>c,EllipsisApi:()=>d,EllipsisRasterLayer:()=>n,EllipsisVectorLayer:()=>p,default:()=>h});const t=s(246),e=e=>t?t[e]:window.EllipsisUtil[e],o=e("VectorLayerUtil"),r=e("EllipsisApi");class l extends o.EllipsisVectorLayerBase{constructor(t={}){t.propertyFilter=t.filter,delete t.filter,super(t),this.sourceId=t.id??`${this.id}_source`}getSource(){return this.source}getLayers(){return this.map&&this.map.getStyle()&&this.map.getStyle().layers?this.map.getStyle().layers.filter((t=>t.id.startsWith(this.sourceId))):[]}getZoomOffset(t){this.zoomOffset=t.precompute.vectorTileZoom||0===t.precompute.vectorTileZoom?t.precompute.vectorTileZoom:0}async addTo(t){this.map=t;let e=this.options.timestampId;const o=await r.getPath(this.options.pathId,{token:this.options.token});if(!this.options.timestampId){const t=o?.vector?.timestamps?.reverse().find((t=>!t.trashed&&!t.availability.blocked&&"active"===t.status))?.id;e=t}let s=this.options.styleId;this.options.styleId||(s=o?.vector.styles.find((t=>t.default))?.id);let i={hasTiles:!1,zoom:0};if(!e)throw new Error("No valid timestamp found in layer");const l=o?.vector?.timestamps.find((t=>t.id===e)),p="string"==typeof s||s instanceof String?s:JSON.stringify(s);this.zoomOffset||this.getZoomOffset(l);const a=this.options.onlyTiles?24:this.zoomOffset;if(l.precompute.hasVectorTiles){i={hasTiles:!0,zoom:l.precompute.vectorTileZoom,zoomFrom:a};let o=`/ogc/mvt/${this.options.pathId}/styleSheet?timestampId=${e}&style=${p}&zoom=21`;const s=await r.get(o,null,{token:this.options.token});let n=`${r.apiUrl}/ogc/mvt/${this.options.pathId}/{z}/{x}/{y}?zipTheResponse=true&style=${p}×tampId=${e}`;this.options.token&&(n=n+"&token="+this.options.token),console.log("important",i),t.addSource(this.sourceId+"-tiles",{type:"vector",tiles:[n],maxzoom:i.zoom}),t.addSource(this.sourceId,{type:"geojson",data:{type:"FeatureCollection",features:[]}});const u=s.layers;for(let e=0;e<u.length;e++){const o=u[e];let s={...o,source:this.sourceId+"-tiles",id:this.sourceId+"_tiles_"+o.id,minzoom:0,maxzoom:i.zoomFrom};this.options.propertyFilter&&(s.filter=this.options.propertyFilter),t.addLayer(s);const r={...o};delete r["source-layer"];let l={...r,source:this.sourceId,id:this.sourceId+"_json_"+o.id,minzoom:a,maxzoom:24};this.options.propertyFilter&&(l.filter=this.options.propertyFilter),t.addLayer(l)}}return(this.options.onFeatureClick||this.options.onFeatureHover)&&this.getLayers().forEach((e=>{t.on("click",e.id,(t=>this.options.onFeatureClick({geometry:t.features[0].geometry,properties:t.features[0].properties,layer:e},t))),t.on("mousemove",e.id,(o=>{t.getCanvas().style.cursor="pointer",this.options.onFeatureHover&&this.options.onFeatureHover({geometry:o.features[0].geometry,properties:o.features[0].properties,layer:e},o)}))})),this.source=t.getSource(this.sourceId),this.update(),this.options.loadAll||(t.on("zoom",(t=>{this.map.getZoom()<this.zoomOffset||this.update()})),t.on("moveend",(t=>{this.map.getZoom()<this.zoomOffset||this.update()}))),this}updateView=()=>{const t=this.getFeatures();t&&t.length&&this.getSource().setData({type:"FeatureCollection",features:t.map((t=>(t.properties.color=t.properties.color.slice(0,7),t)))})};getMapBounds=()=>{if(!this.map)return;const t=this.map.getBounds(),e=this.map.getZoom();return{bounds:{xMin:t.getWest(),xMax:t.getEast(),yMin:t.getSouth(),yMax:t.getNorth()},zoom:parseInt(e+1,10)}}}const p=l,a=e("RasterLayerUtil"),n=class{constructor(t){t.url?this.url=t.url:this.url=a.getSlippyMapUrl(t),t.id?this.id=t.id:this.id=a.getLayerId(t),this.options=t}addTo(t){this.source=`${this.id}_source`;const e={...this.options,type:"raster",tiles:[this.url],tileSize:256,maxZoom:this.options.zoom};return delete e.url,console.log("URL",e),t.addSource(this.source,e),t.addLayer({...this.options,id:this.id,type:"raster",source:`${this.id}_source`}),this}},u=e("RasterLayerUtil"),c=async t=>{let e=await u.getSlippyMapUrlWithDefaults(t);return new n(e)},d=e("EllipsisApi"),h={RasterLayer:t=>new n(t),VectorLayer:t=>new p(t),AsyncEllipsisRasterLayer:async t=>await c(t),EllipsisApi:d}})(),i})()));