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

Значение атрибута у векторного слоя в OL3

Добавлено: 27 окт 2015, 15:01
Филиппов Владислав
Не могу получить значение у векторного слоя в OL3 (v3.10.1).
За пример взял вот это
Слой из GeoJSON.
Выборку получаю по клику на карте

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

var feature = layer.getSource().getClosestFeatureToCoordinate(evt.coordinate);
то что получается в наборе instanceof ol.Feature
при обращении к методу get () c указанием имени поля. получаю undefined, хотя атрибут есть в properties (см. скриншот)

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

           function createInfoContetnt(features, coordinate) {
                    for (var i = 0; i < features.length; i++) {
                        var f = features[i];
                        console.log(f instanceof ol.Feature); // true
                        console.log(f.get('CadastreNumber')); // undefined!!!
                        //console.log(features[i].getProperties());
                    }
Снимок.png
Снимок.png (78.03 КБ) 6338 просмотров
Что делаю не так?

Re: Значение атрибута у векторного слоя в OL3

Добавлено: 27 окт 2015, 15:20
MichaelK
getClosestFeatureToCoordinate возвращает одну Feature, откуда появляется цикл for?

Re: Значение атрибута у векторного слоя в OL3

Добавлено: 27 окт 2015, 17:20
Филиппов Владислав
он вызывается в цикле. его результат добавляется в массив

Re: Значение атрибута у векторного слоя в OL3

Добавлено: 27 окт 2015, 19:03
MichaelK
Да вроде всё так.
Может в CadastreNumber русская буква вкралась? :)

Re: Значение атрибута у векторного слоя в OL3

Добавлено: 27 окт 2015, 19:45
Филиппов Владислав
проверил, нет, не кириллица.
у меня была проблема в создании GeoJSON'а
у меня в properties был вложен ещё один properties - лишний уровень. но почему дебаггер показывал ol.Feature верно, values_ у объекта содержал geometry и properties без ещё одного properties?

Re: Значение атрибута у векторного слоя в OL3

Добавлено: 28 окт 2015, 11:23
MichaelK
Там properties оказывается не должно быть. Если посмотреть на "правильную" Feature в values_, там всё в кучу свалено и нет разделения на geometry и properties. Более того, геометрию можно получить через feature.get('geometry')

Посмотрел документацию, геометрия храниться как свойство с именем 'geometry' по умолчанию. Имя можно менять и вообще хранить больше одной геометрии.

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

var feature = new ol.Feature({
  geometry: new ol.geom.Polygon(polyCoords),
  labelPoint: new ol.geom.Point(labelCoords),
  name: 'My Polygon'
});

// get the polygon geometry
var poly = feature.getGeometry();

// Render the feature as a point using the coordinates from labelPoint
feature.setGeometryName('labelPoint');

// get the point geometry
var point = feature.getGeometry();

Re: Значение атрибута у векторного слоя в OL3

Добавлено: 28 окт 2015, 11:26
Филиппов Владислав
да, я разобрался уже. ранее приходилось работать в основном с WMS-слоями, а тут совсем другая песня