[OpenLayers-Users] Implementing a layer for a proprietary WMS-like service

Franz Buchinger fbuchinger at gmail.com
Wed Aug 4 08:59:17 EDT 2010


I dropped my plans of extending ImageLayer...the getUrlAsync approach leads
to the same problem than with GridLayer (multiple image requests during
zoom/pan animation).

However I have a new idea: what if I manage the layer through a control? It
could perform the map request, parse out the map image bounds and url and
then add an ImageLayer with the requested image to the map.

If the image layer gets moved, it would trigger a map request through the
control. When the map response arrives, the control removes the current
layer and adds a new layer to the map.

Any thoughts on that?

Franz

2010/8/3 Franz Buchinger <fbuchinger at gmail.com>

> In my case, creating the single-tiled map is rather expensive - because the
> map image is generated "on-the-fly".
>
> Therefore, I want my layer to "anticipate" the map action (zoom, pan), just
> like the ImageLayer does.
> I actually had a well working implementation of  my map viewer based on
> ImageLayers, but all the logic (requesting new map etc) happened outside the
> layer and caused side-effects with other layers.
>
> I'm wondering if it would be better to derive my ProprietaryMapLayer from
> ImageLayer.
>
> I could extend it with a getUrlAsync method that fetches the map image url
> based on the new extent after a map action was performed.
>
> Would that work?
>
> Franz
>
> 2010/8/3 <christopher.schmidt at nokia.com>
>
>
>> On Aug 3, 2010, at 9:42 AM, ext Franz Buchinger wrote:
>>
>> > Hi Bart,
>> >
>> > yes, I've set these options. I noticed that these multiple requests only
>> happen when I set transitionEffect: 'resize'.
>>
>> This is basically expected. The transition effect creates multiple tiles,
>> and since
>> creating images is generally considered to be 'cheap' in OpenLayers --
>> since
>> images should be served from cache -- we just create more tiles, rather
>> than
>> copying existing ones in any way.
>>
>> So this is by design; if you don't like the design, you'll need to do some
>> more coding to fix it :)
>>
>> -- Chris
>>
>> > I'm using OpenLayers 2.9.1.
>> >
>> > Franz
>> >
>> >
>> >
>> > 2010/8/3 Bart van den Eijnden (OSGIS) <bartvde at osgis.nl>
>> > Hi Franz,
>> >
>> > and have you verified you only have a single tile?
>> >
>> > Do you have singleTile: true, ratio: 1 and buffer: 0 in your layer
>> options?
>> >
>> > Best regards,
>> > Bart
>> >
>> > >  Hi Bart,
>> > >
>> > > I'm almost done with my layer implementation. The only problem: my
>> > > getURLasync() Method gets triggered far too often (about 3x per
>> pan/zoom
>> > > action).
>> > >
>> > > How can I make sure that getURLasync is only triggered once per map
>> > > action?
>> > >
>> > > Franz
>> > >
>> > > 2010/8/3 Bart van den Eijnden (OSGIS) <bartvde at osgis.nl>
>> > >
>> > >> Hi Franz,
>> > >>
>> > >> check out OpenLayers.Tile.Image.
>> > >>
>> > >> Best regards,
>> > >> Bart
>> > >>
>> > >> > Hi Bart,
>> > >> >
>> > >> > thanks for the fast and helpful response!
>> > >> >
>> > >> > One question though: which class actually invokes the methods
>> > >> > OpenLayers.Layer.ArcIMS.getUrl and OpenLayers.Layer.getUrlAsync?
>> > >> >
>> > >> > They seem to be overriden methods, but i couldn't find them in
>> > >> > OpenLayers.Layer.Grid or OpenLayers.Layer.HTTPRequest.
>> > >> >
>> > >> > kind regards,
>> > >> >
>> > >> > Franz
>> > >> >
>> > >> > 2010/8/3 Bart van den Eijnden (OSGIS) <bartvde at osgis.nl>
>> > >> >
>> > >> >> Hi,
>> > >> >>
>> > >> >> I would advise you to look at OpenLayers.Layer.ArcIMS which uses a
>> > >> >> similar
>> > >> >> approach.
>> > >> >>
>> > >> >> Best regards,
>> > >> >> Bart
>> > >> >>
>> > >> >> > Hi,
>> > >> >> >
>> > >> >> > I'm a frontend developer and was programming a web viewer for a
>> > >> >> > proprietary,
>> > >> >> > WMS-like map service.
>> > >> >> > I discovered Openlayers one month ago and I'm really fascinated
>> by
>> > >> its
>> > >> >> > awesome capabilities, so I decided to integrate our map service
>> in
>> > >> >> > OpenLayers.
>> > >> >> >
>> > >> >> > Here is a short description how the map service works:
>> > >> >> >
>> > >> >> > The client sends an AJAX request containing the current map
>> bounds,
>> > >> >> the
>> > >> >> > map
>> > >> >> > id and the pixel size of the map.
>> > >> >> >
>> > >> >>
>> > >>
>> map=22&px=1720&py=833&left=2504400&right=2544000&top=5699500&bottom=5669500&type=0
>> > >> >> >
>> > >> >> > The server responds with the generated map image (url) and the
>> > >> >> corrected
>> > >> >> > bounds:
>> > >> >> > <MapProperties>
>> > >> >> >   <mapLeft>2493227.6110444176</mapLeft>
>> > >> >> >   <mapTop>5699500</mapTop>
>> > >> >> >   <mapRight>2555172.3889555824</mapRight>
>> > >> >> >   <mapBottom>5669500</mapBottom>
>> > >> >> >   <mapType>0</mapType>
>> > >> >> >   <overviewMap>22</overviewMap>
>> > >> >> >   <url>
>> > >> >>
>> http://localhost/cgmCache/41600065-c3d2-4934-9feb-78a32f6668c8.png
>> > >> >> > </url>
>> > >> >> > </MapProperties>
>> > >> >> >
>> > >> >> > The maps are always single-tiled.
>> > >> >> >
>> > >> >> > My first approach was to write a ProprietaryMapLayer, that
>> executes
>> > >> >> the
>> > >> >> > map
>> > >> >> > request and creates an ImageLayer with the result url and its
>> > >> bounds.
>> > >> >> > When the ImageLayer is moved, a new request is performed, the
>> > >> current
>> > >> >> > ImageLayer is destroyed and a new one generated. The
>> disadvantage:
>> > >> >> there
>> > >> >> > are
>> > >> >> > now 2 layers representing one map, which leads to confusion in
>> the
>> > >> >> layer
>> > >> >> > switcher control.
>> > >> >> >
>> > >> >> > I read over the code of Layer.WMS, which inherits from
>> Layer.Grid
>> > >> and
>> > >> >> also
>> > >> >> > makes use of Tile.Image, but it's difficult to derive a solution
>> > >> from
>> > >> >> it,
>> > >> >> > since all the request/response handling is already integrated
>> into
>> > >> the
>> > >> >> > layer. Furthermore, WMS simply responds with tile images,
>> whereas I
>> > >> >> have
>> > >> >> > to
>> > >> >> > deal with an xml response.
>> > >> >> >
>> > >> >> > Any ideas how I could implement my layer?
>> > >> >> >
>> > >> >> > kind regards,
>> > >> >> >
>> > >> >> > Franz
>> > >> >> > _______________________________________________
>> > >> >> > Users mailing list
>> > >> >> > Users at openlayers.org
>> > >> >> > http://openlayers.org/mailman/listinfo/users
>> > >> >> >
>> > >> >>
>> > >> >>
>> > >> >> --
>> > >> >> Looking for flexible support on OpenLayers or GeoExt? Please check
>> > >> out
>> > >> >> http://www.osgis.nl/support.html
>> > >> >>
>> > >> >> Bart van den Eijnden
>> > >> >> OSGIS
>> > >> >> bartvde at osgis.nl
>> > >> >>
>> > >> >>
>> > >> >
>> > >>
>> > >>
>> > >> --
>> > >> Looking for flexible support on OpenLayers or GeoExt? Please check
>> out
>> > >> http://www.osgis.nl/support.html
>> > >>
>> > >> Bart van den Eijnden
>> > >> OSGIS
>> > >> bartvde at osgis.nl
>> > >>
>> > >>
>> > >
>> >
>> >
>> > --
>> > Looking for flexible support on OpenLayers or GeoExt? Please check out
>> > http://www.osgis.nl/support.html
>> >
>> > Bart van den Eijnden
>> > OSGIS
>> > bartvde at osgis.nl
>> >
>> >
>> > <ATT00001..txt>
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.osgeo.org/pipermail/openlayers-users/attachments/20100804/1c8b7bda/attachment.html


More information about the Users mailing list