OpenLayers: формирование слоя из XML
- Denis Rykov
- Гуру
- Сообщения: 3376
- Зарегистрирован: 11 апр 2008, 21:09
- Репутация: 529
- Ваше звание: Author
- Контактная информация:
OpenLayers: формирование слоя из XML
Имеется ответ от сервера в XML формате, содержащий координаты различных объектов в форме<lat>56</lat><lon>83</lon>. Можно каким-нибудь образом полученные данные превратить в векторные фичи (точки)? Предполагаю, что нужно как-то использовать OpenLayers. Format.XML.
Spatial is now, more than ever, just another column- The Geometry Column.
- Denis Rykov
- Гуру
- Сообщения: 3376
- Зарегистрирован: 11 апр 2008, 21:09
- Репутация: 529
- Ваше звание: Author
- Контактная информация:
Re: OpenLayers: формирование слоя из XML
Отвечу сам себе. Предположим у нас есть 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})
Spatial is now, more than ever, just another column- The Geometry Column.
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость