создать запрос для поиска функции картографического сервера - PullRequest
0 голосов
/ 02 февраля 2019

Я использую openlayers 4.4.0 и пытаюсь создать запрос для поиска функции картографического сервера и отображения многоугольника.

Этот пример меня вдохновил, но я обнаружил ошибку 57(Я не нахожу, где найти ошибки openlayers 4.4).

https://openlayers.org/en/v4.6.5/examples/vector-wfs-getfeature.html

Как правильно построить этот запрос, пожалуйста?

Я пробую этот код иполучить ошибку 57

var vectorSource = new ol.source.Vector();
// generate a GetFeature request
      var featureRequest = new ol.format.WFS().writeGetFeature({
        srsName: 'EPSG:3857',
        featureNS: 'http://www.opengis.net/wfs',
        featurePrefix: 'ms',
        featureTypes: ['emprise'],
        outputFormat: 'application/json',
        filter: ol.format.filter.and(
            //ol.format.filter.like('name', 'Mississippi*'),
            ol.format.filter.equalTo('numope', 'FA11163001') //example numope=='FA11163001'
        )
      });
// then post the request and add the received features to a layer
      fetch('http://10.210.1.32:8080/cgi-bin/mapserv.exe?map=C:/ms4w/map/fond_mapserver_wfs_ol4.map', {
        method: 'POST',
        body: new XMLSerializer().serializeToString(featureRequest)
      }).then(function(response) {
        return response.json();
      }).then(function(json) {
        var features = new ol.format.GeoJSON().readFeatures(json);
        vectorSource.addFeatures(features);
        //map.getView().fit(vectorSource.getExtent());
        console.log ('featuresrequest',features)
      });

Ответы [ 2 ]

0 голосов
/ 05 февраля 2019

на данный момент это работает

    var listeNumOpe = 'numope';//document.getElementById("listeNumOpe").value;
    var choixNumOpe = 'FA11139401';//document.getElementById("choixNumOpe").value;
    var searchOpeUrl = "http://10.210.1.32:8080/cgi-bin/mapserv.exe?map=C:/ms4w/map/fond_mapserver_wfs_ol4.map&SERVICE=WFS&version=1.0.0&request=GetFeature&typename=emprise&Filter=<Filter><PropertyIsEqualTo><PropertyName>" + listeNumOpe + "</PropertyName><Literal>" + choixNumOpe + "</Literal></PropertyIsEqualTo></Filter>&outputFormat=geojson" 
    ;
    //----------------------------------------------------------------------------------
    var vectorSource = new ol.source.Vector();

// then post the request and add the received features to a layer
      fetch(searchOpeUrl).then(function(response) {
        return response.json();
        }).then(function(json) {
        var features = new ol.format.GeoJSON().readFeatures(json,{ 
            dataProjection: 'EPSG:2154',
            featureProjection:'EPSG:3857' });
        vectorSource.addFeatures(features);
        map.getView().fit(vectorSource.getExtent());
        });
0 голосов
/ 04 февраля 2019

Вы используете фильтр and, который требует как минимум двух условий (как подсказывает ваша ошибка).Раскомментируйте первый фильтр в функции and или используйте только фильтр equalTo.

var featureRequest = new ol.format.WFS().writeGetFeature({
    srsName: 'EPSG:3857',
    featureNS: 'http://www.opengis.net/wfs',
    featurePrefix: 'ms',
    featureTypes: ['emprise'],
    outputFormat: 'application/json',
    filter: ol.format.filter.equalTo('numope', 'FA11163001') 
});

Вы можете найти коды ошибок в https://openlayers.org/en/latest/doc/errors/ в качестве геокодирования, упомянутого в их комментарии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...