Как сгенерировать функции из ответа GeoXML MapServer в OpenLayers? - PullRequest
0 голосов
/ 17 апреля 2019

Может ли кто-нибудь объяснить мне хороший способ инициализации векторного слоя с помощью ответа от MapServer?

Вот способ, которым я делаю:

new ol.layer.Vector({
    title: name,
    source: new ol.source.Vector({
        wrapX: false,
        url: function (extent) {
            return data.map_server_adress + 
            "&typename=" + name +
            "&srs=" + data.projection +
            "&service=WFS&request=GetFeature&version=1.0.0&BBOX="+ extent.join(',');
        },
        format: new ol.format.GML(),
        strategy: ol.loadingstrategy.bbox,
})

И, похоже, это работает, так как я получаю такие ответы от сервера:

<wfs:FeatureCollection>
    <gml:boundedBy>
      <gml:Box srsName="EPSG:27572">
        <gml:coordinates>915095.490151,2081613.946304 915547.647404,2082070.940534</gml:coordinates>
      </gml:Box>
    </gml:boundedBy>
    <gml:featureMember>
      <ms:parcelles_wfs fid="parcelles_wfs.10583768">
        <gml:boundedBy>
            <gml:Box srsName="EPSG:27572">
                <gml:coordinates>915289.953312,2081613.946304 915330.053226,2081669.612361</gml:coordinates>
            </gml:Box>
        </gml:boundedBy>
        <ms:msGeometry>
        <gml:Polygon srsName="EPSG:27572">
          <gml:outerBoundaryIs>
            <gml:LinearRing>
              <gml:coordinates>915315.110225,2081613.946304 915307.324782,2081627.632231 915301.500411,2081637.931837 915289.953312,2081658.351753 915303.878919,2081667.360430 915307.332797,2081669.612361 915330.053226,2081628.008577 915315.110225,2081613.946304 </gml:coordinates>
            </gml:LinearRing>
          </gml:outerBoundaryIs>
        </gml:Polygon>
        </ms:msGeometry>
        <ms:ogc_fid>10583768</ms:ogc_fid>
      </ms:parcelles_wfs>
    </gml:featureMember>
</wfs:FeatureCollection>

Но тогда, когдая пытаюсь получить объекты из источника слоя, я просто получаю пустой массив.Я попытался напечатать информацию об источнике и особенностях выше, кажется, в члене с именем nullGeometryFeatures_.Я предполагаю, что OpenLayers не может построить геометрию объекта, но не может понять почему?

EDIT : Благодаря ответу Майка я понял, что сервер, который я использую, отправлял данные GML2, в то время как OpenLayers по умолчаниюОжидаемый формат GML3.Поэтому, если ваши данные выглядят как , что вместо , что , вам просто нужно изменить new ol.format.GML() на new ol.format.GML2()!

...