Hi,The problem in your code is with the map.onLayersAddResult event, since your legend is created inside the callback of this event. This event is fired when map.addLayers(<an array of layers>) is executed. map.addLayer() will NOT fire this event.The only thing you need to do is to change:map.addLayer(transMapLayer); ... map.addLayer(mainMapLayer); to:map.addLayers([transMapLayer, mainMapLayer]); You may need to tweak your CSS styles a bit to adjust the layout afterward.
map.addLayer(transMapLayer); ... map.addLayer(mainMapLayer);
map.addLayers([transMapLayer, mainMapLayer]);
A simple way to do this with your existing code is to set InfoTemplate for the graphic in your showResults(results) function:graphic.setInfoTemplate(new esri.InfoTemplate());You can further customized the text in your pop-ups. Refer to Graphic.setInfoTemplate(infoTemplate) for more information.
graphic.setInfoTemplate(new esri.InfoTemplate());
Now only if I knew a quick way to have the pop-ups for my POI layer show on the map, any ideas would be greatly appreciated.
<script>var dojoConfig = { parseOnLoad:true }</script> <script src="http://js.arcgis.com/3.7/"></script> <script> dojo.require("esri.map"); dojo.require("dojox.grid.DataGrid"); dojo.require("dojo.data.ItemFileReadStore"); dojo.require("esri.tasks.find"); dojo.require("dijit.layout.BorderContainer"); dojo.require("dijit.layout.ContentPane"); dojo.require("dijit.form.Button"); dojo.require("esri.dijit.Legend"); var findTask, findParams; var map, center, zoom; var grid, store; function init() { dojo.connect(grid, "onRowClick", onRowClickHandler); center = [-98.544, 29.47]; zoom = 11; map = new esri.Map("map", { basemap: "hybrid", center: center, zoom: zoom }); var transMapLayer = new esri.layers.ArcGISDynamicMapServiceLayer("http://server.arcgisonline.com/ArcGIS/rest/services/Reference/World_Transportation/MapServer", { id: "trans" }); var mainMapLayer = new esri.layers.ArcGISDynamicMapServiceLayer("http://mapservices2.bexar.org/arcgis/rest/services/Historic/Historic_POI/MapServer", { id: "1896" }); map.addLayers([transMapLayer, mainMapLayer]); //Create Find Task using the URL of the map service to search findTask = new esri.tasks.FindTask("http://mapservices2.bexar.org/arcgis/rest/services/Historic/Historic_POI/MapServer"); dojo.connect(map, "onLoad", function() { //Create the find parameters findParams = new esri.tasks.FindParameters(); findParams.returnGeometry = true; findParams.layerIds = [0]; findParams.searchFields = [ "Name", "Owner", "Category"]; findParams.outSpatialReference = map.spatialReference; console.log("find sr: ", findParams.outSpatialReference); }); dojo.connect(map, "onLayersAddResult", function(result) { var legend = new esri.dijit.Legend({ map:map, layerInfos:[{layer:mainMapLayer,title:"San Antonio Points of Interest 1896"}], arrangement:esri.dijit.Legend.ALIGN_RIGHT },"legendDiv"); legend.startup(); }); } function doFind() { //Set the search text to the value in the box findParams.searchText = dojo.byId("ownerName").value; findTask.execute(findParams,showResults); } function showResults(results) { //This function works with an array of FindResult that the task returns map.graphics.clear(); var symbol = new esri.symbol.SimpleMarkerSymbol(esri.symbol.SimpleMarkerSymbol.STYLE_SQUARE, 25, new esri.symbol.SimpleLineSymbol(esri.symbol.SimpleLineSymbol.STYLE_SOLID, new dojo.Color([255, 0, 0]), 1), new dojo.Color([0, 255, 0, 0.25])); //create array of attributes var items = dojo.map(results,function(result){ var graphic = result.feature; graphic.setSymbol(symbol); map.graphics.add(graphic); return result.feature.attributes; }); //Create data object to be used in store var data = { identifier: "OBJECTID", //This field needs to have unique values label: "OBJECTID", //Name field for display. Not pertinent to a grid but may be used elsewhere. items: items }; //Create data store and bind to grid. store = new dojo.data.ItemFileReadStore({ data:data }); var grid = dijit.byId('grid'); grid.setStore(store); //Zoom back to the initial map extent map.centerAndZoom(center, zoom); } //Zoom to the parcel when the user clicks a row function onRowClickHandler(evt){ var clickedTaxLotId = grid.getItem(evt.rowIndex).OBJECTID; var selectedTaxLot; var distance = 100; dojo.forEach(map.graphics.graphics,function(graphic){ if((graphic.attributes) && graphic.attributes.OBJECTID === clickedTaxLotId){ selectedTaxLot = graphic.geometry; return; } }); var newExtent = new esri.geometry.Extent({ "xmin": selectedTaxLot.x - distance, "ymin": selectedTaxLot.y - distance, "xmax": selectedTaxLot.x + distance, "ymax": selectedTaxLot.y + distance, "spatialReference": { "wkid": 102100 } }); map.setExtent(newExtent); console.log(map.graphics.graphics); } dojo.ready(init); </script> </head> <body class="claro"> <div data-dojo-type="dijit.layout.BorderContainer" data-dojo-props="design:'headline'" style="width:100%;height:100%;margin:0;"> <div data-dojo-type="dijit.layout.ContentPane" data-dojo-props="region:'top'" style="height:40px;"> Point of Interest: <input type="text" id="ownerName" size="20" value="Koehler" /> <button data-dojo-type="dijit.form.Button" data-dojo-props='onClick:function(){ doFind();}, value:"Search"'> Search </button> </div> <div data-dojo-props="region:'left'" data-dojo-type="dijit.layout.ContentPane" data-dojo-props="title:'Legend'" style="width:18%; border:1px solid #000;"> <div id="legendDiv"></div> </div> <div id="map" data-dojo-props="region:'center'" data-dojo-type="dijit.layout.ContentPane" style="border:1px solid #000;"></div> <div data-dojo-type="dijit.layout.ContentPane" data-dojo-props="region:'bottom'" style="height:150px;"> <table data-dojo-type="dojox.grid.DataGrid" data-dojo-id="grid" id="grid" data-dojo-props="rowsPerPage:'5', rowSelector:'20px'"> <thead> <tr> <th field="Name" width="50%">Point of Interest</th> <th field="Category">Category</th> <th field="Owner">Owner</th> </tr> </thead> </table> </div> </div> </body> </html>
<div data-dojo-props="region:'left'" data-dojo-type="dijit.layout.ContentPane" data-dojo-props="title:'Legend'" style="border:1px solid #000; width: 200px">
Aangemelde leden kunnen berichten plaatsen, updates volgen en meer. Nieuw hier? Registreer een gratis account.
Find useful guides, FAQs, and documents to help you navigate and make the most of Esri Community.