如何使用OpenLayers在OSM上叠加GeoJSON?

时间:2012-04-26 08:25:03

标签: map openlayers geo openstreetmap

我正在尝试制作一张地图。我使用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
);

提前谢谢。

3 个答案:

答案 0 :(得分: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
);

答案 1 :(得分:0)

你的GeoJSON在EPSG:900913?您应该尝试在地图构造函数中明确地设置地图的投影。

答案 2 :(得分:0)

我认为你的问题是一个预测。您可以使用OGRINFO来获取有关roads.shp文件的数据,但是对于您正在做的最简单的事情是使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,EPSG900913和EPSG将所有内容与OSM集成的最简单方法:3857应该是同义词。