OpenLayers: OpenLayers.Layer.PointTrack

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

OpenLayers: OpenLayers.Layer.PointTrack

Сообщение Denis Rykov » 10 окт 2011, 13:08

Слой типа PointTrack предназначен для отрисовки точечных данных (например, GPX-треков) в виде линий. Точки (массив объектов класса OpenLayers.Feature) соединяются линиями в порядке следования их в массиве. Класс OpenLayers.Layer.PointTrack довольно простой и содержит два собственных свойства: dataFrom и styleFrom и один метод: addNodes. Назначение свойств dataFrom и styleFrom заключается в следующем: при соединении двух точек линии может быть присвоена атрибутика и стиль начальной или конечной точки. В соответствии с этим выбирается одно из двух доступных значений указанных свойств:

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

OpenLayers.Layer.PointTrack.SOURCE_NODE
или

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

OpenLayers.Layer.PointTrack.TARGET_NODE
По умолчанию свойства dataFrom и styleFrom имеют значение null, поэтому никакая атрибутика линиям не присваивается и отрисовываются они дефолтным стилем.

Порядок работы с данным типом слоев следующий. Прежде всего необходимо создать точечный векторный слой OpenLayers.Layer.Vector, затем создать слой класса OpenLayers.Layer.PointTrack и вызвать его метод addNodes, в котором в качестве параметра указать массив объектов первого слоя. Например:

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

pointlayer = new OpenLayers.Layer.Vector('Original');
pointlayer.addFeatures([
    new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Point(10, 2)),
    new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Point(20, -10)),
    new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Point(30, 15)),
    new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Point(40, 5))
]);

tracklayer = new OpenLayers.Layer.PointTrack('track', {styleFrom: OpenLayers.Layer.PointTrack.SOURCE_NODE});
tracklayer.addNodes(pointlayer.features); 
Онлайн пример доступен здесь.
Spatial is now, more than ever, just another column- The Geometry Column.

kain76
Новоприбывший
Сообщения: 1
Зарегистрирован: 31 янв 2013, 01:53
Репутация: 0

Re: OpenLayers: OpenLayers.Layer.PointTrack

Сообщение kain76 » 31 янв 2013, 02:04

Добрый день.
Я только начал разбираться с Open Layers. Пытаюсь разместить на карте несколько векторов, но их не видно, хотя сам слой 'track' на карте присутствует. В чём проблема может быть?

кусок кода:
------------------------------------------------------------------------------------------------------------------------------------------

var pointlayer = new OpenLayers.Layer.Vector('Original');
pointlayer.addFeatures([
new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Point(52.52895, 159.20890)),
new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Point(53.52895, 158.20890)),
new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Point(54.52895, 157.20890)),
new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Point(52.52895, 160.20890))
]);

var tracklayer = new OpenLayers.Layer.PointTrack('track', {styleFrom: OpenLayers.Layer.PointTrack.SOURCE_NODE});
tracklayer.addNodes(pointlayer.features);
map.addLayer(tracklayer)

Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

Re: OpenLayers: OpenLayers.Layer.PointTrack

Сообщение Denis Rykov » 01 фев 2013, 18:02

Вот же работоспособный код, меняйте значения на свои и все будет работать.
Spatial is now, more than ever, just another column- The Geometry Column.

Vadim Zudkin
Новоприбывший
Сообщения: 6
Зарегистрирован: 31 янв 2010, 13:35
Репутация: 0

Re: OpenLayers: OpenLayers.Layer.PointTrack

Сообщение Vadim Zudkin » 02 май 2014, 13:48

На основе этого можно подготовить код для раскрашивания участков трека в зависимости от скорости.

Ответить

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

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

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