2

MetaCarta (EPSG:4326) と Google マップ (Mercator) の 2 つの基本レイヤーを持つ OpenLayers マップがあります。sphericMercator = false、単位は度です。マップ上には、いくつかのマーカー、ボックス、およびベクター データもあります。

ベース レイヤー (投影法が異なる) を切り替えると、単純なジオメトリ (マーカーやボックスなど) が自動的に再投影され、正しく表示されます。ただし、ベクター レイヤー (ポリライン) はシフトされるだけで、再投影されません。ベースレイヤーのプロジェクションが変更されたときにOpenLayersがこれを自動的に行うように、ある種の「再構築」関数を呼び出すか、パラメーターを追加する必要があると思います。しかし、これを行う方法がわかりません。

Spherical Mercator ( http://docs.openlayers.org/library/spherical_mercator.html )について読み、OpenLayers の例を調べましたが、解決策が見つかりませんでした。

私のコードの一部は以下のとおりです (vector.json のすべての座標は度単位です):

var metaCarta = new OpenLayers.Layer.WMS("MetaCarta",
    "http://labs.metacarta.com/wms/vmap0?",
    {layers: "basic"}
);

var gmap = new OpenLayers.Layer.Google(
    "Google Streets",
    {numZoomLevels: 40}
);

map.addLayers([metaCarta, gmap]);
map.setCenter(new OpenLayers.LonLat(139.8, 35.7), 11);


// Load vector data
var jsonFormat = new OpenLayers.Format.GeoJSON();

var vectorLayer = new OpenLayers.Layer.Vector("vector", {
    style: {strokeColor: "gray",strokeWidth: 2}
});

OpenLayers.loadURL("vector.json", {}, null, function(response) {
    var features = jsonFormat.read(response.responseText);
    vectorLayer.addFeatures(features);
});

map.addLayer(vectorLayer);
4

1 に答える 1

1

OpenLayers でプロジェクションと適切な変換を定義する必要があります。次に、Proj4JS ライブラリ (これらの射影変換を実行するために OpenLayers によって使用される) を含める必要があります。

于 2010-11-19T17:51:10.400 に答える