Erstellen einer benutzerdefinierten dynamischen Legende mit ArcGis-Server js und dynamicMapServiceLayer

8

Ich habe einen dynamicMapServiceLayer, mit dem ich eine Kartenanwendung erstelle. Der Kartenservice enthält ungefähr 10 Ebenen, die ich mithilfe der Aktion setVisibleLayers umschalte.

Ich möchte meine eigene benutzerdefinierte, dynamische Kartenlegende erstellen. Wenn die Sichtbarkeit einer Ebene umgeschaltet wird, würde das entsprechende Legendenelement auch hide () / show ()

Mein mapServer hat eine URL, die auf eine Seite mit allen entsprechenden Legendenelementen wie unten verweist, außer dass die URL meiner Legende 10 Legendenelemente enthält

http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Petroleum/KGS_OilGasFields_Kansas/MapServer/legend

Gibt es eine Möglichkeit, von einem vorhandenen mapServer auf die einzelnen Legendenelemente (Name und Symbol) zuzugreifen? Ich bin mit dem Erstellen der Legende zufrieden. Ich muss nur wissen, wie ich auf die Symbole der Ebenen zugreifen kann, die ich dann an einen Legendendialog anhänge.

Ich sollte auch erwähnen, dass ich es vermeide, DOJO und reines Javascript und jQuery zu verwenden.

Jotamon
quelle

Antworten:

7

Wenn Sie über die REST-API auf diesen Service zugreifen:

http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Petroleum/KGS_OilGasFields_Kansas/MapServer/legend?f=json&pretty=true

Sie können den JSON mit jQuery http://api.jquery.com/jQuery.getJSON/ abrufen. Erstellen Sie die Legende also selbst aus den Daten, die Sie abgerufen haben.

Um die Legenden-Symbole hinzuzufügen, können Sie mit jQuery ein Bild erstellen und den contentType und die imageData jedes Legendenelements in den src einfügen, um das Symbol zu rendern.

/programming/5000710/receive-image-data-as-json-and-injecting-it-into-the-dom/5000778#5000778

Sinn ergeben?

stu
quelle
stu ... das hört sich toll an. Lassen Sie mich eine Weile darüber
nachdenken
Einige Sachen. Erstens, verwenden Sie nicht beautiful = true, da dies nicht erforderlich ist und zusätzliche Serverressourcen verwendet. Zweitens können Sie zum Symbol einer Ebene gelangen, indem Sie render.symbol oder ein Array von renderer.infos []. Symbol abrufen. Beachten Sie jedoch, dass der Kartenersteller möglicherweise ein "SimpleMarkerSymbol", ein "SimpleCircleSymbol" usw. verwendet hat
Jim Wharton,