[OpenLayers-Users] Permalink doesn't update on addlayer/removelayer

Andreas Hocevar ahocevar at opengeo.org
Wed Aug 25 05:45:01 EDT 2010


In maps with a static layer configuration, you also cannot turn a base layer into an overlay, nor change the layer order, and nothing like that. The way ArgParser sets the current base layer and the visibility of overlays is simple and efficient. There is no need to do anything with layers that are configured as base layer, but are not the current base layer. The map's setBaseLayer method takes care of making other base layers invisible. So the ArgParser does its job perfectly well.

Regards,
Andreas.


On Aug 25, 2010, at 11:22 , Slawomir Messner wrote:

>  should go = shouldn't go
> Sry, again...
> 
> Am 25.08.2010 11:21, schrieb Slawomir Messner:
>> Ok, now I have realized it completely.
>> But the third point also matters in the case of "static" maps.
>> @Andreas: Sry, the first mail should go directly to you.
>> Regards,
>> Slawomir
>> 
>> 
>> Am 25.08.2010 11:05, schrieb Andreas Hocevar:
>>> Again, Control.Permalink and Control.ArgParser were designed for maps 
>>> where users cannot add or remove layers. Once you realize that, 
>>> you'll see that these controls do their job well.
>>> 
>>> For maps where users can add and remove layers, you need your own 
>>> permalink and argparser implementations.
>>> 
>>> Regards,
>>> Andreas.
>>> 
>>> On Aug 25, 2010, at 10:23 , Slawomir Messner wrote:
>>> 
>>>>  Hi,
>>>> if I read the code of Permalink and ArgParser right it's a pretty
>>>> confusing behaviour at all, especially if you have an application with
>>>> dynamic loading of layers.
>>>> While I'm working with these controls I noticed some other things:
>>>> 1. If A sends his link, then changes the visibility of the third layer
>>>> during his work than A has the same url like B. I think for a normal
>>>> user pretty confusing to have to different links for one view.
>>>> 
>>>> 2. If we change Andreas's example a little and B has "&layers=BFT" in
>>>> the url. At the beginning the views of A and B are equal(if we assume
>>>> the default config is all layers visible) because ArgParser configures
>>>> the layer only if there are the same number of layers in url and map:
>>>> 
>>>> "if (this.layers.length == this.map.layers.length) {"
>>>> 
>>>> If a user now adds a layer then she/he wonders why his first overlay
>>>> layer is not visible. This can also happen when he forgets why she/he's
>>>> on the site because removes the second adds a new one, removes the
>>>> "second", adds a new one... all is as expected till he adds the third
>>>> then the second is not visible. This happens because the addlayer
>>>> listener of ArgParser is unregistered after the line above. That's why
>>>> standard Permalink and ArgParser combination is only useful to change
>>>> the initial configuration, this should be mentioned in the 
>>>> documentation.
>>>> 
>>>> 3. One thing, i would separate visibility and base/overlay-layer. When
>>>> you have two baselayers in your map ArgParser doesn't parse the "0" for
>>>> baselayers which are not visible(or not THE baselayer of the map) and
>>>> the unvisible baselayer becomes an overlay. So something like
>>>> "&layers=BTBFOTOF" would be better for two baselayers(first the
>>>> baselayer) and two overlay layer (first visible, second not)... or just
>>>> make ArgParser parse "0".
>>>> 
>>>> configureLayers: function() {
>>>> 
>>>>         if (this.layers.length == this.map.layers.length) {
>>>>             this.map.events.unregister('addlayer', this, 
>>>> this.configureLayers);
>>>>             for(var i=0, len=this.layers.length; i<len; i++) {
>>>>                 var layer = this.map.layers[i];
>>>>                 var c = this.layers.charAt(i);
>>>>                 if (c == "B") {
>>>>                     this.map.setBaseLayer(layer);
>>>>                 } else if (c == "0") {
>>>>                     layer.isBaseLayer = true; //trigger change-event?
>>>>                 } else if ( (c == "T") || (c == "F") ) {
>>>>                     layer.setVisibility(c == "T");
>>>>                 }
>>>>             }
>>>>         }
>>>>     },
>>>> 
>>>> Regards,
>>>> Slawomir
>>>> 
>>>>  Am 24.08.2010 15:38, schrieb Andreas Hocevar:
>>>>> On Aug 24, 2010, at 15:15 , Marc Jansen wrote:
>>>>> 
>>>>>> Hi Andreas,
>>>>>> 
>>>>>> first of all, sorry for cross-posting in the past. I thought it was
>>>>>> useful in this case.
>>>>>> 
>>>>>> I'd disagree about the not handling of the layeradd/layerremove event
>>>>>> for the Permalink-control -- but can easily live without this 
>>>>>> addition
>>>>>> to OpenLayers :-)
>>>>>> 
>>>>>> Your suggestions of alternative ways of handling application 
>>>>>> "state" are
>>>>>> valid and often better suited, yet I think the addition of two
>>>>>> additional listeners to the control would be very intuitive.
>>>>> This is where I have to disagree. Let's say you have a map with two 
>>>>> pre-configured layers. Now user A, who uses the Permalink control 
>>>>> as is, adds a layer, resulting in a permalink with "&layers=BT".
>>>>> 
>>>>> User B has the same map, adds a completely different layer, but 
>>>>> uses your add/removelayer aware Permalink control, resulting in a 
>>>>> permalink with "&layers=BTT".
>>>>> 
>>>>> Now the interesting part comes when both users send this permalink 
>>>>> to someone who opens the permalink. That person will see exactly 
>>>>> the same layers with both permalinks - because the map will load 
>>>>> only the two pre-configured layers.
>>>>> 
>>>>> This is why I wouldn't consider adding add/removelayer handlers to 
>>>>> the Permalink control useful or intuitive at all.
>>>>> 
>>>>> Regards,
>>>>> Andreas.
>>>>> 
>>>>>> Best regards,
>>>>>> 
>>>>>> Marc
>>>>>> 
>>>>>> 
>>>>>> 
>>>>>> On 24.08.2010 14:49, Andreas Hocevar wrote:
>>>>>>> Hi,
>>>>>>> 
>>>>>>> first of all, please don't cross-post dev and users.
>>>>>>> 
>>>>>>> I am not sure if a permalink as provided by OpenLayers is what 
>>>>>>> you really want for applications where the user can add or remove 
>>>>>>> layers. The permalink only stores the visible/invisible state of 
>>>>>>> the available layers in their order. It does not know anything 
>>>>>>> about what these layers are. So a permalink will look exactly the 
>>>>>>> same for any map with the same extent with let's say 3 layers 
>>>>>>> that are all visible.
>>>>>>> 
>>>>>>> If you want to store information on what layers are actually 
>>>>>>> configured, you should look into Format.WMC, Format.OWS or 
>>>>>>> solutions like the OpenGeo Suite's GeoExplorer 
>>>>>>> (http://suite.opengeo.org/geoexplorer), which stores layer 
>>>>>>> configurations in a database and provides a permalink with a map id.
>>>>>>> 
>>>>>>> Regards,
>>>>>>> Andreas.
>>>>>>> 
>>>>>>> On Aug 24, 2010, at 14:31 , Marc Jansen wrote:
>>>>>>> 
>>>>>>> 
>>>>>>>> Hi Slawomir,
>>>>>>>> 
>>>>>>>> I'd consider this a bug with a (on first sight) reasonable easy 
>>>>>>>> fix:
>>>>>>>> 
>>>>>>>> In the Permalinks draw-method:
>>>>>>>> 
>>>>>>>>         this.map.events.on({
>>>>>>>>             'moveend': this.updateLink,
>>>>>>>>             'changelayer': this.updateLink,
>>>>>>>>             'changebaselayer': this.updateLink,
>>>>>>>>             'addlayer': this.updateLink,
>>>>>>>>             'removelayer': this.updateLink,
>>>>>>>>             scope: this
>>>>>>>>         });
>>>>>>>> 
>>>>>>>> Or one could think of triggering a changelayer event when a 
>>>>>>>> layer has
>>>>>>>> been added/removed in Map.js.
>>>>>>>> 
>>>>>>>> I am unsure which design is better, so I'd suggest opening up a 
>>>>>>>> ticket
>>>>>>>> (I cc'ed the developer list so the core developers notice this 
>>>>>>>> discussion).
>>>>>>>> 
>>>>>>>> Regards,
>>>>>>>> Marc
>>>>>>>> 
>>>>>>>> 
>>>>>>>> 
>>>>>>>> 
>>>>>>>> On 24.08.2010 13:53, Slawomir Messner wrote:
>>>>>>>> 
>>>>>>>>>   Hello,
>>>>>>>>> Does anyone know why Permalink doesn't listen to 
>>>>>>>>> addlayer/removelayer?
>>>>>>>>> Every time I add a new layer I have to change a property(i.e.
>>>>>>>>> visibility) to refresh the link. It's a bug or a feature?
>>>>>>>>> Regards,
>>>>>>>>> Slawomir
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>> _______________________________________________
>>>>>>>> Dev mailing list
>>>>>>>> Dev at openlayers.org
>>>>>>>> http://openlayers.org/mailman/listinfo/dev
>>>>>>>> 
>>>>>> -- 
>>>>>> 
>>>>>>   .................................................................
>>>>>>    Karten im (Inter|Intra)net?
>>>>>> 
>>>>>>    OpenLayers - Webentwicklung mit dynamischen Karten und Geodaten
>>>>>>    von M. Jansen und T. Adams, OpenSourcePress, München.
>>>>>> 
>>>>>>    ISBN: 978-3-937514-92-5
>>>>>>    URL:  http://openlayers-buch.de
>>>>>>   .................................................................
>>>>>> 
>>>>>> 
>>>>>>   Dipl.-Geogr. Marc Jansen
>>>>>>   - Anwendungsentwickler -
>>>>>> 
>>>>>>   terrestris GmbH&    Co. KG
>>>>>>   Irmintrudisstraße 17
>>>>>>   53111 Bonn
>>>>>> 
>>>>>>   Tel:    ++49 (0)228 / 96 28 99 -53
>>>>>>   Fax:    ++49 (0)228 / 96 28 99 -57
>>>>>> 
>>>>>>   Email:  jansen at terrestris.de
>>>>>>   Web:    http://www.terrestris.de
>>>>>> 
>>>>>>   Amtsgericht Bonn, HRA 6835
>>>>>>   Komplementärin:  terrestris Verwaltungsgesellschaft mbH
>>>>>>   vertreten durch: Hinrich Paulsen, Till Adams
>>>>>> 
>>>>>> 
>>>>>> _______________________________________________
>>>>>> Users mailing list
>>>>>> Users at openlayers.org
>>>>>> http://openlayers.org/mailman/listinfo/users
>>>> 
>>>> -- 
>>>> -----------------------------------------------
>>>> Slawomir Messner
>>>> Forschungszentrum "Deutscher Sprachatlas"
>>>> 
>>>> _______________________________________________
>>>> Users mailing list
>>>> Users at openlayers.org
>>>> http://openlayers.org/mailman/listinfo/users
>>> 
>>> 
>> 
>> 
> 
> 
> -- 
> -----------------------------------------------
> Slawomir Messner
> Forschungszentrum "Deutscher Sprachatlas"
> 06421-28-24981
> 
> _______________________________________________
> Users mailing list
> Users at openlayers.org
> http://openlayers.org/mailman/listinfo/users



-- 
Andreas Hocevar
OpenGeo - http://opengeo.org/
Expert service straight from the developers.




More information about the Users mailing list