1 votos

Manejo de puntos en openlayers

Tengo varios centenares de puntos que muestro en un mapa. Por el momento, mi método para añadir los puntos parece ineficiente. Creo una matriz utilizando el siguiente enfoque:

var features = [new OpenLayers.Feature.Vector(OpenLayers.Geometry.fromWKT("POINT(-4.2522971 45.3447353)").transform(new OpenLayers.Projection("EPSG:4326"), map.getProjectionObject()),{"Name":"aaa"}),
new OpenLayers.Feature.Vector(OpenLayers.Geometry.fromWKT("POINT(-4.259215 45.344827)").transform(new OpenLayers.Projection("EPSG:4326"), map.getProjectionObject()),{"Name":"bbb"})]

y luego añadir esta matriz a un mapa-capa:

var vectors = new OpenLayers.Layer.Vector("vector", {isBaseLayer: false, projection:"EPSG:4326", styleMap:myStyle});    

vectors.addFeatures(features);
map.addLayer(vectors);

¿Existe una forma más eficiente de mostrar los puntos? También quiero ser capaz de cambiar dinámicamente el radio de cada punto por separado. No estoy seguro de si eso es algo que debo tener en cuenta al construir el punto. Por ejemplo, puedo elegir el radio al construir, pero no sé cómo actualizarlo:

new OpenLayers.Feature.Vector(OpenLayers.Geometry.fromWKT("POINT(-4.2522971 45.3447353)").transform(new OpenLayers.Projection("EPSG:4326"), map.getProjectionObject()),{"Name":"aaa"}, {radius: 10})

3voto

Nimlar Puntos 306

En cuanto a la segunda parte de tu pregunta, puedes modificar el estilo de una característica y luego volver a dibujarla mediante el método drawFeature de la capa. Ejemplo:

feature.style.pointRadius = (feature.style.pointRadius - 1) || 50;
feature.layer.drawFeature ( feature );

En cuanto a la primera parte de su pregunta, yo asume es más eficiente utilizar un constructor Geometry.Point directamente. Además, supongo que será mejor reutilizar su proyección, pero dudo que notes una diferencia de rendimiento. Aquí está la fuente completa para la creación de características al azar y el cambio de tamaño del radio:

function addRandomMarkers(extent, layer) {
    var features, dx, dy;
    dx = extent.getWidth();
    dy = extent.getHeight();

    features = array.map($.range(0, 100), function () {
        return new ol.LonLat(extent.left + dx * Math.random(), extent.bottom + dy * Math.random());
    });
    features = array.map(features, function (item) {
        return new ol.Geometry.Point(item.lon, item.lat);
    });
    features = array.map(features, function (item, index) {
        var attributes, style;
        attributes = null;
        style = { pointRadius: Math.round(1 + index / 10) };
        return new ol.Feature.Vector(item, attributes, style);
    });

    layer.addFeatures(features);

    features[10].style.pointRadius = 50;

    setInterval(function () {
        var feature = features[10];
        feature.style.pointRadius = (feature.style.pointRadius - 1) || 50;
        feature.layer.drawFeature ( feature );
    }, 500);
}

0voto

Ben Puntos 1

Si hay demasiados puntos, probablemente se puede optar por Cluster . OpenLayers sí tiene esta función.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X