我正在尝试制作一张地图。我使用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
);
提前谢谢。
答案 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应该是同义词。