OpenLayers: OpenLayers.Control.Measure и подписи сегментов

Решенные задачи, первая запись - описание решения.
Ответить
Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3370
Зарегистрирован: 11 апр 2008, 21:09
Статьи: 33
Проекты: 9
Репутация: 519
Ваше звание: Author
Контактная информация:

OpenLayers: OpenLayers.Control.Measure и подписи сегментов

Сообщение Denis Rykov » 10 июн 2013, 07:04

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

(function() {

var map = new OpenLayers.Map('map');
var base_layer = new OpenLayers.Layer.OSM();
var measure_nodes = new OpenLayers.Layer.Vector();
var measure_config = {
'nodes_symbolizer': {
pointRadius: 4,
fillOpacity: 1,
strokeWidth: 1,
strokeOpacity: 1,
fillColor: "white",
graphicName: "square",
strokeColor: "#333333",
label: "${measure}",
labelYOffset: 20,
labelOutlineColor: "white",
labelOutlineWidth: 3
},
'path_symbolizer': {
strokeWidth: 3,
strokeOpacity: 1,
strokeColor: "#666666",
strokeDashstyle: "dash"
}
};
measure_nodes.styleMap = new OpenLayers.StyleMap(measure_config.nodes_symbolizer);

var measure_control = new OpenLayers.Control.Measure(
OpenLayers.Handler.Path,
{
geodesic: true,
callbacks: {
'create': function() {
measure_nodes.removeAllFeatures();
},
'point': function(p,l) {
var node = new OpenLayers.Feature.Vector(p.clone());
node.attributes.measure = measure_control.getLength(l, 'km').toFixed(0);
measure_nodes.addFeatures([node]);
}
},
handlerOptions: {
layerOptions: {
styleMap: new OpenLayers.StyleMap(measure_config.path_symbolizer)
}
}
}
);

map.addLayers([base_layer, measure_nodes]);
map.addControl(measure_control);
measure_control.activate();
map.zoomToMaxExtent();
})()

DEMO

Еще пример реализации: http://www.chamaps.com/watervliet/
Вложения
measure.png
measure.png (18.68 КБ) 3071 просмотр
Spatial is now, more than ever, just another column- The Geometry Column.

Ответить

Вернуться в «Рецепты»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость