1

1つのマップを作成しようとしています。OSM をベース レイヤーとして使用していますが、道路網を GeoJSON としてオーバーレイしようとしています。コードにエラーはありません (Firebug で確認済み)。OSM の素敵なマップを表示できますが、問題は、OSM マップに道路網がないことです。私は自分が何をしたのかわかりません。以下に、コードを示します。

次のコマンドを使用して、コンソールから GeoJSON を作成しました。OSGeo Live (Ubuntu) を使用しています。

$ ogr2ogr -f "GeoJSON" roads.json roads.shp roads

JavaScriptコード----

//OSM Layer-----------------------------------------------
var map = new OpenLayers.Map('map');
var layer = new OpenLayers.Layer.OSM( "Simple OSM Map");
map.addLayer(layer);

//GeoJSON Layer-------------------------------------------
var vector_format = new OpenLayers.Format.GeoJSON({}); 
var vector_protocol = new OpenLayers.Protocol.HTTP({
    url: 'ml/roads.json',
    format: vector_format
});
var vector_strategies = [new OpenLayers.Strategy.Fixed()];
var vector_layer = new OpenLayers.Layer.Vector('More Advanced Vector Layer',{
    protocol: vector_protocol,
    strategies: vector_strategies 
});

map.addLayer(vector_layer);

//Projection-----------------------------------------------
map.setCenter(
    new OpenLayers.LonLat(18.068611, 59.329444).transform(
        new OpenLayers.Projection("EPSG:4326"),
            map.getProjectionObject()
    ), 10
);

前もって感謝します。

4

3 に答える 3

0

まず、を使用してマップに追加されたレイヤーの可視性を設定してみてくださいlayer.setVisibility(true)

ml/road.json次に、リクエストが完了し、探しているマップの部分のデータを取得した場合は、firebugを使用して調べる必要があります。

次に、レイヤーを更新することをお勧めします。これが、pasプロジェクトで使用したものです。 layer.refresh({force:true});

最後に、レイヤーをMapコンストラクターに直接配置してみてください。

//OSM Layer-----------------------------------------------
var layer = new OpenLayers.Layer.OSM( "Simple OSM Map");

//GeoJSON Layer-------------------------------------------
var vector_format = new OpenLayers.Format.GeoJSON({}); 
var vector_protocol = new OpenLayers.Protocol.HTTP({
    url: 'ml/roads.json',
    format: vector_format
});
var vector_strategies = [new OpenLayers.Strategy.Fixed()];
var vector_layer = new OpenLayers.Layer.Vector('More Advanced Vector Layer',{
    protocol: vector_protocol,
    strategies: vector_strategies,
    isBaseLayer: false
});

var options = {
    layers: [layer, vector_layer]
};
var map = new OpenLayers.Map("Map", options);
//Projection-----------------------------------------------
map.setCenter(
    new OpenLayers.LonLat(18.068611, 59.329444).transform(
        new OpenLayers.Projection("EPSG:4326"),
            map.getProjectionObject()
    ), 10
);
于 2012-04-26T08:42:51.787 に答える
0

あなたのGeoJSONは入っていEPSG:900913ますか?マップコンストラクターでマップの投影を明示的に設定するようにしてください。

于 2012-04-26T09:19:43.603 に答える
0

あなたの問題は予測の1つだと思います。Roads.shp ファイルに関するデータを取得するために OGRINFO を使用することもできますが、OGR2OGR に球状メルカトル図法を使用させるのがおそらく最も簡単です。これを行うには、-t スイッチを指定して OGR2OGR を実行します。これは次のようになります

$ ogr2ogr -f "GeoJSON" roads.json roads.shp roads -t_srs EPSG:900913

次に、マップが球状メルカトル図法を使用していることを確認します

var map = new OpenLayers.Map('map', 
            {projection: new OpenLayers.Projection("EPSG:3857"),
                sphericalMercator: true });

これはおそらく、同じ GCS を使用してすべてを OSM と統合する最も簡単な方法です。EPSG900913 と EPSG:3857 は同義語です。

于 2012-05-01T12:44:03.573 に答える