<\/P>
Foto: pin points | Flickr - Foto Sharing!<\/A> <\/SPAN><\/P><\/P>Also, ich habe das schon ein paar Mal gesehen. Du hast einige FeatureLayers auf deiner Karte.<\/P><\/P>Du richtest einen Listener für Klicks auf der Karte ein.<\/P><\/P>Du klickst auf die Karte.<\/P><\/P>Du hast vielleicht sechs Layer, aber du bekommst nur eine Grafik zurück.<\/P><\/P>Was ist da los?<\/EM><\/STRONG><\/P><\/P>Ok, das hat einfach damit zu tun, welche Layer wo sind. Grafiken auf deiner Karte sind wahrscheinlich SVG<\/A>. Es ist nun mal so, dass wenn ein SVG keine Füllung hat, du kein Klick-Ereignis davon bekommst. Du kannst jedoch die Opazität auf klar setzen und trotzdem ein Klick-Ereignis erhalten, also behalte das im Hinterkopf.<\/P><\/P>Aber es ist auch eine Web-Sache. Die Art und Weise, wie SVG-Grafiken funktionieren (eigentlich alle DOM-Elemente), das Klick-Ereignis kommt einfach vom obersten Element. Es klickt nicht durch zu anderen Elementen hindurch.<\/P><\/P>Also bist du am Arsch, oder?<\/EM><\/P><\/P>Nicht so schnell.<\/STRONG><\/P><\/P>Du hast hier ein paar Optionen. Die erste ist die Verwendung einer QueryTask<\/A>. Du kannst einfach alle Layer abfragen und Ergebnisse für Features an der Stelle bekommen, auf die du geklickt hast. Das ist eine schöne saubere Lösung und funktioniert großartig für Polygone. Punkte und Linien sind etwas kniffliger. Wenn du nicht genau dort klickst, wo der Punkt oder die Linie ist, bekommst du kein Ergebnis. Du könntest also einen kleinen Puffer um den Ort machen, auf den du geklickt hast, mit dem GeometryEngine<\/A>, wenn du versuchst, ein besseres Ergebnis zu erzielen. Das überlasse ich dir.<\/EM><\/P><\/P>Du kannst auch die IdentifyTask<\/A> verwenden. Das erfordert etwas mehr Arbeit beim Einrichten mit FeatureLayers und beim Experimentieren mit einer Toleranz, die ähnlich dem Puffer ist, über den wir vorhin gesprochen haben.<\/P><\/P>Ich persönlich denke, dass die QueryTask mit einer gepufferten Geometrie eine bessere Lösung ist, aber zumindest hast du einige Optionen<\/EM>.<\/P><\/P>So könnte das aussehen:<\/P><\/P>require([\n "esri\/_map",\n "esri\/_layers\/_FeatureLayer",\n "esri\/_tasks\/_query",\n "esri\/_tasks\/_IdentifyTask",\n "esri\/_tasks\/_IdentifyParameters",\n "dojo\/_promise\/_all",\n "dojo\/_domReady!"\n], function(Map, FeatureLayer, Query, IdTask, IdParams, all) { \n var map = new Map("mapDiv", {\n center: [-118.182, 33.913],\n zoom: 14,\n basemap: "topo"\n });\n \n var layer0 = new FeatureLayer("http:\/\/sampleserver1.arcgisonline.com\/ArcGIS\/rest\/services\/Demographics\/ESRI_Census_USA\/MapServer\/0</A>");</SPAN>\n \n var layer1 = new FeatureLayer("http:\/\/sampleserver1.arcgisonline.com\/ArcGIS\/rest\/services\/Demographics\/ESRI_Census_USA\/MapServer\/1</A>");</SPAN>\n \n map.addLayers([layer0, layer1]);\n \n \/\/- konventionelle Methode\n map.on('click', function(e) {\n \/\/- nur eine Grafik \n console.log(e.graphic);\n \/\/- lass uns verrückt werden *_*\n var q = new Query();\n q.returnGeometry = true;\n q.outFields = ["*"];\n q.geometry = e.mapPoint;\n \/\/- Distanz und Einheiten sind nur für Hosted Feature Services \n q.units = "feet";\n q.distance = 50;\n \/\/- Alle FeatureLayers abfragen\n var defs = [layer0, layer1].map(function(x) {\n return x.queryFeatures(q);\n });\n all(defs).then(function(results) {\n console.log("alle Abfrageergebnisse", results);\n });\n \n \/\/- Oder IdentifyTask verwenden, super verrückt! #_#\n var idParams = new IdParams();\n idParams.geometry = e.mapPoint;\n idParams.mapExtent = map.extent;\n \/\/- Du musst mit der Toleranz experimentieren \n \/\/- um die gewünschten Ergebnisse zu erhalten \n idParams.tolerance = 10;\n idParams.layerOption = IdParams.LAYER_OPTION_ALL;\n var url = layer0.url.substr(0, layer0.url.lastIndexOf("\\/"));\n idParams.layerIds = [layer0, layer1].map(function(x) {\n return x.url.substr(x.url.lastIndexOf("\\/") + 1, x.length);\n });\n console.log(idParams);\n var idTask = new IdTask(url);\n idTask.execute(idParams).then(function(results) {\n console.log("id Ergebnisse", results);\n });\n });\n });</PRE> </P> </P>You can find a live demo here </ A > . </P> </P> Also lass dich von kleinen Einschränkungen nicht entmutigen. Mit ein wenig Einsatz kannst du so ziemlich alles schaffen. </P> </P> Für mehr geodev Tipps und Tricks , < A href= "http://odoe.net/blog/ " rel= "nofollow noopener noreferrer " target= "_blank "> schau dir meinen Blog an </ A > . </P>
Also, ich habe das schon ein paar Mal gesehen. Du hast einige FeatureLayers auf deiner Karte.<\/P>
Du richtest einen Listener für Klicks auf der Karte ein.<\/P>
Du klickst auf die Karte.<\/P>
Du hast vielleicht sechs Layer, aber du bekommst nur eine Grafik zurück.<\/P>
Was ist da los?<\/EM><\/STRONG><\/P><\/P>Ok, das hat einfach damit zu tun, welche Layer wo sind. Grafiken auf deiner Karte sind wahrscheinlich
Aber es ist auch eine Web-Sache. Die Art und Weise, wie SVG-Grafiken funktionieren (eigentlich alle DOM-Elemente), das Klick-Ereignis kommt einfach vom obersten Element. Es klickt nicht durch zu anderen Elementen hindurch.<\/P>
Also bist du am Arsch, oder?<\/EM><\/P><\/P>Nicht so schnell.<\/STRONG><\/P><\/P>Du hast hier ein paar Optionen. Die erste ist die Verwendung einer
Ich persönlich denke, dass die QueryTask mit einer gepufferten Geometrie eine bessere Lösung ist, aber zumindest hast du einige Optionen<\/EM>.<\/P><\/P>So könnte das aussehen:<\/P><\/P>require([\n "esri\/_map",\n "esri\/_layers\/_FeatureLayer",\n "esri\/_tasks\/_query",\n "esri\/_tasks\/_IdentifyTask",\n "esri\/_tasks\/_IdentifyParameters",\n "dojo\/_promise\/_all",\n "dojo\/_domReady!"\n], function(Map, FeatureLayer, Query, IdTask, IdParams, all) { \n var map = new Map("mapDiv", {\n center: [-118.182, 33.913],\n zoom: 14,\n basemap: "topo"\n });\n \n var layer0 = new FeatureLayer("
Angemeldete Mitglieder können Beiträge verfassen, Updates folgen und mehr. Neu hier? Registrieren Sie ein kostenloses Konto.
Find useful guides, FAQs, and documents to help you navigate and make the most of Esri Community.