Mehr

FeatureLayer fullExtent wird durch das Dojo ContentPane-Seitenfenster eingeschränkt


Ich habe eine ArcGIS-JavaScript-Anwendung, die einen einzelnen FeatureLayer auf einer Karte anzeigt, die sich in einer Dojo-BorderContainer/ContentPane-Vorlage ähnlich der hier gezeigten befindet. Ich versuche, die Karte mit dem vollen Umfang des einzelnen FeatureLayers zu initialisieren. Ich erledige das so:

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

Ich stelle jedoch fest, dass Punkte an den Extremen der Karte abgeschnitten sind. Insbesondere handelt es sich dabei um eine Schicht von Punkten im Osten und Mittleren Westen der Vereinigten Staaten, aber es gibt einige Punkte in Kalifornien und einen in Frankreich. Die Punkte in CA und Frankreich liegen außerhalb des Kartenumfangs.

Meine Vermutung war, dass die Ausdehnung unter der Annahme festgelegt wird, dass kein ContentPane-Seitenbereich vorhanden ist, und dann in das kleinere Ansichtsfenster gezwungen wird, sobald der ContentPane gerendert wird. Ich habe diese Theorie getestet, indem ich eine Karte erstellt habe, die 100 % der Breite der Seite umfasst. Das Problem war tatsächlich weg.

Wie kann ich das sicherstellenmap.setExtent()berücksichtigt die ContentPane-Seitenbereiche? ich benötige schondomReady!und rufenparser.parse(). Fehlt mir noch etwas?

Bearbeitet mit mehr Details am 24.02

Ich habe vergessen hinzuzufügen, dass ich eine FeatureTable habe, die im Grunde als Attributtabelle für die Punkte im FeatureLayer dient. Ich habe die Karte so eingestellt, dass sie wieder vollständig verkleinert wird, wenn die FeatureTable-Auswahl gelöscht wird. Wenn dieses Verkleinern auftritt, wird die Karte auf das richtige Ausmaß gezoomt und enthält alle Punkte. Dies untermauert meine Theorie, dass der anfängliche Aufruf von map.setExtent den kleineren Viewport der Karte beim ersten Laden der Seite nicht "merkt", aber es ist ist später, sobald die Seite vollständig geladen ist.


Versuchen Sie anzurufenmap.resize()nachdem das ContentPane gerendert und das Karten-Div in der Größe geändert wurde. Möglicherweise müssen Sie auch verwendenmap.reposition()je nachdem ob das div verschoben wurde oder nicht.

Bearbeiten Sie als Antwort auf Ihren Kommentar, um sicherzustellen, dass er nach der Neupositionierung des ContentPane erfolgt:

Wenn Sie es hinter window.onload platzieren, wird sichergestellt, dass es ausgelöst wird, nachdem alles andere vollständig geladen wurde:

window.onload = function () { map.resize (); Funktion zum Festlegen Ihrer Ausdehnung }

Auf diese Weise wird alles geladen, einschließlich der Bereiche, die eine Größenänderung des Karten-Divs bewirken, und dann ändern Sie die Größe der Karte und zoomen dann auf die gewünschte Ausdehnung.


Ich habe mich wegen dieser Frage an den technischen Support von Esri gewandt. Sie haben mich daran erinnert, dass diesetExtentFunktion nimmt zwei Eingabevariablen an:setExtent(Ausdehnung, Passform?). DaspassenVariable ist auf gesetztfalschstandardmäßig, aber laut Funktionsdokumentation garantiert es, dass jede Karte mit gekachelten Kartenservice-Layern auf den Bildschirm "passt".

So konnte ich dieses Problem beheben und das gewünschte Ergebnis mit der folgenden Anpassung des Originalcodes erzielen:

Alt (falsch)

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

Neu (richtig)

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