2016-09-27 21 views
1

我有一個問題,顯示從服務器加載geojson文件的地圖上的幾個點。 geojson文件發生變化,所以我想要一個刷新地圖圖層的好方法。要做到這一點,我創建了source.Vector(的OpenLayers的3.17.1版)點使用source.Vector加載函數不顯示在地圖上

var locationSource = new ol.source.Vector({ 
    format: new ol.format.GeoJSON({ 
    defaultDataProjection :'EPSG:4326' 
    }), 
    loader: vectorLoader, 
    strategy: ol.loadingstrategy.all 
}); 

功能vectorLoader,其執行XHR調用來檢索最新版本的GeoJSON的文件。這已經模擬了下面的jsfiddle

jsfiddle

的GeoJSON的文件具有有效的JSON,因爲在地圖上顯示的點,如果我使用的使用URL屬性,而不是像這樣的加載器source.Vector對象:

var locationSource = new ol.source.Vector({ 
    url: '/openlayers/location.geojson', 
    format: new ol.format.GeoJSON({ 
     defaultDataProjection :'EPSG:4326' 
     }) 
    }); 

我會用這個,但是當新文件可用時使用緩存版本的geojson文件是非常可怕的。我想要一些更可靠的東西,這就是爲什麼我試圖讓它與loader一起工作。

以上的jsfiddle鏈接了所有的代碼,它似乎運行正常,但點從未露面addFeatures後的地圖,坐落在這裏:

onSuccess: function(response) { 
    var format = new ol.format.GeoJSON(); 
    var features = format.readFeatures(response, { 
    featureProjection: 'EPSG:4326' 
    }); 
    source.addFeatures(features); 
    console.info(source.getFeatures()); 
    map.updateSize(); 
    source.changed(); 

你會看到,沒有點顯示出對映射在jsfiddle中提供的數據。我覺得我在這裏缺少一些基本的東西,但是在找到很多解決方案之後,沒有任何工作。我似乎需要在「addFeatures」加載完成後再次執行樣式函數。這可以在上面的jsfiddle的控制檯日誌中看到。

回答

1

事實上,這只是一個小小的問題,你錯過了。

首先radius沒有被定義,這可能是從你沒有複製到你的小提琴的變量中拉出來的。

雖然主要的問題是當您閱讀功能featureProjection: 'EPSG:4326'時使用了錯誤的投影,但它應該更改爲featureProjection: 'EPSG:3857',因爲OpenLayers視圖中的默認投影是Web墨卡託。也可能出現這種情況,您希望在閱讀GeoJSON時明確定義數據投影,因此您應該設置dataProjection: 'EPSG:4326'

在這個小提琴中可以找到一個工作示例:https://jsfiddle.net/9oukr51t/

+0

是的,忘了複製半徑。試圖讓我的小提琴儘可能簡單,以顯示問題,我錯過了它。我是開放層和GIS的新手,但仍然陷於一些基本的東西。謝謝!! – GoinOff