2016-09-27 11 views
1

geojsonファイルがサーバーからロードされているマップ上にいくつかのポイントが表示されています。 geojsonファイルが変更されるので、マップレイヤーをリフレッシュするのに適しています。これを行うために、私はsource.Vector(OpenLayersをバージョン3.17.1)にGeoJSONファイルの最新バージョンを取得するためにXHR呼び出しを実行source.Vectorローダー関数を使用してマップ上にポイントが表示されない

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

機能vectorLoaderを作成しました。これは

jsfiddle

地図ショー上のポイントは、私が代わりにこのようなローダーのurlプロパティを使用していますsource.Vectorオブジェクトを使用する場合ためにGeoJSONファイルが有効なJSONを持って下にjsfiddleでシミュレートされています。

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'を読むときに間違った投影が使用された場合、OpenLayersビューのデフォルト投影がWeb Mercatorであるため、featureProjection: 'EPSG:3857'に変更する必要があります。 GeoJSONを読んでいるときにデータ投影を明示的に定義したい場合は、dataProjection: 'EPSG:4326'に設定する必要があります。

実施例では、このフィドルで見つけることができます:https://jsfiddle.net/9oukr51t/

+0

うん、半径をコピーするのを忘れました。できるだけシンプルな私のフィドルを問題を表示するためにしようとしていたと私はそれを逃した..私はopenlayersとGISには新しいとまだいくつかの基本的なことにこだわっている。どうも!! – GoinOff

関連する問題