2

open-street-map ウィジェットを apache wicket アプリケーションに組み込みたいと考えています。wicket-stuffwicket-contrib-openlayersコンポーネントと次のコードを使用しています。

    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);」の後 上記のコードから。これは機能しません。マップはまったく変更されません。経度と緯度がどの単位にある必要があるのか​​ わかりません。また、この方法を使用してそれらをメルカトルシステムに変換しようとしました:

 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-Map を Wicket に埋め込む方法と、中心とズームレベルを設定する方法の簡単な例を投稿できますか?

ありがとう!

4

2 に答える 2

0

Wicket には Openlayers の使用例があります。これを試しましたか: https://wicket-stuff.svn.sourceforge.net/svnroot/wicket-stuff/trunk/wicketstuff-core/openlayers-parent/openlayers-examples/src/main/java/org/wicketstuff/openlayers /MapUsingWFSGetFeaturePage.java

?

于 2009-08-25T14:39:48.007 に答える
0

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 関数を使用してマップの中心を設定できます。

于 2012-03-22T15:24:55.487 に答える