Может ли кто-нибудь объяснить мне хороший способ инициализации векторного слоя с помощью ответа от 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()
!