2009-07-31 6 views
2

Ich möchte ein Open-Street-Map-Widget in meine Apache Wicket-Anwendung aufnehmen. Im mit der wicket-contrib-openlayers Komponente aus wicket-stuff und der folgenden Code ein:Wicket: Openlayers Integration & Open Streetmaps Layer

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

Dies ist eine 1: 1 Kopie des SimpleOpenStreetMapExample von der Komponente. Das Problem ist jetzt: Wie stelle ich das Zentrum der Karte ein? Ich versuchte ein

map.setCenter(new LonLat(5, 50), 13); 

nach dem "add (map);" aus dem obigen Code. Dies funktioniert nicht, die Karte ändert sich überhaupt nicht. Ich bin nicht sicher, welche Einheit Lon und Lat haben in sein, ich habe auch versucht, sie Mercator-System mit diesem Verfahren zu konvertieren:

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

Aber dieses nicht hilft, ändert sich nichts.

Also: Kann irgendjemand ein kurzes Beispiel schreiben, wie man eine OSM-Map in Wicket einbaut und wie man den Center- und Zoom-Level einstellt?

Vielen Dank!

Antwort

0

Ich bin mir nicht sicher, ob Wicket spezielle Anforderungen erfüllt, aber Sie können die Zoomstufen in OpenLayers entweder durch Angabe bestimmter Auflösungen beim Erstellen der Ebene festlegen. Hier ein Beispiel:

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]}), 

Andere Karten providors verschiedene Parameter in ihre APIs haben:

gsat = new OpenLayers.Layer.Google(
      "Google Satellite", 
      {type: google.maps.MapTypeId.SATELLITE, maxZoomLevel: 18, 
       minZoomLevel:13} 

Sie das Zentrum von Karten mit der setCenter function.

einstellen