您好我从我的服务器加载了一组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
有人可以告诉我出了什么问题。
问候
答案 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留给可以处理的人 有预测。
问候