Suite

ESRI QueryLayer + API Javascript - la carte affiche des résultats incohérents


Nous avons récemment migré l'un de nos services de carte de FGDB vers un backend de base de données spatiale SQL Server. Nous remarquons maintenant un problème dans la mesure où la carte semble afficher les emplacements de manière incohérente. J'ai créé un JSFiddle pour illustrer le problème et simplifier le code autant que possible.

http://jsfiddle.net/acurtiss/pbuLot1g/24/

Si vous effectuez un zoom avant ou arrière, ou si vous réexécutez simplement l'application, vous devriez voir que certains codes postaux deviendront aléatoirement vides. (Les codes postaux sur cette carte doivent être remplis à près de 100%.) J'ai vérifié l'objet JSON renvoyé par le service de carte et vérifié que les résultats sont cohérents et corrects, donc je commence à suspecter un problème avec l'API Javascript lui-même. J'ai contacté le support d'ESRI et j'ai un ticket ouvert avec eux, mais jusqu'à présent, ils n'ont pas identifié la source du problème, alors j'ai pensé ouvrir cela à un ensemble plus large d'experts SIG ici sur ce site.

Comme demandé, voici une capture d'écran montrant un nombre important de codes postaux vierges. (En raison de certaines limitations de mon compte Ce site, je ne peux apparemment pas publier plusieurs captures d'écran, mais j'espère que cet exemple montre le problème que j'essaie de résoudre.)


Je vérifierais plusieurs choses :

  1. Quelle est la limite de mise en commun sur ce service de carte ? De nombreuses requêtes de requêtes simultanées sont envoyées et vous atteignez peut-être la limite maximale d'instances, ce qui fait que certaines réponses du serveur agissent de manière amusante. Vous pouvez augmenter la limite maximale ou peut-être basculer vos paramètres d'isolement sur Isolation faible. (J'ai eu de la malchance avec un faible isolement dans le passé, donc cela peut ne pas toujours fonctionner.)

  2. Je vois des réponses de requête marquées304 NON MODIFIÉvous pouvez donc essayer de salir votre requête, afin qu'elle tire toujours un résultat du serveur.

Vous pouvez le faire ici:

var sale = (new Date()).getTime(); var query = new esri.tasks.Query(); query.returnGeometry = true; query.maxAllowableOffset = 1000; // vous ne savez pas quelle est l'intention ici ? query.where = "NAME = '" + globals.siteFilter + "' AND " + sale + "=" + sale ;

edit: Après avoir joué avec votre JSFiddle (excuses pour toute charge de serveur!), Je pense que le problème est votre limite maximale de mise en commun.

MODE_SNAPSHOT- Comme vous l'avez noté dans un commentaire ci-dessus, ce problème disparaît en utilisant ce mode, mais il s'agit d'une seule requête qui extrait toutes les fonctionnalités à la fois et prend environ 40 à 50 secondes pour terminer le dessin. Je peux voir pourquoi vous ne voudriez pas cela pour la production.

MODE_ONDEMAND- Cela divise la requête FeatureLayer en requêtes AOI plus petites. L'avantage est que vous pouvez potentiellement obtenir vos résultats plus rapidement si votre FeatureLayer contient beaucoup de fonctionnalités. L'inconvénient est que les résultats n'existent que jusqu'à ce que l'utilisateur effectue à nouveau un panoramique/un zoom sur la carte, ce qui génère un autre ensemble de requêtes. Cela augmente la charge sur le serveur.

J'ai le sentiment que ces 2 instances ne peuvent pas gérer le nombre de requêtes envoyées depuis votreMODE_ONDEMANDfonctionnalités. J'ai pris l'une des réponses vides et branché les paramètres directement dans le point de terminaison REST, et j'ai récupéré 137 fonctionnalités. Pouvez-vous essayer d'augmenter la limite de mise en commun maximale à 8 ou 10 ?


J'ai eu des problèmes similaires dans le passé avec la définition d'une définition de calque ou d'une visibilité alors qu'il était encore en train de dessiner. Voir ce lien : https://geonet.esri.com/thread/10158 C'est peut-être votre problème…


Voir la vidéo: ArcGIS API for JavaScript: Getting Started with Web Development (Octobre 2021).