UMN Mapserver + WFS

Mapserver, GeoServer, MapGuide, Google и другое ПО для веб-картографии
Ответить
Аватара пользователя
Mavka
Гуру
Сообщения: 2060
Зарегистрирован: 14 мар 2008, 17:36
Репутация: 9

UMN Mapserver + WFS

Сообщение Mavka »

Целую неделю пытался выбить из mapserver'а wfs. Почему то не проходила геометрия. Т.е. все атрибуты выдает, и геометрия в виде атрибута в кодировке WKT присутствует. Но нет отдельного node типа

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

<ms:the_geom>
  <gml:MultiLineString srsName="epsg:4326">
    <gml:lineStringMember>
      <gml:LineString>
        <gml:coordinates>26.950000,60.466700 29.266700,54.333300 </gml:coordinates>
      </gml:LineString>
    </gml:lineStringMember>
  </gml:MultiLineString>
</ms:the_geom>
 
Испробовал кучу вариантов с прописыванием

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

gml_geometries           'the_geom'
gml_the_geom_type        'multiline' 
И всякое прочее. При запросе типа GET получаю правильный xml, а на POST - встало и заело.
Как только заменил mapserver 5.6.3-1 из OSGeo4W на MS4W 2.3.1, все само заработало.

Осталась одна проблема. Параметр задает ограничение на кол-во выдаваемых объектов в одном запросе:

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

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

Re: UMN Mapserver + WFS

Сообщение Mavka »

Совет
Перепроецирование вектора

По WFS 1.0.0 можно запросить вектор только в проекции EPSG:4326 (а подружить MapServer и OpenLayers в варианте WFS 1.1.0 у меня не получилось). Поэтому вот пример, как надо правильно задавать проекции чтобы OL сам все привел в порядок. Не запутайтесь в скобках:

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

map = new OpenLayers.Map('map', {
    projection: new OpenLayers.Projection('EPSG:900913'),
});

var layer_goo = new OpenLayers.Layer.Google('Google Map', {
    type: G_NORMAL_MAP,
    sphericalMercator: true
});

var layer_wfs = new OpenLayers.Layer.Vector('WFS',
    {
        strategies: [new OpenLayers.Strategy.Fixed()],
        protocol: new OpenLayers.Protocol.WFS({
            url: url_server_2 + '?map=' + url_server_2_map,
            featureType: 'my_layer',
            featureNS: 'http://mysite/namespace',
            /*srsName: 'EPSG:4326', указывать нужно только для WFS 1.1.0 */
            version: '1.0.0',
        }),
        projection: new OpenLayers.Projection("EPSG:4326")
    }
); 
"sphericalMercator" нужен, если вы планируете подключать слои wms (подробнее).
А в случае, если проекция векторного слоя отличается от проекции карты (map), то OL приводит ее к норме.
лангольеры под окном жрали время ом-ном-ном
Ответить

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

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

Сейчас этот форум просматривают: Bing [Bot] и 1 гость