OL: атрибутивная выборка
- Denis Rykov
- Гуру
- Сообщения: 3376
- Зарегистрирован: 11 апр 2008, 21:09
- Репутация: 529
- Ваше звание: Author
- Контактная информация:
OL: атрибутивная выборка
Есть векторный слой (загруженный локально из файла). Как можно отобразить только те объекты, что удовлетворяют определенному условию (OpenLayers.Filter.Comparison похоже работает только при http запросах)?
Spatial is now, more than ever, just another column- The Geometry Column.
- Mavka
- Гуру
- Сообщения: 2060
- Зарегистрирован: 14 мар 2008, 17:36
- Репутация: 9
Re: OL: атрибутивная выборка
Классы OpenLayers.Filter служат для создания фильтров:
эквивалентно "name = Vasya". Можно создавать вложенные условия (count < 5) AND (country = "russia"). Кстати, по логике они очень близки к OGC Filter Encoding.
Далее этот фильтр нужно куда то "применить". Я, например, из этих фильтров создаю длинные гирлянды стилей и сохраняю их на сервере в виде SLD. Можно использовать в запросах WMS/WFS по типу inline SLD и во внутреннем формате стилей для векторного слоя. Но сами по себе они ничего не делают.
Код: Выделить всё
filter = new OpenLayers.Filter.Comparison({
type: OpenLayers.Filter.Comparison.EQUAL_TO,
property: 'name',
value: 'Vasya',
});
Далее этот фильтр нужно куда то "применить". Я, например, из этих фильтров создаю длинные гирлянды стилей и сохраняю их на сервере в виде SLD. Можно использовать в запросах WMS/WFS по типу inline SLD и во внутреннем формате стилей для векторного слоя. Но сами по себе они ничего не делают.
Последний раз редактировалось Mavka 09 ноя 2010, 14:50, всего редактировалось 1 раз.
лангольеры под окном жрали время ом-ном-ном
- Mavka
- Гуру
- Сообщения: 2060
- Зарегистрирован: 14 мар 2008, 17:36
- Репутация: 9
Re: OL: атрибутивная выборка
Непосредственно по вопросу. Попробуйте создать стиль, в котором указаны только нужные объекты:
По последней строчке не уверен, возможно, придется использовать 'styleMap'.
Код: Выделить всё
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;
лангольеры под окном жрали время ом-ном-ном
- Denis Rykov
- Гуру
- Сообщения: 3376
- Зарегистрирован: 11 апр 2008, 21:09
- Репутация: 529
- Ваше звание: Author
- Контактная информация:
Re: OL: атрибутивная выборка
2Mavka
А можно каким-нибудь образом получить доступ к объектам, которые удовлетворяют правилу? То есть мне в конечно счёте нужно посчитать охват объектов, отображаемых после применения правила.
А можно каким-нибудь образом получить доступ к объектам, которые удовлетворяют правилу? То есть мне в конечно счёте нужно посчитать охват объектов, отображаемых после применения правила.
Spatial is now, more than ever, just another column- The Geometry Column.
- Mavka
- Гуру
- Сообщения: 2060
- Зарегистрирован: 14 мар 2008, 17:36
- Репутация: 9
Re: OL: атрибутивная выборка
Идея только такая:
1. Перебрать в цикле все объекты, отобрав в массив от подходящих объектов Bounds.
2. Создать объект OpenLayers.Bounds и расширить его на массив объектов (Bounds.extend).
P.S. OpenLayers - тонкий клиент, геопроцессинг по-возможности желательно перекладывать на сервер.
1. Перебрать в цикле все объекты, отобрав в массив от подходящих объектов Bounds.
2. Создать объект OpenLayers.Bounds и расширить его на массив объектов (Bounds.extend).
P.S. OpenLayers - тонкий клиент, геопроцессинг по-возможности желательно перекладывать на сервер.
лангольеры под окном жрали время ом-ном-ном
- Mavka
- Гуру
- Сообщения: 2060
- Зарегистрирован: 14 мар 2008, 17:36
- Репутация: 9
Re: OL: атрибутивная выборка
_DR_
По вашему вопросу в рассылке. Может все таки перейти от файла к сервису? Поставить легкий FeatureServer (python-скрипт) и пользоваться его фильтром? Он умеет делать выборки по атрибутам (только равно "=") и bbox.
По вашему вопросу в рассылке. Может все таки перейти от файла к сервису? Поставить легкий FeatureServer (python-скрипт) и пользоваться его фильтром? Он умеет делать выборки по атрибутам (только равно "=") и bbox.
лангольеры под окном жрали время ом-ном-ном
- Denis Rykov
- Гуру
- Сообщения: 3376
- Зарегистрирован: 11 апр 2008, 21:09
- Репутация: 529
- Ваше звание: Author
- Контактная информация:
Re: OL: атрибутивная выборка
Спасибо за наводку, интресная штука FeatureServer, никогда до этого не приходилось пользоваться.
Spatial is now, more than ever, just another column- The Geometry Column.
-
- Гуру
- Сообщения: 977
- Зарегистрирован: 27 янв 2009, 22:57
- Репутация: 258
- Mavka
- Гуру
- Сообщения: 2060
- Зарегистрирован: 14 мар 2008, 17:36
- Репутация: 9
Re: OL: атрибутивная выборка
Можно воспользоваться стратегией Filter. При ее использовании данные загружают в полном объеме и потом динамически включают/выключают нужные объекты.
лангольеры под окном жрали время ом-ном-ном
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 5 гостей