Suite

FeatureLayer fullExtent est restreint par le panneau latéral Dojo ContentPane


J'ai une application ArcGIS JavaScript qui affiche une seule FeatureLayer sur une carte qui se trouve dans un modèle Dojo BorderContainer/ContentPane similaire à celui illustré ici. J'essaie d'initialiser la carte dans toute l'étendue de la seule FeatureLayer. J'accomplis ceci comme ceci :

map.on("layers-add-result", function(evt){ map.setExtent(evt.layers[0].layer.fullExtent) });

Cependant, je constate que les points aux extrémités de la carte sont coupés. Plus précisément, il s'agit d'une couche de points à travers l'est et le centre-ouest des États-Unis, mais il y a quelques points en Californie et un en France. Les points en CA et en France sont hors de l'étendue de la carte.

Mon intuition était que l'étendue est définie en supposant qu'il n'y a pas de panneau latéral ContentPane, puis forcé dans la plus petite fenêtre une fois que le ContentPane est rendu. J'ai testé cette théorie en créant une carte qui s'étend sur 100% de la largeur de la page. Effectivement, le problème a disparu.

Comment puis-je m'assurer quemap.setExtent()prend en compte les panneaux latéraux ContentPane ? je demande déjàdomPrêt !et appeleranalyseur.parse(). Y a-t-il autre chose qui me manque ?

Edité avec plus de détails le 24/02

J'ai oublié d'ajouter que j'ai une FeatureTable qui sert essentiellement de table attributaire pour les points de la FeatureLayer. J'ai configuré la carte pour effectuer un zoom arrière au maximum lorsque la sélection FeatureTable est effacée. Lorsque ce zoom arrière se produit, la carte effectue un zoom dans les limites correctes et inclut tous les points. Cela renforce ma théorie selon laquelle l'appel initial à map.setExtent n'est pas "conscient" de la plus petite fenêtre de la carte lors du chargement initial de la page, mais il est plus tard une fois que la page est complètement chargée.


Essayez d'appelermap.resize()après le rendu du ContentPane et le redimensionnement de la division de la carte. Vous devrez peut-être également utilisermap.reposition()selon si le div a été déplacé ou non.

Edit, en réponse à votre commentaire pour vous assurer qu'il aille après le repositionnement de ContentPane :

Le mettre après window.onload garantira qu'il se déclenche une fois que tout le reste est complètement chargé :

window.onload = function(){ map.resize(); fonction pour définir votre étendue }

De cette façon, tout se chargera, y compris les volets qui provoquent le redimensionnement de la division de la carte, puis vous redimensionnez la carte, puis vous zoomez jusqu'à l'étendue souhaitée.


J'ai contacté le support technique Esri à propos de cette question. Ils m'ont rappelé que lesetExtentLa fonction prend deux variables d'entrée :setExtent (étendue, ajustement ?). leajusterla variable est définie surfauxpar défaut, mais selon la documentation de la fonction, il garantit que toute carte avec des couches de service de carte en mosaïque "s'adaptera" à l'écran.

J'ai donc pu résoudre ce problème et obtenir le résultat souhaité avec l'ajustement suivant du code d'origine :

Vieux (faux)

map.on("layers-add-result", function(evt){ map.setExtent(evt.layers[0].layer.fullExtent) });

Nouveau (correct)

map.on("layers-add-result", function(evt){ map.setExtent(evt.layers[0].layer.fullExtent, true) });