Respostas:
O redimensionamento , como o @Mapperz mencionou, é provavelmente o caminho a percorrer.
Como alternativa, se você tiver muitos pontos, em vez de percorrer todos os pontos que os redimensionam, poderá alterar o pointRadius
estilo da camada no zoom do mapa para que a alteração ocorra com todos os recursos em uma chamada. Não posso dizer com certeza qual é o melhor desempenho, mas imagino que a mudança de estilo mudaria se houver muitos pontos.
O método de estilo tem desvantagens, pois não possui tantas opções quanto o redimensionamento (escala, origem, proporção), é apenas um raio.
Redimensionar recursos programaticamente usando o Openlayers v2.12
map.addLayer(vectorLayer);
map.setCenter(new OpenLayers.LonLat(point.x, point.y), 5);
vectorLayer.addFeatures([pointFeature, lineFeature, polygonFeature]);
}
var origin = new OpenLayers.Geometry.Point(-111.04, 45.68);
function resizeFeatures(scale) {
pointFeature.geometry.resize(scale, origin);
lineFeature.geometry.resize(scale, origin);
polygonFeature.geometry.resize(scale, origin);
vectorLayer.redraw();
}
http://dev.openlayers.org/releases/OpenLayers-2.12/examples/resize-features.html Visualizar> fonte
Você pode usar um estilo que calcule o raio do ponto, dependendo do nível de zoom do mapa:
// var map = my OpenLayers.Map object
var styleSel = new OpenLayers.Style({
pointRadius: "${radius}",
graphicName: "circle",
strokeColor: "#004CFF",
strokeWidth: 2,
fillOpacity: 0
}, {
context: {
radius: function (feature) {
var pix = map.getZoom() * 10; // ten time the zoo level
return pix;
}
}
});
var styleMapSelect = new OpenLayers.StyleMap({
"default": styleSel
});
var layer= new OpenLayers.Layer.Vector("myLayer", {styleMap: styleMapSelect});