Openlayers 3 OL3多边形WFS特征搜索-轴方向未定义

Openlayers 3 OL3多边形WFS特征搜索-轴方向未定义,openlayers-3,projection,proj,Openlayers 3,Projection,Proj,我有一个应用程序,它允许用户在地图上绘制一个多边形,然后使用JSTS库在WFS层上进行多边形相交,并读取与用户多边形相交的特征 用户在地图上绘制“选择多边形”后会发生错误,返回错误: '无法读取未定义的'getAxisOrientation'属性' 这似乎是一个与投影相关的问题,我使用的是EPSG:27700投影 绘制用户多边形时的代码如下-是否需要在WFS读取特征方法中包含投影 draw.on('drawend',function(e){ var extent = e.feature.getG

我有一个应用程序,它允许用户在地图上绘制一个多边形,然后使用JSTS库在WFS层上进行多边形相交,并读取与用户多边形相交的特征

用户在地图上绘制“选择多边形”后会发生错误,返回错误:

'无法读取未定义的'getAxisOrientation'属性'

这似乎是一个与投影相关的问题,我使用的是EPSG:27700投影

绘制用户多边形时的代码如下-是否需要在WFS读取特征方法中包含投影

draw.on('drawend',function(e){
var extent = e.feature.getGeometry().getExtent();
var geomA = e.feature.getGeometry();

myDrawSource.clear();
mySelectionsSource.clear();
$.ajax('../../geoserver/wfs', {
            type: 'GET',
            data: {
                service: 'WFS',
                version: '1.1.0',
                request: 'GetFeature',
                typename: 'planning:flood_zone_2',
                srsname: 'EPSG:27700',
                bbox: extent.join(',') + ',EPSG:27700'
            }
        }).done(function(resp){
        var formatWFS = new ol.format.WFS();
        var featuresInExtent = formatWFS.readFeatures(resp);
        var featuresOnDrawPoly = new Array();
        for (var i=0;i<featuresInExtent.length;i++){       
        var geomB = featuresInExtent[i].getGeometry();
          if (polyIntersectsPoly(geomA,geomB)===true){
          featuresOnDrawPoly.push(featuresInExtent[i])
          }
        }
        mySelectionsSource.addFeatures(featuresOnDrawPoly);
        //here you may iterate and get the attributes of those falling within the draw polygon
        for (var z=0;z<featuresOnDrawPoly.length;z++){
        console.log("address is ======", featuresOnDrawPoly[z].get('definition'));
        }
        }).fail(function () {
        alert("fail loading layer!!!")
        });

})

您需要为其创建别名http://www.opengis.net/gml/srs/epsg.xml27700 到EPSG:27700,因为这是GML解析器读取的容器,请参阅:


现在,当从GeoServer 2.9.1和OpenLayers 3.17.1加载WFS 1.1.0功能时,出现了这个问题

GML中指定的srsName为urn:x-ogc:def:crs:EPSG:3763,因此以下内容适用于我:

var proj3763=新的ol.proj.Projection{ 代码:“EPSG:”+3763, 范围:[-121656.5849,-294200.8899,172945.8815,277430.8421], 轴:“enu” }; ol.proj.addProjectionproj3763; var proj3763OGC=new ol.proj.Projection{//srsName from GeoServer GML3 WFS 代码:“urn:x-ogc:def:crs:EPSG:”+3763, 轴:‘enu’, 范围:[-121656.5849,-294200.8899,172945.8815,277430.8421] }; ol.proj.addProjectionproj3763OGC;
ol.proj.addequivalentprojects[proj3763OGC,proj3763];谢谢你的信息,一定是这个,但我有点挣扎。。。我已经改变了从var bng=ol.proj.get'EPSG:27700'设置投影的位置;to var bng=ol.proj.addequivalentprojects ol.proj.get'EPSG:27700',ol.proj.get'http://epsg.io/27700.gml'; 但我收到一个错误“projections.forEach不是函数”。在我第一次用proj4定义了投影之后,我需要添加别名吗?很抱歉github问题有一个输入错误。函数需要获取数组。您可以尝试如下操作:var proj=new ol.proj.projection{code:'http://www.opengis.net/gml/srs/epsg.xml27700,轴:'enu'};ol.proj.addequivalentprojects[ol.proj.get'EPSG:27700',proj];这就去掉了我的“projections.forEach不是函数”,但是“无法读取属性”getAxisOrientation“of undefined”的原始错误仍然显示。opengis站点似乎也改变了它的URL,所以我使用了我认为适用于OGC GML的URL?当我调试时,我得到了http://www.opengis.net/gml/srs/epsg.xml27700 作为容器,所以您需要使用它作为等效投影的代码。使用ol.proj.get验证它是否返回正确的投影对象。
proj4.defs("EPSG:27700", "+proj=tmerc +lat_0=49 +lon_0=-2 +k=0.9996012717 +x_0=400000 +y_0=-100000 +ellps=airy +towgs84=446.448,-125.157,542.06,0.15,0.247,0.842,-20.489 +units=m +no_defs");