0

これを GisStackExchange に投稿しましたが、うまくいきませんでした。

OpenLayers と Google マップの Base Layer との相互作用に関連していると思われる問題があります (座標系との不一致など)。これは、WMS を介して GeoServer に送信するリクエストに関連している可能性もあります。しかし、私は混乱しています。

私のセットアップ:私が言ったように、私はグーグルから来たベースレイヤーを持つolMapを持っています。マップの初期化は次のとおりです。

function initMap() {

    // World Geodetic System 1984 projection (lon/lat)
    var WGS84 = new OpenLayers.Projection("EPSG:4326");

    // WGS84 Google Mercator projection (meters)
    var WGS84_google_mercator = new OpenLayers.Projection("EPSG:900913");

    var options = {
       projection: WGS84_google_mercator,
       displayProjection: WGS84,
    };


    window.map = new OpenLayers.Map('map_canvas', options);

    var google_default =  new OpenLayers.Layer.Google("Google Default", {wrapDateLine: false, numZoomLevels: 30, sphericalMercator: true})
    var google_satellite = new OpenLayers.Layer.Google("Google Satellite", {type: google.maps.MapTypeId.SATELLITE, wrapDateLine: false})

    map.addLayers([google_default]);


    window.map.zoomTo(2);
    window.map.setCenter(0);

        // build up all controls
    window.map.addControl(new OpenLayers.Control.Zoom());
    window.map.addControl(new OpenLayers.Control.MousePosition())
    window.map.addControl(new OpenLayers.Control.Navigation());
    window.map.addControl(new OpenLayers.Control.LayerSwitcher());

}

ズームが小さい場合、サーバーは機能情報を含む応答を送信しますが、ズームインするとサーバーは応答しなくなります。

サーバー側で交差点を作るために、その通過するバッファパラメータ領域を修正しようとしました。しかし、その値が大きすぎてもズームすると良い結果が得られません:

vendorParams: {
   buffer: 100, // one hundred is an excessive value
}, 

また、ズームすると異なるevent.xyを出力していますが、それは理にかなっていますね。

Alert は、WMSGetFeatureInfo コントロール リスナーの beforegetfeatureinfo メソッドで起動されます。

beforegetfeatureinfo function(event) {
                  // Code here to set the content of queryableMapLayers
                  // The event object will contain xy of mouse click
                  alert(event.xy);
                }

ズームなしでは、ほぼ同じマップ位置で (1136, 273) の値と (600, 304) の大きなズームを取得します。私が言ったように、私はこの問題について混乱しています。私はそれをグーグルで検索するのに多くの時間を費やしていますが、ガイドラインは見つかりませんでした。

何かご意見は?

4

1 に答える 1

0

EPSG:3857 (Web メルカトル) であるマップ オブジェクトの正しい座標参照を使用することをお勧めします。また、マップに 30 のズーム レベルがあるとは思いません。以下は、Google サテライト ベース マップのマップ オブジェクトの例です。

//define map object with base layers
map = new OpenLayers.Map('OpenLayers_canvas', {
    projection: 'EPSG:3857',
    layers:
        [
        new OpenLayers.Layer.Google('Google Satellite', { type: google.maps.MapTypeId.SATELLITE, numZoomLevels: 22 })
        ],
    center: new OpenLayers.LonLat(-99.1638182, 19.3880964).transform('EPSG:4326', 'EPSG:3857'),
    zoom: 10
});
于 2014-05-09T18:01:40.453 に答える