BingMapsLayer.js 5.9 KB

12345
  1. /*
  2. All material copyright ESRI, All Rights Reserved, unless otherwise specified.
  3. See https://js.arcgis.com/4.25/esri/copyright.txt for details.
  4. */
  5. import{_ as e}from"../chunks/tslib.es6.js";import t from"../request.js";import r from"../core/Error.js";import{JSONMap as a}from"../core/jsonMap.js";import{isSome as o,isNone as s}from"../core/maybe.js";import{MultiOriginJSONMixin as i}from"../core/MultiOriginJSONSupport.js";import{property as l}from"../core/accessorSupport/decorators/property.js";import"../core/arrayUtils.js";import"../core/accessorSupport/ensureType.js";import{subclass as n}from"../core/accessorSupport/decorators/subclass.js";import p from"../geometry/SpatialReference.js";import u from"./BaseTileLayer.js";import{BlendLayer as g}from"./mixins/BlendLayer.js";import{OperationalLayer as d}from"./mixins/OperationalLayer.js";import y from"./support/TileInfo.js";const c=new a({BingMapsAerial:"aerial",BingMapsRoad:"road",BingMapsHybrid:"hybrid"}),h="https://dev.virtualearth.net";let m=class extends(g(d(i(u)))){constructor(e){super(e),this.type="bing-maps",this.tileInfo=new y({size:[256,256],dpi:96,origin:{x:-20037508.342787,y:20037508.342787,spatialReference:p.WebMercator},spatialReference:p.WebMercator,lods:[{level:1,resolution:78271.5169639999,scale:295828763.795777},{level:2,resolution:39135.7584820001,scale:147914381.897889},{level:3,resolution:19567.8792409999,scale:73957190.948944},{level:4,resolution:9783.93962049996,scale:36978595.474472},{level:5,resolution:4891.96981024998,scale:18489297.737236},{level:6,resolution:2445.98490512499,scale:9244648.868618},{level:7,resolution:1222.99245256249,scale:4622324.434309},{level:8,resolution:611.49622628138,scale:2311162.217155},{level:9,resolution:305.748113140558,scale:1155581.108577},{level:10,resolution:152.874056570411,scale:577790.554289},{level:11,resolution:76.4370282850732,scale:288895.277144},{level:12,resolution:38.2185141425366,scale:144447.638572},{level:13,resolution:19.1092570712683,scale:72223.819286},{level:14,resolution:9.55462853563415,scale:36111.909643},{level:15,resolution:4.77731426794937,scale:18055.954822},{level:16,resolution:2.38865713397468,scale:9027.977411},{level:17,resolution:1.19432856685505,scale:4513.988705},{level:18,resolution:.597164283559817,scale:2256.994353},{level:19,resolution:.298582141647617,scale:1128.497176},{level:20,resolution:.1492910708238085,scale:564.248588}]}),this.key=null,this.style="road",this.culture="en-US",this.region=null,this.portalUrl=null,this.hasAttributionData=!0}get bingMetadata(){return this._get("bingMetadata")}set bingMetadata(e){this._set("bingMetadata",e)}get copyright(){return o(this.bingMetadata)?this.bingMetadata.copyright:null}get operationalLayerType(){return c.toJSON(this.style)}get bingLogo(){return o(this.bingMetadata)?this.bingMetadata.brandLogoUri:null}load(e){return this.key?this.addResolvingPromise(this._getMetadata()):this.portalUrl?this.addResolvingPromise(this._getPortalBingKey().then((()=>this._getMetadata()))):this.addResolvingPromise(Promise.reject(new r("bingmapslayer:load","Bing layer must have bing key."))),Promise.resolve(this)}getTileUrl(e,t,r){if(!this.loaded||s(this.bingMetadata))return null;const a=this.bingMetadata.resourceSets[0].resources[0],o=a.imageUrlSubdomains[t%a.imageUrlSubdomains.length],i=this._getQuadKey(e,t,r);return a.imageUrl.replace("{subdomain}",o).replace("{quadkey}",i)}async fetchAttributionData(){return this.load().then((()=>{if(s(this.bingMetadata))return null;return{contributors:this.bingMetadata.resourceSets[0].resources[0].imageryProviders.map((e=>({attribution:e.attribution,coverageAreas:e.coverageAreas.map((e=>({zoomMin:e.zoomMin,zoomMax:e.zoomMax,score:1,bbox:[e.bbox[0],e.bbox[1],e.bbox[2],e.bbox[3]]})))})))}}))}_getMetadata(){const e={road:"roadOnDemand",aerial:"aerial",hybrid:"aerialWithLabelsOnDemand"}[this.style];return t(`${h}/REST/v1/Imagery/Metadata/${e}`,{responseType:"json",query:{include:"ImageryProviders",uriScheme:"https",key:this.key,suppressStatus:!0,output:"json",culture:this.culture,userRegion:this.region}}).then((e=>{const t=e.data;if(200!==t.statusCode)throw new r("bingmapslayer:getmetadata",t.statusDescription);if(this.bingMetadata=t,0===this.bingMetadata.resourceSets.length)throw new r("bingmapslayer:getmetadata","no bing resourcesets");if(0===this.bingMetadata.resourceSets[0].resources.length)throw new r("bingmapslayer:getmetadata","no bing resources")})).catch((e=>{throw new r("bingmapslayer:getmetadata",e.message)}))}_getPortalBingKey(){return t(this.portalUrl??"",{responseType:"json",authMode:"no-prompt",query:{f:"json"}}).then((e=>{if(!e.data.bingKey)throw new r("bingmapslayer:getportalbingkey","The referenced Portal does not contain a valid bing key");this.key=e.data.bingKey})).catch((e=>{throw new r("bingmapslayer:getportalbingkey",e.message)}))}_getQuadKey(e,t,r){let a="";for(let o=e;o>0;o--){let e=0;const s=1<<o-1;0!=(r&s)&&(e+=1),0!=(t&s)&&(e+=2),a+=e.toString()}return a}};e([l({json:{read:!1,write:!1},value:null})],m.prototype,"bingMetadata",null),e([l({json:{read:!1,write:!1},value:"bing-maps",readOnly:!0})],m.prototype,"type",void 0),e([l({type:y})],m.prototype,"tileInfo",void 0),e([l({type:String,readOnly:!0,json:{read:!1,write:!1}})],m.prototype,"copyright",null),e([l({type:String,json:{write:!1,read:!1}})],m.prototype,"key",void 0),e([l({type:c.apiValues,nonNullable:!0,json:{read:{source:"layerType",reader:c.read}}})],m.prototype,"style",void 0),e([l({type:["BingMapsAerial","BingMapsHybrid","BingMapsRoad"]})],m.prototype,"operationalLayerType",null),e([l({type:String,json:{write:!1,read:!1}})],m.prototype,"culture",void 0),e([l({type:String,json:{write:!1,read:!1}})],m.prototype,"region",void 0),e([l({type:String,json:{write:!0,read:!0}})],m.prototype,"portalUrl",void 0),e([l({type:Boolean,json:{write:!1,read:!1}})],m.prototype,"hasAttributionData",void 0),e([l({type:String,readOnly:!0})],m.prototype,"bingLogo",null),m=e([n("esri.layers.BingMapsLayer")],m);const b=m;export{b as default};