0

マップ(世界地図、デフォルトのOpenLayersWMSを使用)とその上の1つのポイント(オンホバーなどのイベントを含む)を表示する必要があります。これが私のコードです:

                   var options = {
                            projection: new OpenLayers.Projection("EPSG:900913"),
                            maxResolution: 6000
                        };
                        map = new OpenLayers.Map('map', options);

                        var wmsLayer = new OpenLayers.Layer.WMS(
                        "OpenLayers WMS", 
                        "http://vmap0.tiles.osgeo.org/wms/vmap0",
                        {layers: 'basic'}
                    ); 

                    var vectors = new OpenLayers.Layer.Vector("Vector Layer");

                    point = new OpenLayers.Geometry.Point(20.088844299316406, 51.8321709083475);
                    vectors.addFeatures([new OpenLayers.Feature.Vector(point)]);

                    map.addLayers([wmsLayer, vectors]);

                    map.zoomToMaxExtent();

しかし、このコードは、ポイントが正しい場所ではなく、アフリカの近くのどこかに描画されていることを特定します(その場所のlatとlonは0、0です)。質問:なぜこれが発生し、修正できますか?ポイントを正しい場所に配置する必要があります。パラドックスこのポイントをコンソールで印刷すると、ポイントlanとlonが必要に応じて(定義どおりに)表示されます。しかし、それはまだ間違った場所にあります...

4

2 に答える 2

1

マップは900913にあり、4326投影を指しています。4326から900913に変換する必要があります。

point = new OpenLayers.Geometry.Point(20.088844299316406, 51.8321709083475);
point.transform(
    new OpenLayers.Projection("EPSG:4326"),
    new OpenLayers.Projection("EPSG:900913")
);

また、地図を機能ごとに中央に配置することを検討してください。ZoomToMaxExtent()は、マップを0、0に中央揃えします。maxResolutionを6000に設定しているため、マップのごく一部のみが表示され、フィーチャがマップの範囲外にある可能性があります。

map.zoomToMaxExtent();
map.setCenter([point.x, point.y]);
于 2012-10-28T21:28:56.973 に答える
0

タイプでnew OpenLayers.Feature.Vector()OpenLayers.Geometryなく使用しているOpenLayers.Geometry.Pointようです。しかし、私はそのようなアプリをやったことがありません。合理的に見える単なる提案。

于 2012-10-28T20:08:36.613 に答える