OpenLayers 4无法重新投影json文件

时间:2017-06-20 22:48:11

标签: openlayers

您好我从我的服务器加载了一组Json点数 存储在EPSG 32720(UTM 20S)中,也用于测试相同的点 存储在EPSG 4326坐标中。

使用Open Layers 3.8.2,我加载了两个文件,可以看到如何点 EPSG 32720重新投影并完美匹配在EPSG 4326点内绘制一个圆圈。

但是当使用Open layer 4时,重投影失败, 该点显示在另一个国家/地区。 文档略有不同。 (我只能写2个链接)

问题是我尝试了4个选项:

    proj4.defs("EPSG:32720","+proj=utm +zone=20 +south +datum=WGS84 +units=m +no_defs");     
var sourceProj = ol.proj.get('EPSG:32720');

1) var UTMFormat = new ol.format.GeoJSON({defaultDataProjection: sourceProj});
2) var UTMFormat = new ol.format.GeoJSON({defaultDataProjection: 'EPSG:32720'});

3)var UTMFormat = new ol.format.GeoJSON({featureProjection: 'EPSG:32720'});
4)var UTMFormat = new ol.format.GeoJSON({defaultDataProjection:'EPSG:32720', featureProjection: 'EPSG:32720'});

 var vectorLayer32720 = new ol.layer.Vector({
        source: new ol.source.Vector({            
            url: '/static/centroids32720.geojson',            
            format: UTMFormat
        }),
    style: stylePointsBlue    
   });

只有1和2适用于OL 3.8.2,  但可以算出什么是错的?  我用3.8.2制作两个plunker样品,用版本4制作另一个样品。

版本3.8.2 https://plnkr.co/edit/RNE48KkEKqiAnAd0Ssu2?p=preview

第4版  https://plnkr.co/edit/DvwImnvi8looJRZYOjB6?p=preview

有人可以告诉我出了什么问题。

问候

2 个答案:

答案 0 :(得分:0)

问题是您的GeoJSON包含已弃用的crs元素,OpenLayers 4.x会尊重该元素。但是你的proj4定义使用了不同的代码。要修复OpenLayers 4.x的示例,请为数据投影定义别名,如下所示:

proj4.defs('urn:ogc:def:crs:EPSG::32720', proj4.defs('EPSG:32720');

对于读取EPSG的矢量源:32720 GeoJSON,只需使用

format: new ol.format.GeoJSON()

没有任何构造函数选项。

注意:根据ISO标准,GeoJSON应始终采用地理坐标(EPSG:4326)。

答案 1 :(得分:0)

非常感谢你的回答。

随着您的解决方案工作良好,也只能写入epsg号

“crs”:{“type”:“name”,“properties”:{“name”:“32720”}},

问题来了,因为开放层的文档非常少。  另外,参数defaultDataProjection在4.x版本上有不同的用法。

我读到新的GeoJson格式将缺乏对CRS的支持,  从我的角度来看是一个很大的错误  所以GeoJson的新名称必须是:

“onlyWGS84GeoJson”

将最初的GeoJson留给可以处理的人  有预测。

问候