[OpenLayers-Dev] Openlayers 2.12 canvas renderer issue

Andreas Hocevar ahocevar at opengeo.org
Sat Jun 1 08:46:39 PDT 2013


This is expected behavior. Canvas works like a drawing board. Elements
drawn to the canvas do not have a DOM representation. Why don't you use in
your vector layer's features array to see if your feature was fetched?

Andreas.


On Sat, Jun 1, 2013 at 8:34 AM, Ivan Sipka <frkator at gmail.com> wrote:

> Hello,
>
> this is my scenario: a map with one baselayer and one overlay vector layer
> with one point feature in it. I want to obtain the feature DOM node via
> document.getElementById<https://developer.mozilla.org/en-US/docs/Web/API/document.getElementById>.
> Feature gets drawn on screen in both cases.
>
> If I use canvas renderer the element gets drawn on map but:
>
> 1) document.getElementById(feature.geometry.id) returns null
> 2) DOM tree inspection via chrome debugger shows no elements in canvas
>
> If I use SVG renderer, I can see it in the DOM tree and
> document.getElementById(feature.geometry.id) returns it.
>
> Example code:
>
> <!DOCTYPE html>
> <html>
>     <head>
>         <script src="http://openlayers.org/api/2.12/OpenLayers.js
> "></script>
>        <!--<script src="http://openlayers.org/dev/OpenLayers.js
> "></script>-->
>         <script type="text/javascript">
>
>             var map,vectors,feature;
>
>             function init() {
>                 var x = 659688.852138;
>                 var y = 5710701.2962197;
>
>                 map = new OpenLayers.Map({
>                     div: "map",
>                     projection: "EPSG:900913",
>                     controls: [
>                         new OpenLayers.Control.Navigation(),
>                         new OpenLayers.Control.PanZoomBar()
>                     ]
>                 });
>
>                 var renderer =
> OpenLayers.Util.getParameters(window.location.href).renderer;
>
>                 renderer = typeof(renderer) == 'undefined' ? 'Canvas' :
> renderer;
>
>                 vectors = new OpenLayers.Layer.Vector('vectors', {
>                                     renderers: [renderer]
>                                 });
>
>                 feature = new OpenLayers.Feature.Vector(new
> OpenLayers.Geometry.Point(x,y));
>
>                 map.addLayers([new OpenLayers.Layer.OSM(),vectors]);
>
>                 map.setCenter(new OpenLayers.LonLat(x,y), 18);
>                 vectors.addFeatures(feature);
>
>                 var fetched = document.getElementById(feature.geometry.id
> );
>
>                 alert('obtaining feature via document.getElementById has
> '+ (fetched == null ? 'failed':'suceeded'));
>             }
>         </script>
>         <style>
>             #map {
>                 width: 600px;
>                 height: 400px;
>             }
>         </style>
>     </head>
>     <body onload="init();">
>         <div id="map"></div>
>     </body>
> </html>
>
> Default renderer is Canvas if you want to test it you can give the canvas
> implementation as a URL parameter like this:
>
> example.html
> example.html?renderer=Canvas
>
> or
>
> example.html?renderer=SVG
>
> Judging by the canvas example<http://openlayers.org/dev/examples/canvas.html> I'm
> doing it right. I tried to alternate OL versions from 2.12 to 2.13dev but
> it didn't help.
>
> Why is this happening?  Is there any clever workaround?
>
> thanks for your time
> linski
>
> _______________________________________________
> Dev mailing list
> Dev at lists.osgeo.org
> http://lists.osgeo.org/mailman/listinfo/openlayers-dev
>
>


-- 
Andreas Hocevar
OpenGeo - http://opengeo.org/
Expert service straight from the developers.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/openlayers-dev/attachments/20130601/14b685c5/attachment.html>


More information about the Dev mailing list