@arcgis/core
Version:
ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API
6 lines (5 loc) • 1.62 kB
JavaScript
/*
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
See https://js.arcgis.com/4.33/esri/copyright.txt for details.
*/
import{isIntegratedMeshLayer as e}from"../../../layers/support/layerUtils.js";import{LayerClass as a}from"../terrain/LayerClass.js";import{hitTestSelectSimilarDistance as r}from"../../support/hitTestSelectUtils.js";async function t(a,t){const{results:o,ground:l}=await r(a,t),y=(!l.layer||!e(l.layer.type))&&l.mapPoint,c=[],p=i(a),d=y?s(a,p):n;let u=0,f=0;const m=()=>{const e=d.layerViews[f];y&&e&&"fetchPopupFeaturesAtLocation"in e&&c.push({mapPoint:l.mapPoint,layerView:e}),++f};let w=null;for(;u<o.length||f<d.layerViews.length;){const e=o[u];if(e&&"graphic"!==e.type)++u;else if("scene"!==e?.layer?.type||e?.layer?.parent!==a?.map?.basemap)if(e){const a=e.layer?.uid,r=d.layerUids.has(a)&&e.distance===l.distance,t=p.get(e.layer?.uid);if(w??=e.mapPoint,f<d.layerViews.length&&(r||(e.distance??0)>l.distance)&&d.layerViews[f]!==t){m();continue}c.push({graphic:e.graphic,layerView:t}),++u}else m();else++u}return w??=l.mapPoint,{hits:c,location:w}}function s(e,r){const t=new Set,s=new Set;for(let i=e.basemapTerrain.numLayers(a.MAP)-1;i>=0;i--){const r=e.basemapTerrain.layerViewByIndex(i,a.MAP);t.add(r.layer.uid),s.add(r)}const n=e.basemapTerrain.overlayManager.renderer.layers;for(const{uid:a}of n){const e=r.get(a);e&&(t.add(a),s.add(e))}return{layerUids:t,layerViews:Array.from(s).reverse()}}const n={layerUids:new Set,layerViews:[]};function i(e){const a=new Map;for(const r of e.allLayerViews){const e=r.layer.uid;a.set(e,r)}return a}export{t as popupHitTest};