5 votos

¿Cómo analizar los polígonos de GML en OpenLayers?

Estoy leyendo un archivo GML desde una URL. Este archivo contiene los polígonos. Me gustaría dibujar los polígonos en el mapa, donde cada uno debe tener un color diferente. Pero todos los ejemplos que encontré en la web hasta ahora parecían ser anticuado y no funcionaba. ¿Cualquier sugerencias?

A continuación el análisis (que es la parte que ya funciona):

    var theParser = new OpenLayers.Format.GML();
    theParser.internalProjection = null;
    theParser.externalProjection = null;
    theParser.extractStyles      = false;
    theParser.extractAttributes  = true;
    var features = theParser.read(response.responseText);
    if(features)
    {
         for(var i=0;i<features.length;i++)
        {
            var feature = features[i]
       //Each feature is an instance of OpenLayers.Feature.Vector
           //Each has an attribte geometry, which is of type 
           //OpenLayers.Geometry.MultiPolygon and which contains an
           //OpenLayers.Geometry.Polygon
        }
}

8voto

Vasu Puntos 11

Básicamente, usted necesita especificar la función de espacio de nombres o de lo contrario OpenLayers no se puede deserializar su GML. Y el uso de la versión adecuada de GML Analizador.

He aquí un Ejemplo de trabajo

Esto es parte importante:

var gmlOptions = {
    featureType: "feature",
    featureNS: "http://example.com/feature"
};
var gmlOptionsIn = OpenLayers.Util.extend(
    OpenLayers.Util.extend({}, gmlOptions)
);

var format = new OpenLayers.Format.GML.v3(gmlOptionsIn);

var features = format.read(strGML);

Todavía estoy trabajando en el cambio de colores para cada característica. Se actualizará cuando se me figura que uno.


ACTUALIZACIÓN #2: Dar a cada característica de un color diferente:

Aquí hay una manera de darles un color diferente:

Actualizado Ejemplo De Trabajo

var style = $.extend(true, {}, OpenLayers.Feature.Vector.style['default']); // get a copy of the default style
style.fillColor = "${getFillColor}";

var getRandomColor = function () {
    var letters = '0123456789ABCDEF'.split('');
    var color = '#';
    for (var i = 0; i < 6; i++) {
        color += letters[Math.round(Math.random() * 15)];
    }
    return color;
};

var myStyleMap = new OpenLayers.StyleMap({
    "default": new OpenLayers.Style(style, {
        context: {
            getFillColor: function (feature) {
                return getRandomColor();
            }
        }
    })
}); 

var gmlLayer = new OpenLayers.Layer.Vector("MyGMLLayer", {
    styleMap: myStyleMap
});

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