代码之家  ›  专栏  ›  技术社区  ›  theomega

Wicket:Openlayers集成和开放街道地图层

  •  2
  • theomega  · 技术社区  · 15 年前

    我想在apachewicket应用程序中包含一个开放的街道地图小部件。我正在使用 wicket-contrib-openlayers 组件来自 wicket-stuff 以及以下代码:

        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应该在哪个单位,我还试图用以下方法将它们转换为墨卡托系统:

     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;
      }
    

    那么:有谁能发一个简短的例子,如何将OSM地图嵌入Wicket,以及如何设置中心和缩放级别?

    谢谢!

    2 回复  |  直到 15 年前
        2
  •  0
  •   Daniel Lee    13 年前

    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 function.