Страница 1 из 1

OpenLayers: формирование слоя из XML

Добавлено: 03 дек 2010, 11:26
Denis Rykov
Имеется ответ от сервера в XML формате, содержащий координаты различных объектов в форме<lat>56</lat><lon>83</lon>. Можно каким-нибудь образом полученные данные превратить в векторные фичи (точки)? Предполагаю, что нужно как-то использовать OpenLayers. Format.XML.

Re: OpenLayers: формирование слоя из XML

Добавлено: 03 дек 2010, 23:08
Denis Rykov
Отвечу сам себе. Предположим у нас есть xml-файл:

Код: Выделить всё

<?xml version="1.0" encoding="utf-8"?>
<xml>
<feature lat="65" lon="95"></feature>
<feature lat="70" lon="75"></feature>
</xml>
Пишем парсер:

Код: Выделить всё

/**
 * @requires OpenLayers/Format/XML.js
 */
OpenLayers.Format.MyFormat = OpenLayers.Class(OpenLayers.Format.XML, {
   
    initialize: function(options) {
        this.externalProjection = new OpenLayers.Projection("EPSG:4326");
        OpenLayers.Format.XML.prototype.initialize.apply(this, [options]);
        this.options = options;
    },

    read: function(doc) {
        if(typeof data == "string") {
            doc = OpenLayers.Format.XML.prototype.read.apply(this, [data]);
        }
        var features = [];
        
        var markers = doc.getElementsByTagName("feature");
        for (var l = 0, len = markers.length; l < len; l++) {
            var feature = new OpenLayers.Geometry.Point(markers[l].getAttribute("lon"), markers[l].getAttribute("lat"));
            features.push(new OpenLayers.Feature.Vector(feature,null));
        }
        
        if (this.internalProjection && this.externalProjection) {
            for (var g = 0, featLength = features.length; g < featLength; g++) {
                features[g].geometry.transform(this.externalProjection, this.internalProjection);
            }
        }
        return features;
    },
   
    CLASS_NAME: "OpenLayers.Format.MyFormat"

});
Создаём слой:

Код: Выделить всё

new OpenLayers.Layer.GML("XML","sample.xml",{format: OpenLayers.Format.MyFormat})