0

グーグルマップのように小数のロンとラットを使いたい。しかし、OpenLayersでLonLatオブジェクトを変換する必要があるようです。

    var map, layer;
    function init(){
        map = new OpenLayers.Map('map');
        layer = new OpenLayers.Layer.OSM( "Simple OSM Map");
        map.addLayer(layer);
        map.setCenter(
            new OpenLayers.LonLat(-1.60400390625, 54.07228265560386).transform(
                new OpenLayers.Projection("EPSG:4326"),
                map.getProjectionObject()
            ), 6
        ); 

        var markers = new OpenLayers.Layer.Markers( "Markers" );
        map.addLayer(markers);

        var size = new OpenLayers.Size(21,25);
        var offset = new OpenLayers.Pixel(0,0);
        var icon = new OpenLayers.Icon('http://www.openlayers.org/dev/img/marker.png', size, offset);
        markers.addMarker(new OpenLayers.Marker(new OpenLayers.LonLat(-1.60400390625, 54.07228265560386).transform(new OpenLayers.Projection("EPSG:4326"),map.getProjectionObject()),icon));           
    }

マーカーを配置するたびに、位置をEPSG:4326に変換する必要があります。この投影法を常に使用するようにマップに指示する方法はありますか?

4

1 に答える 1

1

マップ上に投影を設定できるかどうかは、ベースレイヤーに使用しているサービスによって異なります。私の知る限り、OSMはレンダリングされたタイルをEPSG:900913でのみ提供するため、マップに追加する前に座標を変換する方法はありません。複数のプロジェクションでタイルを提供するサービスを検索することはできますが、これまで無料で使用できるサービスは見たことがありません。別の方法は、必要な投影で独自のタイルをレンダリングし、独自のタイルサーバーを介してそれらを提供することです。

そのようなマップがあるとしましょう。OpenLayers.Map.setOptions()を使用して次のように投影を変更できます。

map.setOptions({
    projection: "EPSG:4326"
});

ただし、プロジェクション関連のプロパティなどを設定する必要がある場合もあります。この質問maxExtentを参照してください。

于 2012-09-09T18:49:45.017 に答える