@doegis/core
Version:
DOE GIS API
3 lines (1 loc) • 4.79 kB
JavaScript
import"../../core/has.js";import e from"../../core/Error.js";import{isSome as t}from"../../core/maybe.js";import n from"../HeightModelInfo.js";import{parse as i}from"../../layers/support/arcgisLayerUrl.js";function r(t,i){if(!t)return null;if(!c(t))return new e("webscene:unsupported-height-model-info","The vertical coordinate system of the scene is not supported",{heightModelInfo:t});const r=t.heightUnit,o=n.deriveUnitFromSR(t,i).heightUnit;return r!==o?new e("webscene:incompatible-height-unit",`The vertical units of the scene (${r}) must match the horizontal units of the scene (${o})`,{verticalUnit:r,horizontalUnit:o}):null}function o(t,i,r){const o=h(t),c=i,u=a(o,c,r);if(o){const i=n.deriveUnitFromSR(o,t.spatialReference).heightUnit;if(!r&&i!==o.heightUnit){const t=new e("layerview:unmatched-height-unit",`The vertical units of the layer must match the horizontal units (${i})`,{horizontalUnit:i});return new e("layerview:unsupported-height-model-info","The vertical coordinate system of the layer is not supported",{heightModelInfo:o,error:t})}}if(!l(t)||u===s.Unsupported)return new e("layerview:unsupported-height-model-info","The vertical coordinate system of the layer is not supported",{heightModelInfo:o});switch(u){case s.Units:{const t=o?.heightUnit||"unknown",n=c?.heightUnit||"unknown",i=new e("layerview:incompatible-height-unit",`The vertical units of the layer (${t}) must match the vertical units of the scene (${n})`,{layerUnit:t,sceneUnit:n});return new e("layerview:incompatible-height-model-info","The vertical coordinate system of the layer is incompatible with the scene",{layerHeightModelInfo:o,sceneHeightModelInfo:c,error:i})}case s.HeightModel:{const t=o?.heightModel||"unknown",n=c?.heightModel||"unknown",i=new e("layerview:incompatible-height-model",`The height model of the layer (${t}) must match the height model of the scene (${n})`,{layerHeightModel:t,sceneHeightModel:n});return new e("layerview:incompatible-height-model-info","The vertical coordinate system of the layer is incompatible with the scene",{layerHeightModelInfo:o,sceneHeightModelInfo:c,error:i})}case s.CRS:{const t=o?.vertCRS||"unknown",n=c?.vertCRS||"unknown",i=new e("layerview:incompatible-vertical-datum",`The vertical datum of the layer (${t}) must match the vertical datum of the scene (${n})`,{layerDatum:t,sceneDatum:n});return new e("layerview:incompatible-height-model-info","The vertical coordinate system of the layer is incompatible with the scene",{layerHeightModelInfo:o,sceneHeightModelInfo:c,error:i})}}return null}function a(e,t,n){if(!c(e)||!c(t))return s.Unsupported;if(null==e||null==t)return s.Ok;if(!n&&e.heightUnit!==t.heightUnit)return s.Units;if(e.heightModel!==t.heightModel)return s.HeightModel;switch(e.heightModel){case"gravity-related-height":return s.Ok;case"ellipsoidal":return e.vertCRS===t.vertCRS?s.Ok:s.CRS;default:return s.Unsupported}}var s;function c(e){return null==e||null!=e.heightModel&&null!=e.heightUnit}function l(e){return"heightModelInfo"in e&&null!=e.heightModelInfo||null!=e.spatialReference||!g(e)}function h(e){const r=e.url?i(e.url):void 0,o=e.spatialReference?.vcsWkid;return!(null==o&&t(r)&&"ImageServer"===r.serverType)&&u(e)&&e.heightModelInfo?e.heightModelInfo:g(e)?n.deriveUnitFromSR(p,e.spatialReference):null}function u(e){return"heightModelInfo"in e}function d(e){if("unknown"===e.type||!("capabilities"in e))return!1;switch(e.type){case"csv":case"feature":case"geojson":case"subtype-group":case"ogc-feature":case"oriented-imagery":case"wfs":case"knowledge-graph-sublayer":return!0;default:return!1}}function g(e){return d(e)?!!(e.capabilities&&e.capabilities.data&&e.capabilities.data.supportsZ):m(e)}function f(e){return null!=e.layers||m(e)||d(e)||u(e)}function m(e){switch(e.type){case"building-scene":case"elevation":case"integrated-mesh":case"point-cloud":case"scene":case"voxel":return!0;case"base-dynamic":case"base-elevation":case"base-tile":case"bing-maps":case"csv":case"dimension":case"geojson":case"feature":case"subtype-group":case"geo-rss":case"graphics":case"group":case"imagery":case"imagery-tile":case"kml":case"knowledge-graph":case"link-chart":case"knowledge-graph-sublayer":case"line-of-sight":case"map-image":case"map-notes":case"media":case"ogc-feature":case"open-street-map":case"oriented-imagery":case"route":case"stream":case"tile":case"unknown":case"unsupported":case"vector-tile":case"wcs":case"web-tile":case"wfs":case"wms":case"wmts":case null:return!1}return!1}!function(e){e[e.Ok=0]="Ok",e[e.Units=1]="Units",e[e.HeightModel=2]="HeightModel",e[e.CRS=3]="CRS",e[e.Unsupported=4]="Unsupported"}(s||(s={}));const p=new n({heightModel:"gravity-related-height"});export{h as deriveHeightModelInfoFromLayer,o as rejectLayerError,f as supportsHeightModelInfo,r as validateWebSceneError};