2017-06-20 67 views
1

嗨我從我的服務器加載一組Json點,點 存儲在EPSG 32720,這是UTM 20S,也用於測試相同點 存儲在EPSG 4326座標。OpenLayers 4 can not reproject json file

使用Open Layers 3.8.2,我加載這兩個文件,並可以看到EPSG 32720的 重新投影的點和完美匹配在EPSG 4326點內繪製一個圓。

但是,當使用Open layers 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, 但可以推測有什麼不好? 我做兩個plunker樣本與一個3.8.2和其他與第4版

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

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

有人能告訴我什麼是錯的。

問候

回答

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)中。

0

非常感謝您的回答。

隨着你的解決方案的工作很好,也只能工作writen EPSG的數量

「CRS」:{ 「類型」: 「名字」, 「屬性」:{ 「名」: 「32720」}},

問題出現是因爲開放圖層的文檔非常少。 另外,參數defaultDataProjection在4.x版本上有不同的用處。

,我讀了新的GeoJSON格式導出會從我的角度來看缺乏CRS, 的支持是一個極大的錯誤 所以GeoJSON的新名稱必須是:

「onlyWGS84GeoJson」

和將原始GeoJson留給可以用預測來處理 的人員。

問候