Suite

Esri API JS, la fenêtre contextuelle ne s'affiche pas après le premier clic

Esri API JS, la fenêtre contextuelle ne s'affiche pas après le premier clic


Les données démographiques s'affichent dès le premier clic, mais pas après, les informations sur le parc fonctionnent. J'ai changé presque tout avec une solution non réelle. J'ai l'impression que, pour une raison quelconque, les données de mon serveur d'entités sont préférées à la couche dynamique de la carte. Existe-t-il un moyen de faire rebondir le js en fonction de l'endroit où vous cliquez ?

carte var; require([ "esri/config", "esri/InfoTemplate", "esri/map", "esri/dijit/Popup", "esri/dijit/PopupTemplate", "esri/geometry/Extent", "esri/layers/ ArcGISDynamicMapServiceLayer", "esri/layers/FeatureLayer", "esri/layers/ArcGISTiledMapServiceLayer", "esri/symbols/SimpleFillSymbol", "esri/symbols/SimpleLineSymbol", "esri/tasks/GeometryService", "esri/tasks/query" , "dojo/dom-construct", "dojo/dom-class", "dojo/parser", "esri/Color", "dojo/_base/lang", "dojo/date/locale", "esri/dijit/ Geocoder", "esri/dijit/LocateButton", "dojo/domReady!" ], fonction ( esriConfig, InfoTemplate, Map, Popup, PopupTemplate, Extent, ArcGISDynamicMapServiceLayer, FeatureLayer, ArcGISTiledMapServiceLayer, SimpleFillSymbol, SimpleLineSymbol, GeometryConstruct, Query , parser, Color, lang, locale, Geocoder, LocateButton ) { parser.parse(); var popup = new Popup({ fillSymbol: new SimpleFillSymbol(SimpleFillSymbol.STYLE_SOLID, new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID, 0 new Color([ , 0]), 2) , new Color([128, 128, 128, 0.25])) }, domConstruct.create("div")); domClass.add(popup.domNode, "monThème"); map = new Map("map", { fondmap: "topo", center: [-122.402, 47], zoom: 9, infoWindow: popup }); var geocoder = new Geocoder({ arcgisGeocoder: { placeholder: "Search " }, map: map }, "ui-esri-dijit-geocoder"); var _countyCensusInfoTemplate = new InfoTemplate(); _countyCensusInfoTemplate.setTitle("Renseignements sur le recensement"); var _blockGroupInfoTemplate = new InfoTemplate(); _blockGroupInfoTemplate.setTitle("Renseignements sur le recensement"); var _censusInfoContent = "" + "${AGE_5_17:formatNumber}personnes âgées de 5 à 17 ans
" + "${AGE_18_21:formatNumber}personnes âgées de 18 à 21 ans
" + "${AGE_22_29:formatNumber}personnes âgées de 22 à 29 ans
" + "${AGE_30_39:formatNumber}personnes âgées de 30 à 39 ans
" + "${AGE_40_49:formatNumber}personnes âgées de 40 à 49 ans
" + "${AGE_50_64:formatNumber}personnes âgées de 50 à 64 ans
" + "${AGE_65_UP:formatNumber}personnes âgées de 65 ans et plus" + "" ; _countyCensusInfoTemplate.setContent("Données démographiques pour :
${NAME} ${STATE_NAME:getCounty}, ${STATE_NAME}
" + _censusInfoContent); _blockGroupInfoTemplate.setContent("Données démographiques pour :
Secteur : ${TRACT:formatNumber} Groupe de blocs : ${BLKGRP}
" + _censusInfoContent); var démographiquesLayerURL = "http://sampleserver6.arcgisonline.com/arcgis/rest/services/Census/MapServer"; var démographiquesLayerOptions = { "id": "demographicsLayer", "opacity": 0.8, "showAttribution ": false }; var démographieLayer = new ArcGISDynamicMapServiceLayer(demographicsLayerURL, démographiesLayerOptions); démographieLayer.setInfoTemplates({ 1: { infoTemplate: _blockGroupInfoTemplate }, 2: { infoTemplate: _countyCensus2]InfoTemplate } }); démographie1,Layer.setVis map.addLayer(demographicsLayer); geocoder.startup(); var geoLocate = new LocateButton({ map: map, highlightLocation: false }, "LocateButton" ); geoLocate.startup(); var formatNumber = function(value, key, data ) { var searchText = "" + valeur; var formattedString = searchText.replace(/(d)(?=(ddd)+(?!d))/gm, "$1"); return chaînette formatée; }; var getCounty = function(value, key, data) { if (value.toUpperCase() !== "LOUISIANE") { return "County"; } else { return "Parish"; } } ; map.on("click", fonction (événement) { var query = new Query(); query.geometry = pointToExtent(map, event.mapPoint, 10); var deferred = featureLayer.selectFeatures(query, FeatureLayer.SELECTION_NEW); map.infoWindow.setFeatures([différé]); map.infoWindow.show(event.mapPoint); }); var template = new InfoTemplate(); template.setTitle("Informations sur le parc"); template.setContent(getTextContent); var featureLayer = new FeatureLayer("https://services3.arcgis.com/J1Locv0GPOt6yBRR/ArcGIS/rest/services/Parks_polygons_Feb2012/FeatureServer/0", { outFields : ["*"], infoTemplate : template }); map.addLayer(featureLayer); function getTextContent (graphic) { var attribute = graphic.attributes; var namepark = attributs.ParkName .replace('"', "") .split("::") .map(function (name) { return lang.trim(name); }); var parkdata = namepark[0] ; var commonName = namepark[1]; var parcs; if (commonName) { parcs = "" + nomcommun + "
" + "" + données parc + ""; } else { parcs = "" + données parc + ""; } retour parcs + "
" + attributs.Propriétaire + "
" + attributs.ParkWebLin } function pointToExtent (carte, point, toléranceInPixel) { var pixelWidth = map.extent.getWidth() / map.width; var toléranceInMapCoords = toléranceInPixel * pixelWidth; return new Extent(point.x - toléranceInMapCoords, point. y - toléranceInMapCoords, point.x + toléranceInMapCoords, point.y + toléranceInMapCoords, map.spatialReference); } });

le lien vers est http://students.washington.edu/sbuffor/combined_census_parks.html


J'ai commencé à retirer des morceaux et j'ai trouvé un morceau que je ne comprenais pas complètement ce qu'il faisait et je l'ai sorti.

map.on("click", fonction (événement) { var query = new Query(); query.geometry = pointToExtent(map, event.mapPoint, 10); var deferred = featureLayer.selectFeatures(query, FeatureLayer.SELECTION_NEW); map.infoWindow.setFeatures([différé]); map.infoWindow.show(event.mapPoint); });

Après avoir fait cela, la carte est maintenant complètement opérationnelle !

J'ai également suivi le conseil d'ajouter l'URL aux informations du parc, j'ai également ajouté cela, bien que j'aie supprimé l'élément "getTextContent" pour qu'il s'affiche correctement, mais cela fonctionne assez bien. J'ai également ajouté une autre pièce pour ouvrir le lien dans un nouvel onglet.