我想在我的apache应用程序中包含一个开放街道地图小部件。我使用来自wicket.密肋-开孔层的wicket-东西组件和下面的代码:
List<Layer> layers = new ArrayList<Layer>();
Layer layerOSMTilesAtHome = new OSM("Osmarender", OSMLayer.TilesAtHome);
Layer layerOSMMapnik = new OSM("Mapnik", OSMLayer.Mapnik);
Layer layerOSMCycleMap = new OSM("CycleMap", OSMLayer.CycleMap);
layers.add(layerOSMMapnik);
layers.add(layerOSMTilesAtHome);
layers.add(layerOSMCycleMap);
HashMap<String, String> mapOptions = new HashMap<String, String>();
Bounds boundsExtend = new Bounds(new LonLat(-20037508.34, -20037508.34), new LonLat(20037508.34, 20037508.34));
mapOptions.put("maxExtent", boundsExtend.getJSconstructor());
mapOptions.put("projection", "new OpenLayers.Projection('EPSG:900913')");
mapOptions.put("displayProjection", "new OpenLayers.Projection('EPSG:4326')");
mapOptions.put("units", "'meters'");
mapOptions.put("maxResolution", "156543");
mapOptions.put("numZoomLevels", "18");
OpenLayersMap map = new OpenLayersMap("map", layers, mapOptions);
map.addControl(Control.LayerSwitcher);
map.addControl(Control.MousePosition);
map.addControl(Control.KeyboardDefaults);
add(map);这是来自组件的SimpleOpenStreetMapExample的1:1副本。现在的问题是:如何设置地图的中心。我试过
map.setCenter(new LonLat(5, 50), 13);在上面代码中的“add(Map)”之后。这是行不通的,地图一点也不改变。我不确定Lon和Lat必须在什么单元中,我还试图用这种方法将它们转换为Mercator系统:
private static double lon2Merc(double lon) {
return 20037508.34*lon/180.0;
}
private static double lat2Merc(double lat) {
lat = Math.log(Math.tan((90.0 + lat)*Math.PI/360.0))/(Math.PI/180.0);
return 20037508.34*lat/180.0;
}但这没有帮助,什么都改变不了。
So:谁能发布一个简短的例子,如何将OSM-Map嵌入到Wicket中,以及如何设置中心和缩放级别?
谢谢!
发布于 2009-08-25 14:39:48
发布于 2012-03-22 15:24:55
我不确定Wicket是否有任何特殊要求,但您可以通过在创建图层时指定特定分辨率来设置OpenLayers中的缩放级别。下面是一个例子:
osm = new OpenLayers.Layer.OSM("OpenStreetMap",
"", {isBaseLayer: true, displayInLayerSwitcher: true,
zoomOffset: 13, resolutions:
[19.1092570678711, 9.55462853393555, 4.77731426696777,
2.38865713348389, 1.19432856674194, 0.5971642833709717]}),其他地图提供程序在其API中可能有不同的参数:
gsat = new OpenLayers.Layer.Google(
"Google Satellite",
{type: google.maps.MapTypeId.SATELLITE, maxZoomLevel: 18,
minZoomLevel:13}您可以使用setCenter函数设置地图的中心
https://stackoverflow.com/questions/1213493
复制相似问题