Маркеры карты OpenLayer не работают

привет, я использую карту 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);

это журнал консоли:

введите описание изображения здеськогда я не использую маркеры, масштаб карты точно совпадает с долготой и широтой, которые я прохожу, в то время как если я использую маркер, маркер помещается за пределы того места, где он должен быть.

у кого-нибудь есть предложения?


person itsme    schedule 23.10.2012    source источник


Ответы (1)


В настоящее время вы:

  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, есть ли какая-то особая причина для создания двух маркеров в одном месте:

markers.addMarker(new OpenLayers.Marker(lonLat, icon.clone()));
person user1702401    schedule 23.10.2012
comment
я просто скопировал пример с официального сайта openlayer - person itsme; 24.10.2012
comment
я отредактировал свой вопрос, теперь маркер работает, но он выводится из долготы и широты, и я перехожу к lotLan var - person itsme; 24.10.2012
comment
Это действительно странно: map.getProjectionObject() возвращает null. Вместо этого используйте новый OpenLayers.Projection(EPSG:900913), и он, кажется, работает. Я также изменил исходный ответ. - person user1702401; 24.10.2012
comment
да, теперь это работает, в любом случае должно быть здорово понять, что происходит, так странно: P - person itsme; 24.10.2012