Openlayers 4:WFS格式始终翻转EPSG:4326上的坐标

Openlayers 4:WFS格式始终翻转EPSG:4326上的坐标,openlayers,openlayers-3,Openlayers,Openlayers 3,当使用ol.format.WFS(GML2和GML3)读取特征时,如果投影为EPSG:4326,则将始终假定这些特征为YX。所以我把它们翻过来。我在Geoserver2.11中使用了这一点,从这个版本开始,服务器可以将坐标作为XY发送,具体取决于通过投影的方式。你可以读到它 通过OL代码,我可以看到它从xml中读取投影,并根据轴方向(对于4326是neu)决定将其翻转,从而导致翻转 问题是我的配置取决于客户端,而服务器可能已经在发送XY。我想知道这是OpenLayers的一个bug还是一个决定

当使用
ol.format.WFS
(GML2和GML3)读取特征时,如果投影为EPSG:4326,则将始终假定这些特征为YX。所以我把它们翻过来。我在Geoserver2.11中使用了这一点,从这个版本开始,服务器可以将坐标作为XY发送,具体取决于通过投影的方式。你可以读到它

通过OL代码,我可以看到它从xml中读取投影,并根据轴方向(对于4326是neu)决定将其翻转,从而导致翻转

问题是我的配置取决于客户端,而服务器可能已经在发送XY。我想知道这是OpenLayers的一个bug还是一个决定


有没有办法阻止它这样做?

您可以使用自定义投影对象覆盖它

/ override the axis orientation for WMS GetFeatureInfo
var proj = new ol.proj.Projection({
  code: 'http://www.opengis.net/gml/srs/epsg.xml#4326',
  axis: 'enu'
});
ol.proj.addEquivalentProjections([ol.proj.get('EPSG:4326'), proj]);

只需确保代码的字符串与WFS/GML文档中的字符串匹配。

您可以使用自定义投影对象覆盖它

/ override the axis orientation for WMS GetFeatureInfo
var proj = new ol.proj.Projection({
  code: 'http://www.opengis.net/gml/srs/epsg.xml#4326',
  axis: 'enu'
});
ol.proj.addEquivalentProjections([ol.proj.get('EPSG:4326'), proj]);

只需确保代码字符串与WFS/GML文档中的内容匹配即可。

我不能100%确定该解决方案对我是否可行。我正在构建的web客户端可以提供不同的服务,这些服务可能位于不同的服务器中。这意味着配置可能会根据所显示的层/服务进行更改。这可能意味着不断更改每个查询的投影定义。我想可能是一个更可行的解决方案,可能会覆盖执行检查的函数。我不能100%确定该解决方案对我是否可行。我正在构建的web客户端可以提供不同的服务,这些服务可能位于不同的服务器中。这意味着配置可能会根据所显示的层/服务进行更改。这可能意味着不断更改每个查询的投影定义。我想可能是一个更可行的解决方案,可能会覆盖执行检查的函数。