Страница 1 из 1
OL: атрибутивная выборка
Добавлено: 09 ноя 2010, 13:41
Denis Rykov
Есть векторный слой (загруженный локально из файла). Как можно отобразить только те объекты, что удовлетворяют определенному условию (OpenLayers.Filter.Comparison похоже работает только при http запросах)?
Re: OL: атрибутивная выборка
Добавлено: 09 ноя 2010, 14:27
Mavka
Классы OpenLayers.Filter служат для создания фильтров:
Код: Выделить всё
filter = new OpenLayers.Filter.Comparison({
type: OpenLayers.Filter.Comparison.EQUAL_TO,
property: 'name',
value: 'Vasya',
});
эквивалентно "name = Vasya". Можно создавать вложенные условия (count < 5) AND (country = "russia"). Кстати, по логике они очень близки к OGC Filter Encoding.
Далее этот фильтр нужно куда то "применить". Я, например, из этих фильтров создаю длинные гирлянды стилей и сохраняю их на сервере в виде SLD. Можно использовать в запросах WMS/WFS по типу inline SLD и во внутреннем формате стилей для векторного слоя. Но сами по себе они ничего не делают.
Re: OL: атрибутивная выборка
Добавлено: 09 ноя 2010, 14:47
Mavka
Непосредственно по вопросу. Попробуйте создать стиль, в котором указаны только нужные объекты:
Код: Выделить всё
var new_style = new OpenLayers.Style();
var rule = new OpenLayers.Rule({
filter: new OpenLayers.Filter.Comparison({
type: OpenLayers.Filter.Comparison.EQUAL_TO,
property: 'country',
value: 'russia',
}),
symbolizer: {pointRadius: 10, fillColor: "green",
fillOpacity: 0.5, strokeColor: "black"}
});
new_style.addRules([rule]);
lay_vector.style = new_style;
По последней строчке не уверен, возможно, придется использовать 'styleMap'.
Re: OL: атрибутивная выборка
Добавлено: 20 ноя 2010, 14:30
Denis Rykov
2Mavka
А можно каким-нибудь образом получить доступ к объектам, которые удовлетворяют правилу? То есть мне в конечно счёте нужно посчитать охват объектов, отображаемых после применения правила.
Re: OL: атрибутивная выборка
Добавлено: 20 ноя 2010, 18:45
Mavka
Идея только такая:
1. Перебрать в цикле все объекты, отобрав в массив от подходящих объектов Bounds.
2. Создать объект OpenLayers.Bounds и расширить его на массив объектов (
Bounds.extend).
P.S. OpenLayers - тонкий клиент, геопроцессинг по-возможности желательно перекладывать на сервер.
Re: OL: атрибутивная выборка
Добавлено: 21 ноя 2010, 16:23
Mavka
_DR_
По вашему вопросу в рассылке. Может все таки перейти от файла к сервису? Поставить легкий
FeatureServer (python-скрипт) и пользоваться его фильтром? Он умеет делать выборки по атрибутам (только равно "=") и bbox.
Re: OL: атрибутивная выборка
Добавлено: 23 ноя 2010, 19:41
Denis Rykov
Спасибо за наводку, интресная штука FeatureServer, никогда до этого не приходилось пользоваться.
Re: OL: атрибутивная выборка
Добавлено: 23 ноя 2010, 22:54
bim2010
Re: OL: атрибутивная выборка
Добавлено: 10 мар 2011, 11:50
Mavka
Можно воспользоваться стратегией
Filter. При ее использовании данные загружают в полном объеме и потом динамически включают/выключают нужные объекты.