Geoserver стили, хранение слоев и оптимизация

Mapserver, GeoServer, MapGuide, Google и другое ПО для веб-картографии
Ответить
iErroRi
Интересующийся
Сообщения: 27
Зарегистрирован: 19 дек 2011, 09:28
Репутация: 0

Geoserver стили, хранение слоев и оптимизация

Сообщение iErroRi »

Есть карта 3 слоя кварталы, дома и улицы. Как лучше их хранить? Все засунуть в 1 таблицу или сделать 3?

Сейчас все лежит в своих таблицах, и получается что когда браузер грузит тайлы делает запрос к каждому слою отдельно. Получается при 256*256 по 10-15 запросов на слой. Да и в большинстве случаев загружается просто пустая прозрачная png.

Сейчас попробовал все засунуть в 1 таблицу, в принципе получилось только вот линии рисуются как полигоны. Можно ли SLD их разделить? Чтобы линии рисовались линиями,а полигоны полигонами.

Вообще как оптимизировать хранение? Делать для каждого слоя свою таблицу, свой слой в OpenLayers. Или лучше отдельные таблицы по типам точка, линия, полигон? Или вообще есть возможность в геосервере генерировать тайлы 1 запросом с нескольких "Типы объектов" (таблиц).
iErroRi
Интересующийся
Сообщения: 27
Зарегистрирован: 19 дек 2011, 09:28
Репутация: 0

Re: Geoserver стили, хранение слоев и оптимизация

Сообщение iErroRi »

Вот решил немного отписать как сделал, вдруг кому-нибудь пригодится. Заодно пару вопросов написать авось кто сталкивался)

Все слои оставил пока в своих таблицах. Для каждой типа объектов своя таблица.

При создании карты все слои грузятся в 1 WMS.

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

all = new OpenLayers.Layer.WMS("МТКС","/geoserver/wms",{layers:'layer1,layer2,layer3,layer4,layer5',transparent:'true',transitionEffect: 'resize'});
Стили каждого слоя описаны в SLD и подключены к набору данных в GeoServer.
Тут возникла проблема №1 Подписи не всегда отображаются либо слишком часто, и на использование:

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

<VendorOption name="repeat">500</VendorOption>
Реагировать не хочет.

Все стало летать на браузер нагрузка упала в разы) Сразу получается только 2 слоя Гугл и мой.
Такой подход плохо сказывается на сервере, при генерации тайлов проц 100%, но думаю решу это кэшем. Хотя и генерация не такая долгая, секунды 2 на ~20 тайлов.

Так как слои надо редактировать, то нужный слой при выборе удаляется из WMS

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

map.removeLayer(all);
all = new OpenLayers.Layer.WMS("wms","/geoserver/wms",{layers:'тут все слои за исключением нужного',transparent:'true',transitionEffect: 'resize'});
map.addLayer(all);  
И создаю Vector

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

        vector = new OpenLayers.Layer.Vector('Слой WFS', {
            strategies: [new OpenLayers.Strategy.BBOX(), new OpenLayers.Strategy.Save()],
            protocol: new OpenLayers.Protocol.WFS({
                version: '1.1.0',
                url: 'http://localhost.lan/geoserver/wfs',
                featureType: 'имя слоя',
                featureNS: 'http://www.openplans.org/topp',
                srsName: 'EPSG:4326'
            }),
            renderers: renderer,
            styleMap: new OpenLayers.StyleMap(),
            metadata: {gType: 'Геометрия для контрола добаления'}
        });
Потом подключаю к нему стиль в xml файле тот же что и на гео сервере.

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

        $j.ajax({url: '/sld/имя слоя.xml',success: function(data) {
          sld = format.read(data);
          vector.styleMap.styles["default"] = sld.namedLayers['имя стиля'].userStyles[0];
        }});

       map.addLayer(vector); //и добавляем слой)
Тут у меня возникла проблема №2 почему-то не отображаются подписи, хотя в SLD они описаны и в WMS показываются.

Контролы добавления, редактирования и удаления генерю также при создании слоя в глобальные переменные.

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

        if(vector.metadata.gType=='Polygon'){ctrl_add = new OpenLayers.Control.DrawFeature(vector, OpenLayers.Handler.Polygon);}
        if(vector.metadata.gType=='Path'){ctrl_add = new OpenLayers.Control.DrawFeature(vector, OpenLayers.Handler.Path);}
        if(vector.metadata.gType=='Point'){ctrl_add = new OpenLayers.Control.DrawFeature(vector, OpenLayers.Handler.Point);}
        ctrl_edit = new OpenLayers.Control.ModifyFeature(vector,{mode: OpenLayers.Control.ModifyFeature.RESHAPE | OpenLayers.Control.ModifyFeature.DRAG});
        ctrl_del = new DeleteFeature(vector);
        ctrl_sel = new OpenLayers.Control.SelectFeature(vector, {onSelect: onFeatureSelect, onUnselect: onFeatureUnselect});
        
        map.addControls([ctrl_add, ctrl_edit, ctrl_del, ctrl_sel]);
Тут возникла проблема №3 При редактировании поллиний не отображаются черные точки на концах и узлах линии. По центру оранжевая есть для добавления узла, а черных нет(
iErroRi
Интересующийся
Сообщения: 27
Зарегистрирован: 19 дек 2011, 09:28
Репутация: 0

Re: Geoserver стили, хранение слоев и оптимизация

Сообщение iErroRi »

Проблема №3 решилась добавлением в SLD rule без фильтров. Видимо стили как то цепляют и создаваемые для редактирования точки.
oxch
Участник
Сообщения: 53
Зарегистрирован: 04 мар 2010, 11:30
Репутация: 0
Откуда: Комсомольск-на-Амуре
Контактная информация:

Re: Geoserver стили, хранение слоев и оптимизация

Сообщение oxch »

А почему не использовать Layer Groups в Geoserver?
Чудес на свете не бывает, они просто случаются.
Знать - значит уметь использовать.
Интерактивная карта-схема Хабаровского края
iErroRi
Интересующийся
Сообщения: 27
Зарегистрирован: 19 дек 2011, 09:28
Репутация: 0

Re: Geoserver стили, хранение слоев и оптимизация

Сообщение iErroRi »

Просто стоял geoserver 1.7 там их не видел)
Щас переделал все на группы. Правдо их пришлось делать делать столько же сколько слоев из-за того что при редактировании уберается 1 из слоев из WMS. Но зато можно использовать geocashe, но с ним возникла проблема №4 это обновление при редактировании =) не всегда он обновляет вовремя. Был бы какой-нибуть запрос на перестройку кеша в определенном квадрате было бы супер.
Ответить

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

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

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