POST
|
Numlock would only be available if the user has a numeric keypad on their keyboard. If they do not...? (and that is really the point of this question)...if they do not, how do they get access to keyboard navigation? And, really, why wouldn't the '+' and '-' keys in the main keyboard work by default anyway? Having said all that, I'm not really that concerned about it. It's a good post to have kicking around, though, just in case anyone else thinks, as we did, that there was a problem with the JSAPI. Cheers, jtm
... View more
11-06-2012
06:38 AM
|
0
|
0
|
622
|
POST
|
We were working in Firefox 16 where we are able to simply use Shift-'+' to zoom in. I wasn't aware this was an anomaly, but have just checked IE9 and see that the Shift-'+' doesn't do the same trick there. Although, in both Firefox and IE9 both arrow keys do the trick (i.e., those in the numeric keypad and those in the main keyboard). Isn't this a problem for people whose keyboard's don't have a numeric keyboard (like my colleague's)? In those cases, there would be no keyboard navigation provided by default, contrary to the documentation which suggests users should be able to "Use + key to zoom in a level" and "Use - key to zoom out a level". How would they know that that is only the '+' or '-' key on the numeric keyboard and not the one they see on the main keyboard? Particularly if they don't have a numeric keypad on their keyboard? It would just seem like a bug...as it did to us. Cheers, jtm
... View more
11-06-2012
05:08 AM
|
0
|
0
|
622
|
POST
|
On ArcGIS Online (and my own application unfortunately), make the map element active. You will find that most of the keyboard navigation is working as documented but the '-' button in the main part of the keyboard to zoom out is not. On the Numeric keypad, the '+', '-' and arrow keys work as documented. In the main part of the keyboard, the '+' and arrow keys work, but the '-' key doesn't. This is problematic when working on a keyboard without a Numeric keypad as my colleague does (and really the only reason we noticed this). Cheers, jtm
... View more
11-05-2012
09:29 AM
|
0
|
6
|
2809
|
POST
|
bdaigle, Thank you for your response. Given what I was seeing, I figured I'd have to make a separate request myself but was hoping I wouldn't. Cheers, jtm
... View more
10-10-2012
12:44 PM
|
0
|
0
|
504
|
POST
|
jgravois, In what is likely a related problem (http://forums.arcgis.com/threads/68450-Is-esri.dijit.Legend.destroy()-destroying-everything), Derek Swingley suggested the use of setDynamicLayerInfos. As you can see from that thread, however, I have been unable to get this method to work (results in request error: Missing mapLayerId for dynamic mapLayer with 'id': 1.) Is it possible that if I could get that to work, this problem would also be addressed? And, if so, could someone provide some help with doing so? I've provided a code example of the best I could come up with in that thread. Cheers, jtm
... View more
10-10-2012
12:38 PM
|
0
|
0
|
120
|
POST
|
I can see the server's JSON response when an esri.layers.ArcGISDynamicMapServiceLayer is instantiated contains the documentInfo.Title stored with the service. Is this information available from the ArcGISDynamicMapServiceLayer object? I've looked and haven't found anything that looks remotely useful for this except the getResourceInfo method which doesn't seem to be documented in that class or any of the classes it inherits from. Besides that though, I assume, since this information was already retrieved from the server when the ArcGISDynamicMapServiceLayer object was created that it must already be in there somewhere...I'm just looking in the wrong places. Can someone point me in the right direction, please? Cheers, jtm
... View more
10-10-2012
07:24 AM
|
0
|
3
|
761
|
POST
|
swingley, Thank you for your reply/suggestion. I am not using setDynamicLayerInfos on my dynamic service before re-creating my legend, but would be happy to do so...if I could only understand how. I've found a couple of different explanations of the method online and about 3 or 4 examples of its use but, so far, have been unable to apply any of what I am seeing in them to my code in a way that works. The closest thing I've come up with (as far as I can tell regarding how I think it is supposed to work) is to try to set the layer's DynamicLayerInfos in the callback function where the generated renderer is applied: cbExecuteGenerateRendererTask: function(renderer){
var optionsArray = [];
var drawingOptions = new esri.layers.LayerDrawingOptions();
drawingOptions.renderer = renderer;
optionsArray[this.layerId] = drawingOptions;
this.layer.setLayerDrawingOptions(optionsArray);
this.layer.setVisibleLayers([this.layerId]);
// --------
// this.layer is instantiated elsewhere as: new esri.layers.ArcGISDynamicMapServiceLayer("serviceUrl");
// That mapping service contains 7 layers of data; only one is visible at any one time and a single
// attribute from that visible layer is used to generate the renderer for it.
//---------
if (this.dynamicLayerInfos === null){
this.dynamicLayerInfos = this.layer.createDynamicLayerInfosFromLayerInfos();
}
var dynamicLayerInfos = [];
var dynamicLayerInfo = new esri.layers.DynamicLayerInfo();
dynamicLayerInfo.id = this.layerId;
dynamicLayerInfo.source = this.dynamicLayerInfos[this.layerId];
dynamicLayerInfos.push(dynamicLayerInfo);
this.layer.setDynamicLayerInfos(dynamicLayerInfos);
} I've tried doing the dynamicLayerInfos part before and after setting the drawing options and before and after setting the visible layers. The message I receive when "this.layer.setDynamicLayerInfos(dynamicLayerInfos);" makes the export request is invariably: {"error":{"code":400,"message":"Missing mapLayerId for dynamic mapLayer with 'id': 1.","details":[]}} I'm not sure what "mapLayerId" it is referring to. There is a mapLayerId provided for the source in the JSON of the request, so I'm guessing it's not that one. The export request sent when I setDynamicLayerInfos on the service looks like this: http://<mydomain>/arcgis/rest/services/<myservice>/MapServer/export?dpi=96&transparent=true&format=png8&layers=show:-1&dynamicLayers=[{
"id": 1,
"source": {
"defaultVisibility": false,
"id": 1,
"maxScale": 0,
"minScale": 0,
"name": "Crops (vegetables, fruits, berries, nuts, nursery, sod, Christmas trees, greenhouse, mushrooms, and maple)",
"parentLayerId": -1,
"subLayerIds": null,
"source": {
"type": "mapLayer",
"mapLayerId": 1
}
},
"drawingInfo": {
"renderer": {
"type": "classBreaks",
"field": "FRUIT_FARM_NUM",
"minValue": 0,
"classBreakInfos": [{
"classMaxValue": 14,
"label": "0 - 14",
"description": "",
"symbol": {
"color": [204, 255, 204, 255],
"type": "esriSFS",
"style": "esriSFSSolid"
}
}, {
"classMaxValue": 59,
"label": "15 - 59",
"description": "",
"symbol": {
"color": [130, 217, 142, 255],
"type": "esriSFS",
"style": "esriSFSSolid"
}
}, {
"classMaxValue": 165,
"label": "60 - 165",
"description": "",
"symbol": {
"color": [72, 179, 100, 255],
"type": "esriSFS",
"style": "esriSFSSolid"
}
}, {
"classMaxValue": 298,
"label": "166 - 298",
"description": "",
"symbol": {
"color": [28, 142, 73, 255],
"type": "esriSFS",
"style": "esriSFSSolid"
}
}, {
"classMaxValue": 498,
"label": "299 - 498",
"description": "",
"symbol": {
"color": [0, 104, 55, 255],
"type": "esriSFS",
"style": "esriSFSSolid"
}
}]
}
}
}]&bbox=-14896912.62163498,3215744.8139635143,-5700009.378365019,10123206.186036486&bboxSR=102100&imageSR=102100&size=940,706&f=json I've also tried playing around with this a bit in the "onUpdateEnd" handler but I can't get it to work there either and don't believe it would help there any more than in the GenerateRendererTask callback anyway. Can you be a bit more forthcoming re: the usage of this method? Cheers, jtm
... View more
10-09-2012
09:12 AM
|
0
|
0
|
223
|
POST
|
In my application, the Legend digit is displayed in a window panel that the user can open and close at their discretion. This application also has a ArcGISDynamicMapServiceLayer whose symbology can be specified by the user using the esri.tasks.GenerateRendererTask. Given the following scenario, the Legend does not get updated properly. Assume that I have generated a renderer with esri.tasks.ClassBreaksDefinition and specified 5 breaks. The map is displayed as I wish it to be. I open my legend window, which instantiates the esri.dijit.Legend and calls its startup(). I can see that it sends the legend REST request to the ArcGISDynamicMapServiceLayer and the Legend dijit displays the correct symbology for the map as it is currently shown...with 5 classes. Now, I close the legend window and, in so doing, the code calls the esri.dijit.Legend's destroy() and I set its variable to null. Then, I change the display of the map and specify, say, 10 breaks. The map displays as desired (with 10 classes now) and then I open my legend window again (which, instantiates a new Legend dijit and calls startup() again). This time, though, the legend it shows me for that service will still show the 5 classes it generated the last time I opened it. And, no new legend REST request was sent to the ArcGISDynamicMapServiceLayer. It's as though something is still in memory and whatever it is indicates to the dijit's code somehow that nothing has changed in the display since the last time the legend was drawn. Can anyone suggest anything that could be causing this behaviour? Is there something further I can clear or free when I destroy the Legend dijit to ensure that the next time a Legend dijit is created and started within the same session it is not referencing some information that is now out of date? Cheers, jtm
... View more
10-05-2012
01:32 PM
|
0
|
2
|
933
|
POST
|
swingley, I noticed 3.2 was released on September 12, 2012. Did a fix to the bug noted in this post find it's way in there? I believe I am having similar problems to those described in this thread, but the problem continues with 3.2. If a fix that addresses the bug noted in this thread is in there, then I'm probably not having the same problem after all. (Added later: I take it back. The fix is in there and 3.2 has dealt with my problem.) Cheers, jtm
... View more
10-03-2012
08:21 AM
|
0
|
0
|
1212
|
POST
|
can you put together a sample with public data so i can check it out? Has anyone had an opportunity to try the sample I put together? Did it work (or rather not work) as described? Can anyone suggest a way to get the legend to display its layers in the desired order AND update the dynamic rendering for a layer that is listed later in the array of layerInfos? Cheers, jtm
... View more
09-27-2012
06:29 AM
|
0
|
0
|
992
|
POST
|
jgravois, It's taken a while, but I have finally zeroed in on the problem but still don't know how to fix it or why it is happening. It's something to do with the use of the layerInfo array when instantiating the esri.digit.Legend. I have taken the sample "Change the Attribute Field Used to Render Data" found at: http://help.arcgis.com/en/webapi/javascript/arcgis/samples/renderer_dynamic_layer_change_attribute/index.html and made some changes to it to illustrate the problem I am having in my application. I am attaching the altered html within a zip file. Hopefully, anyone who is interested will be able to simply unzip the file in an HTTP-accessible location, load the esri.html it contains and have it run properly (after changing the proxyUrl path, of course). [ATTACH=CONFIG]17968[/ATTACH] Assuming you can load the page successfully, you will see the legend as it always was in the sample. Take note of the first class' values (-99 - 219570). Now, change the field to use for display to "POP2000". After the map and legend has updated, you can see the change in the first class' values (-99 - 160971). Now, go into the esri.html contained in the zip and find the code that instantiates the esri.digit.Legend. Uncomment the layerInfo element that is currently commented out so that two layers are passed in the layerInfos array. Load up the page again and take note of that first class' values again (-99 - 219570). Now, choose field "POP2000" and, although the map changes, the legend does not. That first class' values are the same no matter what field you pick. It will never update and always show you that layer's legend as it was when the esri.digit.Legend was instantiated. Interesting, too, by the way is if you move the new layerInfo element below the sample's existing layerInfo element, it will work properly. So, to anyone who has a look at this, is there a problem with how the layerInfos are defined in the HTML or being treated in the Legend digit? If there are problems reproducing what I detail above, please let me know. Any help with this is appreciated because I'm completely stuck at this point. Cheers, jtm
... View more
09-25-2012
11:03 AM
|
0
|
0
|
992
|
POST
|
Well, I can reproduce the problem in my application using public data. Pointing to the "http://servicesbeta2.esri.com/arcgis/rest/services/Census/MapServer" mapping service, I can see in my application that after the GenerateRendererTask callback function included previously is complete the legend is using the default symbology defined in the mapping service for the layer and that it continues to show the same after zooming in one level. [ATTACH=CONFIG]17941[/ATTACH] [ATTACH=CONFIG]17942[/ATTACH] I'll try to pull apart the pieces of my app to create something that actually resembles what I am doing and illustrates the problem but I'm not certain I'll be able to as it's somewhat complicated. One additional piece of info that might be indicative of something... the legend.refresh() calls aren't actually considering anything as having changed with respect to the dynamic layer after the different symbology is applied. It doesn't seem to be registering that the display is different because it is not actually requesting an updated legend display from the server. When I watch the traffic with Fiddler (that is, the URL requests and responses), after the generateRenderer request, there are no calls to get the legend for that layer. Whereas, in the "http://help.arcgis.com/en/webapi/javascript/arcgis/demos/renderer/renderer_dynamic_layer_change_attribute.html" sample, after the generateRenderer request is made, a legend request is also sent to update the legend's display as you can see in these two requests (from the sample page, that is):
http://servicesbeta2.esri.com/arcgis/rest/services/Census/MapServer/2/generateRenderer?classificationDef={"baseSymbol":{"color":null,"type":"esriSFS","style":"esriSFSSolid"},"colorRamp":{"type":"algorithmic","algorithm":"esriHSVAlgorithm","fromColor":[255,255,204,255],"toColor":[0,104,55,255]},"type":"classBreaksDef","classificationField":"WHITE","classificationMethod":"esriClassifyNaturalBreaks","breakCount":5}&f=json
http://servicesbeta2.esri.com/arcgis/rest/services/Census/MapServer/legend?f=json&dynamicLayers=[{"id":2,"source":{"type":"mapLayer","mapLayerId":2},"drawingInfo":{"renderer":{"type":"classBreaks","field":"WHITE","minValue":-99,"classBreakInfos":[{"classMaxValue":84181,"label":"-99 - 84181","description":"","symbol":{"color":[255,255,204,255],"type":"esriSFS","style":"esriSFSSolid"}},{"classMaxValue":294324,"label":"84182 - 294324","description":"","symbol":{"color":[184,217,130,255],"type":"esriSFS","style":"esriSFSSolid"}},{"classMaxValue":759924,"label":"294325 - 759924","description":"","symbol":{"color":[96,179,71,255],"type":"esriSFS","style":"esriSFSSolid"}},{"classMaxValue":1997123,"label":"759925 - 1997123","description":"","symbol":{"color":[28,140,45,255],"type":"esriSFS","style":"esriSFSSolid"}},{"classMaxValue":4637062,"label":"1997124 - 4637062","description":"","symbol":{"color":[0,105,56,255],"type":"esriSFS","style":"esriSFSSolid"}}]}}}]
In my application, only the first request is made, the second never is. So, it always just displays the legend definition that it had when the esri.digit.Legend was instantiated and its startup called. Whatever exists in the map at that time, with respect to these dynamic layers is what will always be displayed for that layer's portion of the legend even after a refresh is called. For example, if I have already rendered the map with a classified dynamic layer, say with 5 classes, and then instantiate the legend digit, the legend will correctly show the classification. If I then change the number of classes I want to use (say to 10) and redisplay the map with the new renderer definition, the map is updated with the generaterenderer request, but no legend request is made and the legend redisplays the original 5-class scheme it created for that layer at the startup of the digit. Does that suggest anything in particular that isn't being done as it should? cheers, jtm
... View more
09-24-2012
01:25 PM
|
0
|
0
|
992
|
POST
|
setting an event handler to wait for a dynamic join and rendering task to complete before refreshing provided a workaround. Is that somehow different from what I am doing with this code? dojo.connect(
dynLayer
,"onUpdateEnd"
,function() {
if (app.legend != null){
app.legend.refresh();
}
}
); If so, could you provide more information? Is there a specific rendering event that I can trap for? cheers, jtm
... View more
09-24-2012
12:00 PM
|
0
|
0
|
992
|
POST
|
Thank you for your response, jgravois. In my case, I'm afraid, the legend does not update properly even after zooming. The legend remains a single pale blue icon. Can you provide a link to the other customer's instance? Perhaps there might be something useful in it anyway. I've searched the forums as minutely as I can and haven't come across anything useful to try to deal with this. Cheers, jtm
... View more
09-24-2012
08:28 AM
|
0
|
0
|
992
|
POST
|
Hello all, Within my application, the legend digit does not appear to accommodate a renderer definition applied to a layer dynamically during a refresh. I'm hoping someone can provide some pointers as to what I might be missing because I've been trying to get this all working for days and am stuck with what to try next. I have an ArcGISDynamicMapServiceLayer that has no visible layers at startup but contains 7 different ones in total. The end user is able to indicate which layer in the service they wish to work with, pick an attribute from that layer, specify how they would like the layer displayed (e.g., with a ClassBreaksDefinition), the number of classes and the colours to ramp between in displaying the data. All this is very similar to the "Change the Attribute Field Used to Render Data" sample found at: http://help.arcgis.com/en/webapi/javascript/arcgis/demos/renderer/renderer_dynamic_layer_change_attribute.html The sample has one layer within the mapping service and when it calls the show() on the layer, the legend gets updated. In my application, I set the layer drawing options for the layer in question, set that layer visible and the legend gets updated...incorrectly. In my case, it adds the layer to the legend but uses the default unclassified renderer definition in the mapping service itself. That is, all the polygons in the layers are just solid blue areas in the mapping service (because they are all turned off anyway) so, although the map appears with the requested classification scheme, the legend appears with a solid blue square. I have included a picture to show the result. The map's classification is all in yellows and greens, but the Legend is showing them as solid pale blue. [ATTACH=CONFIG]17888[/ATTACH] My code to apply the GenerateRendererTask's results is as follows:
cbExecuteGenerateRendererTask: function(renderer){
var optionsArray = [];
var drawingOptions = new esri.layers.LayerDrawingOptions();
drawingOptions.renderer = renderer;
optionsArray[selectedlayerId] = drawingOptions;
dynLayer.setLayerDrawingOptions(optionsArray);
dynLayer.setVisibleLayers([selectedlayerId]);
dynLayer.show();
} I thought perhaps there was a timing issue in that the legend digit was updating itself before the renderer had finished getting applied, but I introduced an "onUpdateEnd" event handler where I do a legend.refresh(), but it doesn't make any difference. The legend stays a solid blue area when the legend.refresh() is called even after the map has completed updating its display. In case I'm just doing that part wrong, here is my code for that too:
dojo.connect(
dynLayer
,"onUpdateEnd"
,function() {
if (app.legend != null){
app.legend.refresh();
}
}
);
Could someone who is more familiar with the actual code in the Legend digit provide some indication what I might be missing that is causing it to ignore the renderer definition being used? I've downloaded it and had a look but nothing jumps out at me, not being familiar with it at all. Cheers, jtm
... View more
09-21-2012
01:12 PM
|
0
|
10
|
1808
|
Title | Kudos | Posted |
---|---|---|
1 | 02-17-2023 10:23 AM | |
1 | 08-06-2021 02:14 PM | |
1 | 08-06-2021 11:23 AM | |
1 | 08-05-2021 01:51 PM | |
1 | 06-15-2015 02:32 PM |
Online Status |
Offline
|
Date Last Visited |
04-29-2024
11:39 AM
|