networkService.js 2.8 KB

12345
  1. /*
  2. All material copyright ESRI, All Rights Reserved, unless otherwise specified.
  3. See https://js.arcgis.com/4.24/esri/copyright.txt for details.
  4. */
  5. import e from"../request.js";import r from"../core/Error.js";import{isSome as t}from"../core/maybe.js";import{getDeepValue as o}from"../core/object.js";import{removeTrailingSlash as s}from"../core/urlUtils.js";import{asValidOptions as a,parseUrl as l}from"./utils.js";import n from"./support/NetworkServiceDescription.js";function i(e,r,t,o){o[t]=[r.length,r.length+e.length],e.forEach((e=>{r.push(e.geometry)}))}function d(e,r){for(let t=0;t<r.length;t++){const o=e[r[t]];if(o&&o.length)for(const e of o)e.z=void 0}console.log("The remote Network Analysis service is powered by a network dataset which is not Z-aware.\nZ-coordinates of the input geometry are ignored.")}function u(e,r){for(let o=0;o<r.length;o++){const s=e[r[o]];if(s&&s.length)for(const e of s)if(t(e)&&e.hasZ)return!0}return!1}async function f(t,o,s){if(!t)throw new r("network-service:missing-url","Url to Network service is missing");const l=a({f:"json",token:o},s),{data:i}=await e(t,l);i.supportedTravelModes||(i.supportedTravelModes=[]);for(let e=0;e<i.supportedTravelModes.length;e++)i.supportedTravelModes[e].id||(i.supportedTravelModes[e].id=i.supportedTravelModes[e].itemId);const d=i.currentVersion>=10.4?c(t,o,s):p(t,s),{defaultTravelMode:u,supportedTravelModes:f}=await d;return i.defaultTravelMode=u,i.supportedTravelModes=f,n.fromJSON(i)}async function p(r,t){const n=a({f:"json"},t),{data:i}=await e(r.replace(/\/rest\/.*$/i,"/info"),n);if(!i||!i.owningSystemUrl)return{supportedTravelModes:[],defaultTravelMode:null};const{owningSystemUrl:d}=i,u=s(d)+"/sharing/rest/portals/self",{data:f}=await e(u,n),p=o("helperServices.routingUtilities.url",f);if(!p)return{supportedTravelModes:[],defaultTravelMode:null};const c=l(d),v=/\/solve$/i.test(c.path)?"Route":/\/solveclosestfacility$/i.test(c.path)?"ClosestFacility":"ServiceAreas",m=a({f:"json",serviceName:v},t),T=s(p)+"/GetTravelModes/execute",M=await e(T,m),h=[];let w=null;if(M?.data?.results?.length){const e=M.data.results;for(const r of e)if("supportedTravelModes"===r.paramName){if(r.value?.features)for(const{attributes:e}of r.value.features)if(e){const r=JSON.parse(e.TravelMode);h.push(r)}}else"defaultTravelMode"===r.paramName&&(w=r.value)}return{supportedTravelModes:h,defaultTravelMode:w}}async function c(t,o,l){try{const r=a({f:"json",token:o},l),n=s(t)+"/retrieveTravelModes",{data:{supportedTravelModes:i,defaultTravelMode:d}}=await e(n,r);return{supportedTravelModes:i,defaultTravelMode:d}}catch(n){throw new r("network-service:retrieveTravelModes","Could not get to the NAServer's retrieveTravelModes.",{error:n})}}export{i as collectGeometries,d as dropZValuesOffInputGeometry,f as fetchServiceDescription,u as isInputGeometryZAware};