[OpenLayers-Users] External Graphic of features positioning

Arnd Wippermann arnd.wippermann at web.de
Fri Aug 20 08:13:14 EDT 2010


Hi,
 
you have to calculate your offset for every zoomlevel. I do it by use of a
styleMap with context. The code below should give you an idea, how to get it
work.
 
function layerContext()
{
    theXOffset    = 10;
    theYOffset    = 10;
    theResolution = map.getResolution();
 
    var context = {
        getXO : function(){
            return theXOffset * theResolution / map.getResolution();
        },
        getYO : function(){
            return theYOffset * theResolution / map.getResolution();
        }
    };
    var template = {
        ...
        graphicXOffset : "${getXO}",
        graphicYOffset : "${getYO}",
        ...
        pointRadius    : 0
    };
    yourLayer.styleMap = new OpenLayers.StyleMap(new
OpenLayers.Style(template, {context:context}) );
}

I use this approach to display georeferenced images as externalGraphic.
http://gis.ibbeck.de/ginfo/apps/OLExamples/OL27/examples/ExternalGraphicOver
lay/ExternalGraphicOverlay.asp
 
Arnd

  _____  

Von: users-bounces at openlayers.org [mailto:users-bounces at openlayers.org] Im
Auftrag von ilias kanellos
Gesendet: Donnerstag, 19. August 2010 11:03
An: Users at openlayers.org
Betreff: [OpenLayers-Users] External Graphic of features positioning


Dear List,

I am trying to create markers as point features of a vector layer. I do this
by using the following code:

                            var markerStyle = OpenLayers.Util.extend({},
OpenLayers.Feature.Vector.style['default','select']);
                            markerStyle.graphicWidth = 21;
                            markerStyle.graphicHeight = 25;
                            markerStyle.graphicOpacity = 1;
                            markerStyle.externalGraphic = ""; // I put the
url of the image here
                            markerStyle.graphicTitle = displayName; //
displayName is a string previously defined
                            var markerCoordPoint = new
OpenLayers.Geometry.Point(markerCoords.lon,markerCoords.lat); //
markerCoords is a LonLat object
                            var newMarker =  new
OpenLayers.Feature.Vector(markerCoordPoint,null,markerStyle);        

When I add the above feature to a vector layer and put in on my map it
displays the image I want in the correct coordinates, 
however the center of the image is put to the Lon/Lat coordinates I specify
for the newMarker variable. 
What I would like to do is to set a specific point (such as the center of
the bottom, or the bottom left corner) of the image to be put on the
determined coordinates.
I tried to add the following to the markerStyle object:

                            markerStyle.graphicXOffset =
-(markerStyle.graphicWidth/2);
                            markerStyle.graphicYOffset =
-markerStyle.graphicHeight;

However if I understood this correctly, the above offset concerns pixels,
and the result is that the marker image gets placed in a completely wrong
position, 
especially in low zoom levels. Is there some way to 'anchor' the
externalGraphic the way I want to?
Thank you



-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.osgeo.org/pipermail/openlayers-users/attachments/20100820/8f33da48/attachment.html


More information about the Users mailing list