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

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

于 2012-04-26T09:19:43.603 回答
0

我认为您的问题是预测之一。您可以使用 OGRINFO 获取有关 road.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 应该是同义词。

于 2012-05-01T12:44:03.573 回答
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 回答