12345 |
- /*
- All material copyright ESRI, All Rights Reserved, unless otherwise specified.
- See https://js.arcgis.com/4.25/esri/copyright.txt for details.
- */
- import e from"../request.js";import{isNone as r,isSome as t}from"../core/maybe.js";import{normalizeCentralMeridian as s}from"../geometry/support/normalizeUtils.js";import{collectGeometries as o,isInputGeometryZAware as a,fetchServiceDescription as i,dropZValuesOffInputGeometry as n}from"./networkService.js";import{parseUrl as u}from"./utils.js";import{routeParametersToQueryParameters as f}from"./route/utils.js";import p from"./support/FeatureSet.js";import c from"./support/RouteSolveResult.js";function l(e){return e instanceof p}async function m(r,t,p){const c=[],m=[],d={},g={},h=u(r),{path:R}=h;l(t.stops)&&o(t.stops.features,m,"stops.features",d),l(t.pointBarriers)&&o(t.pointBarriers.features,m,"pointBarriers.features",d),l(t.polylineBarriers)&&o(t.polylineBarriers.features,m,"polylineBarriers.features",d),l(t.polygonBarriers)&&o(t.polygonBarriers.features,m,"polygonBarriers.features",d);const v=await s(m);for(const e in d){const r=d[e];c.push(e),g[e]=v.slice(r[0],r[1])}if(a(g,c)){let e=null;try{e=await i(R,t.apiKey,p)}catch{}e&&!e.hasZ&&n(g,c)}for(const e in g)g[e].forEach(((r,s)=>{t.get(e)[s].geometry=r}));const B={...p,query:{...h.query,...f(t),f:"json"}},E=R.endsWith("/solve")?R:`${R}/solve`,{data:T}=await e(E,B);return y(T)}function y(e){const{barriers:s,directionLines:o,directionPoints:a,directions:i,messages:n,polygonBarriers:u,polylineBarriers:f,routes:p,stops:l,traversedEdges:m,traversedJunctions:y,traversedTurns:d}=e,g=e=>{const r=R.find((r=>r.routeName===e));if(t(r))return r;const s={routeId:R.length+1,routeName:e};return R.push(s),s},h=e=>{const r=R.find((r=>r.routeId===e));if(t(r))return r;const s={routeId:e,routeName:null};return R.push(s),s},R=[];p?.features.forEach(((e,r)=>{e.geometry.spatialReference=p.spatialReference;const t=e.attributes.Name,s=r+1;R.push({routeId:s,routeName:t,route:e})})),i?.forEach((e=>{const{routeName:r}=e;g(r).directions=e}));const v=(l?.features.every((e=>r(e.attributes.RouteName)))??!1)&&R.length>0?R[0].routeName:null;return l?.features.forEach((e=>{var r;e.geometry&&((r=e.geometry).spatialReference??(r.spatialReference=l.spatialReference));const t=v??e.attributes.RouteName,s=g(t);s.stops??(s.stops=[]),s.stops.push(e)})),o?.features.forEach((e=>{const r=e.attributes.RouteID,t=h(r),{geometryType:s,spatialReference:a}=o;t.directionLines??(t.directionLines={features:[],geometryType:s,spatialReference:a}),t.directionLines.features.push(e)})),a?.features.forEach((e=>{const r=e.attributes.RouteID,t=h(r),{geometryType:s,spatialReference:o}=a;t.directionPoints??(t.directionPoints={features:[],geometryType:s,spatialReference:o}),t.directionPoints.features.push(e)})),m?.features.forEach((e=>{const r=e.attributes.RouteID,t=h(r),{geometryType:s,spatialReference:o}=m;t.traversedEdges??(t.traversedEdges={features:[],geometryType:s,spatialReference:o}),t.traversedEdges.features.push(e)})),y?.features.forEach((e=>{const r=e.attributes.RouteID,t=h(r),{geometryType:s,spatialReference:o}=y;t.traversedJunctions??(t.traversedJunctions={features:[],geometryType:s,spatialReference:o}),t.traversedJunctions.features.push(e)})),d?.features.forEach((e=>{const r=e.attributes.RouteID,t=h(r);t.traversedTurns??(t.traversedTurns={features:[]}),t.traversedTurns.features.push(e)})),c.fromJSON({routeResults:R,barriers:s,polygonBarriers:u,polylineBarriers:f,messages:n})}export{m as solve};
|