It's poccinle to calculate position manually;
- Define function which will calculate deltaX and deltaY:
..
this.labelDeltaPixels = function (f) {
var vert = f.geometry.getVertices();
var startPoint = vert[0];
var middlePoint = vert[Math.floor(vert.length/2)];
var pixelStart = self.mapPanel.map.getPixelFromLonLat(new OpenLayers.LonLat(startPoint.x, startPoint.y));
var pixelMiddle = self.mapPanel.map.getPixelFromLonLat(new OpenLayers.LonLat(middlePoint.x, middlePoint.y));
var deltaX = pixelMiddle.x - pixelStart.x;
var deltaY = pixelStart.y - pixelMiddle.y;
return {x: deltaX, y: deltaY};
}
2.define context for template
var context = {
getLableOffsetX: function(f) {
var zoom = self.mapPanel.map.getZoom();
if (zoom < self.centreLabelsZoom) {
return 0;
}
if (f.geometry) {
if (!self.centrelineMiddleCoordsMap[zoom]) {
self.centrelineMiddleCoordsMap[zoom] = {};
}
if (!self.centrelineMiddleCoordsMap[zoom][f.id]) {
self.centrelineMiddleCoordsMap[zoom][f.id] = self.labelDeltaPixels(f);
}
return self.centrelineMiddleCoordsMap[zoom][f.id].x;
return 0;
} else {
return 0;
}
},
getLableOffsetY: function (){//similar as for x}
}
define template.
var template = {strokeColor:"${getColor}", label: "${getLabel}", cursor: "crosshair", fontSize: '11px', labelAlign: 'cm', labelXOffset: '${getLableOffsetX}', labelYOffset: '${getLableOffsetY}'};
define style and stylemap
var style = new OpenLayers.Style(template, {context: context, title: 'default'});
var styleSelect = new OpenLayers.Style({'strokeColor': self.colors['centreline'].selectColor});