OL: атрибутивная выборка

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

OL: атрибутивная выборка

Сообщение Denis Rykov »

Есть векторный слой (загруженный локально из файла). Как можно отобразить только те объекты, что удовлетворяют определенному условию (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: атрибутивная выборка

Сообщение 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 и во внутреннем формате стилей для векторного слоя. Но сами по себе они ничего не делают.
Последний раз редактировалось Mavka 09 ноя 2010, 14:50, всего редактировалось 1 раз.
лангольеры под окном жрали время ом-ном-ном
Аватара пользователя
Mavka
Гуру
Сообщения: 2060
Зарегистрирован: 14 мар 2008, 17:36
Репутация: 9

Re: OL: атрибутивная выборка

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

Re: OL: атрибутивная выборка

Сообщение Denis Rykov »

2Mavka
А можно каким-нибудь образом получить доступ к объектам, которые удовлетворяют правилу? То есть мне в конечно счёте нужно посчитать охват объектов, отображаемых после применения правила.
Spatial is now, more than ever, just another column- The Geometry Column.
Аватара пользователя
Mavka
Гуру
Сообщения: 2060
Зарегистрирован: 14 мар 2008, 17:36
Репутация: 9

Re: OL: атрибутивная выборка

Сообщение Mavka »

Идея только такая:
1. Перебрать в цикле все объекты, отобрав в массив от подходящих объектов Bounds.
2. Создать объект OpenLayers.Bounds и расширить его на массив объектов (Bounds.extend).

P.S. OpenLayers - тонкий клиент, геопроцессинг по-возможности желательно перекладывать на сервер.
лангольеры под окном жрали время ом-ном-ном
Аватара пользователя
Mavka
Гуру
Сообщения: 2060
Зарегистрирован: 14 мар 2008, 17:36
Репутация: 9

Re: OL: атрибутивная выборка

Сообщение Mavka »

_DR_
По вашему вопросу в рассылке. Может все таки перейти от файла к сервису? Поставить легкий FeatureServer (python-скрипт) и пользоваться его фильтром? Он умеет делать выборки по атрибутам (только равно "=") и bbox.
лангольеры под окном жрали время ом-ном-ном
Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

Re: OL: атрибутивная выборка

Сообщение Denis Rykov »

Спасибо за наводку, интресная штука FeatureServer, никогда до этого не приходилось пользоваться.
Spatial is now, more than ever, just another column- The Geometry Column.
Аватара пользователя
Mavka
Гуру
Сообщения: 2060
Зарегистрирован: 14 мар 2008, 17:36
Репутация: 9

Re: OL: атрибутивная выборка

Сообщение Mavka »

Можно воспользоваться стратегией Filter. При ее использовании данные загружают в полном объеме и потом динамически включают/выключают нужные объекты.
лангольеры под окном жрали время ом-ном-ном
Ответить

Вернуться в «Веб-картография»

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

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