1

こんにちは、私は Openlayer マップを使用しています。これは私のスクリプトです。マップは問題ありませんが、マーカーは機能しません。

 var map = new OpenLayers.Map ('open_map', { 
      controls:[ 
      new OpenLayers.Control.Navigation()
      ],
      projection: new OpenLayers.Projection("EPSG:900913"),
      displayProjection: new OpenLayers.Projection("EPSG:4326")
    });
     var lonLat = new OpenLayers.LonLat(_json.lon, _json.lat).transform (
    new OpenLayers.Projection("EPSG:4326"), // transform from WGS 1984
    map.getProjectionObject() // to Spherical Mercator Projection
);

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

     var size = new OpenLayers.Size(16,27);
     var offset = new OpenLayers.Pixel(-(size.w/2), -size.h);
     var icon = new OpenLayers.Icon('http://www.google.com/mapfiles/marker.png', size, offset);
     markers.addMarker(new OpenLayers.Marker(lonLat, icon.clone()));

     var mapnik = new OpenLayers.Layer.OSM("Test");
     map.addLayer(mapnik);

     map.setCenter (lonLat, 5 /* zoom lvl */);

   console.log(lonLat);
console.log(_json.lon);
console.log(_json.lat);

これはコンソールログです:

ここに画像の説明を入力 マーカーを使用しない場合、マップのズームは通過する経度と緯度で正確に表示されますが、マーカーを使用する場合、マーカーは必要な場所の外に置かれます。

誰か提案がありますか?

4

1 に答える 1

3

現在、あなたは:

  1. 元の座標からマーカーを作成する
  2. 座標を 4326 から 900913 に変換し、それらを使用してマップを中央に配置します。

_json オブジェクトの座標はどのシステムにありますか? EPSG:4325 (-180 から 180 または 0 から 360) の場合、変換された座標からマーカーを作成します。

var lonLat = new OpenLayers.LonLat(_json.lon, _json.lat).transform (
    new OpenLayers.Projection("EPSG:4326"), // transform from WGS 1984
    new OpenLayers.Projection("EPSG:900913") // to Spherical Mercator Projection
    // map.getProjectionObject() doesn't work for unknown reason
);

markers.addMarker(new OpenLayers.Marker(lonLat, icon));
markers.addMarker(new OpenLayers.Marker(lonLat, icon.clone()));

map.setCenter (lonLat, 5 /* zoom lvl */);

PS、同じ場所に 2 つのマーカーを作成する特定の理由はありますか。

markers.addMarker(new OpenLayers.Marker(lonLat, icon.clone()));
于 2012-10-23T18:28:22.527 に答える