Wicket: Интеграция Openlayers и Открытый слой Streetmaps - PullRequest
2 голосов
/ 31 июля 2009

Я хочу включить виджет карты улиц в мое приложение Apache Wicket. Я использую компонент 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);

Это копия 1: 1 SimpleOpenStreetMapExample из компонента. Теперь проблема в том, как мне установить центр карты. Я попробовал

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

после «добавить (карта);» из кода выше. Это не работает, карта не меняется вообще. Я не уверен, в каких единицах должны быть Lon и Lat, я также пытался преобразовать их Mercator-System, используя следующие методы:

 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 ]

0 голосов
/ 22 марта 2012

Я не уверен, есть ли у 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.

0 голосов
...