Mehr

ESRI QueryLayer + Javascript API - Karte zeigt inkonsistente Ergebnisse an

ESRI QueryLayer + Javascript API - Karte zeigt inkonsistente Ergebnisse an


Wir haben kürzlich einen unserer Kartendienste von FGDB auf ein SQL Server Spatial-DB-Backend migriert. Wir stellen jetzt ein Problem fest, dass die Karte Standorte inkonsistent anzeigt. Ich habe eine JSFiddle erstellt, um das Problem zu demonstrieren und den Code so weit wie möglich zu vereinfachen.

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

Wenn Sie hinein- oder herauszoomen oder die Anwendung einfach erneut ausführen, sollten Sie feststellen, dass einige Postleitzahlen nach dem Zufallsprinzip leer bleiben. (Die Postleitzahlen auf dieser Karte sollten zu fast 100 % ausgefüllt sein.) Ich habe das vom Kartendienst zurückgegebene JSON-Objekt überprüft und überprüft, ob die Ergebnisse konsistent und korrekt sind, daher vermute ich langsam ein Problem mit der Javascript-API selbst. Ich habe den ESRI-Support kontaktiert und habe ein Ticket bei ihnen geöffnet, aber bisher haben sie die Ursache des Problems nicht identifiziert, also dachte ich, ich würde dies hier auf dieser Site einer breiteren Gruppe von GIS-Experten öffnen.

Hier ist wie gewünscht ein Screenshot, der eine beträchtliche Anzahl leerer Postleitzahlen zeigt. (Aufgrund einiger Einschränkungen mit meinem Diese Site-Konto kann ich anscheinend nicht mehrere Screenshots posten, aber dieses Beispiel zeigt hoffentlich das Problem, das ich zu lösen versuche.)


Ich würde ein paar Dinge prüfen:

  1. Wie hoch ist das Pooling-Limit für diesen Kartendienst? Es werden viele gleichzeitige Abfrageanforderungen gesendet, und Sie erreichen möglicherweise das maximale Instanzlimit, was dazu führt, dass sich einige Serverantworten komisch verhalten. Sie können das maximale Limit erhöhen oder Ihre Isolationseinstellungen auf Niedrige Isolation umstellen. (Ich hatte in der Vergangenheit mit geringer Isolation Pech, daher funktioniert dies möglicherweise nicht immer.)

  2. Ich sehe einige Abfrageantworten markiert304 NICHT GEÄNDERTSie können also versuchen, Ihre Abfrage zu verunreinigen, sodass immer ein Ergebnis vom Server abgerufen wird.

Das kannst du hier machen:

var dirty = (neues Date()).getTime(); var query = new esri.tasks.Query(); query.returnGeometry = true; query.maxAllowableOffset = 1000; //nicht sicher, was hier gemeint ist? query.where = "NAME = '" + globals.siteFilter + "' AND " + dirty + "=" + dirty;

Bearbeiten: Nachdem Sie mit Ihrem JSFiddle herumgespielt haben (Entschuldigung für die Serverlast!), denke ich, dass das Problem Ihr maximales Pooling-Limit ist.

MODE_SNAPSHOT- Wie Sie in einem obigen Kommentar bemerkt haben, verschwindet dieses Problem mit diesem Modus, aber es ist eine einzige Anfrage, die alle Funktionen auf einmal abruft und etwa 40-50 Sekunden dauert, um das Zeichnen abzuschließen. Ich kann verstehen, warum Sie das nicht für die Produktion haben wollen.

MODE_ONDEMAND- Dadurch wird die FeatureLayer-Abfrage in kleinere AOI-Abfragen aufgeteilt. Der Vorteil ist, dass Sie Ihre Ergebnisse möglicherweise schneller erhalten, wenn Ihr FeatureLayer viele Funktionen enthält. Der Nachteil ist, dass die Ergebnisse nur existieren, bis der Benutzer die Karte erneut schwenkt/zoomt, was eine weitere Reihe von Abfragen ausgibt. Dies erhöht die Belastung des Servers.

Ich habe das Gefühl, dass diese beiden Instanzen die Anzahl der von Ihnen gesendeten Anfragen nicht verarbeiten könnenMODE_ONDEMANDEigenschaften. Ich habe eine der leeren Antworten genommen und die Parameter direkt in den REST-Endpunkt gesteckt und 137 Funktionen zurückbekommen. Können Sie versuchen, das maximale Pooling-Limit auf 8 oder 10 zu erhöhen?


Ich hatte in der Vergangenheit ähnliche Probleme beim Festlegen einer Ebenendefinition oder Sichtbarkeit, während sie noch gezeichnet wurde. Siehe diesen Link: https://geonet.esri.com/thread/10158 Vielleicht ist das Ihr Problem…


Schau das Video: ArcGIS API for JavaScript: Getting Started with Web Development