Map 如何使用OpenLayers在OSM上覆盖GeoJSON?

Map 如何使用OpenLayers在OSM上覆盖GeoJSON?,map,openlayers,geo,openstreetmap,Map,Openlayers,Geo,Openstreetmap,我正在尝试创建一个地图。我使用OSM作为基础层,现在我尝试将我的道路网络覆盖为GeoJSON。Firebug检查的代码中没有错误。我可以查看漂亮的OSM地图,但问题是我的OSM地图上并没有任何道路网络。我不知道我做了什么。贝娄,我已经给了我的密码 我使用以下命令从控制台创建GeoJSON。我正在使用OSGeo Live Ubuntu $ ogr2ogr -f "GeoJSON" roads.json roads.shp roads JavaScript代码-- //OSM Layer-----

我正在尝试创建一个地图。我使用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
);

提前谢谢。

首先,您可以尝试使用layer.setVisibilitytrue设置添加到地图中的图层的可见性

其次,如果对ml/road.json的请求已经完成,并且您获得了正在查看的地图部分的数据,那么您应该使用firebug进行查看

然后您可能需要刷新图层,以下是我在pas项目中使用的内容: 刷新{force:true}

最后,您可以尝试将图层直接放入贴图构造函数中:

//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
);

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

我认为你的问题是投影。您可以使用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将所有内容与OSM集成的最简单方法,EPSG900913和EPSG:3857应该是同义词。

我尝试过。但问题是,如果我使用EPSG:900913,那么我的地图将中心定在南大西洋的某个地方。但是,我给出了斯德哥尔摩的坐标。实际上,我从一个Openlayers示例中得到了这个投影EPSG:4326。如果您有任何其他具体帮助。请给我。但是,无论如何,谢谢你的尝试。你的GeoJSON在哪个投影中?投影转换使用map中的投影集,请参见我检查了firebug控制台。它显示获得200 OK 116ms。我的json文件加载似乎很好。其次,我尝试了你的解决方案。但它创建了两张地图。顶部是空白白色地图,底部是OSM地图。没有重叠标志。@Shahjalal抱歉复制/粘贴太多,我更正了代码。你可能想试试。真奇怪,你的代码对我不起作用。还有别的办法吗?我的GeoJSON数据中有什么错误吗?但是,正如我上面所说,我并没有手工创造任何东西。我应该使用边界框吗?我从中得到了一个例子。我正试图做几乎相同的事情。但问题是,我不知道如何设置边界框的值。是否可以从GeoJSON数据生成这些值?如果是这样的话,那怎么办?我试过上面的例子,如果没有Boxdata/roads.json的边界,它就无法工作;