OpenLayers добавляет маркер и всплывающее окно

У меня проблемы с OpenLayers. Мой рабочий код:

<html><body>
  <div id="mapdiv"></div>
  <script src="http://www.openlayers.org/api/OpenLayers.js"></script>
  <script>
    map = new OpenLayers.Map("mapdiv");
    map.addLayer(new OpenLayers.Layer.OSM());

    //var results = new OpenLayers.Layer.Text("My Points", { location:"./checkIns_0_view.txt", projection: map.displayProjection});
    //map.addLayer(results);

    var query = new OpenLayers.LonLat(-122.2928337167, 37.5549570333).transform(new OpenLayers.Projection("EPSG:4326"), map.getProjectionObject());
    var markers = new OpenLayers.Layer.Markers("Markers");
    map.addLayer(markers);
    var size = new OpenLayers.Size(21,25);
    var offset = new OpenLayers.Pixel(-(size.w/2), -size.h);
    var icon = new OpenLayers.Icon('http://openlayers.org/dev/img/marker-blue.png', size, offset);
    marker = new OpenLayers.Marker(query, icon);
    markers.addMarker(marker);

    var zoom=16;
    map.setCenter (query, zoom);
  </script>
</body></html>

Теперь я хочу добавить всплывающее окно с некоторой информацией. Я попытался использовать несколько примеров, таких как http://openlayers.org/dev/examples/osm-marker-popup.html. Я хочу добавить что-то вроде этого:

    var popup = new OpenLayers.Popup.FramedCloud("Popup", query, null, "Text", true);
    map.addPopup(popup);

Первая строка может быть скомпилирована, но когда я добавляю вторую строку, браузер не показывает мою карту. Я думаю, что это может быть связано с запросом-lonLat, но у меня нет необходимых навыков OpenLayers, чтобы выяснить это.

Буду очень признателен за ответ.

Привет


person Community    schedule 23.06.2013    source источник


Ответы (1)


  1. Согласно документация OpenLayers, в конструкторе всплывающего окна отсутствует параметр привязки между "Text" и true . Вероятно, это источник вашей проблемы. Этот параметр имеет значение null в примере для всплывающего окна:

    var popup = new OpenLayers.Popup.FramedCloud("Popup", 
        myLocation.getBounds().getCenterLonLat(), null,
        'We ' +
        'could be here. Or elsewhere.', 
        null,
        true // true if we want a close (X) button, false otherwise
    );
    

    В Вашем случае вы можете использовать переменную icon вместо нулевого значения.

  2. В функции map.addPopup(popup) у вас также должен быть второй параметр exclusive. См. документацию OpenLayers dev.openlayers.org/docs/files/OpenLayers/Map-js.html#OpenLayers.Map.addPopup или определение этого метода здесь. Я считаю хорошей практикой использовать все определенные параметры, потому что это часто создает проблемы.

Надеюсь, это сработает после добавления всех параметров. Ваш код для рабочего всплывающего окна:

var popup = new OpenLayers.Popup.FramedCloud("Popup", query, null, "Text", null, true);
map.addPopup(popup, false);
person martin jrk    schedule 23.06.2013
comment
большое спасибо marti jrk за ваш ответ. понял, что вы упомянули, но это все еще не работает, используя дополнительный параметр в 1. и добавляя false в 2. - person ; 25.06.2013
comment
важно, в какой позиции кода я добавляю эти две строки? - person ; 25.06.2013
comment
@ user2513315 да, это актуально. Вы должны добавить всплывающее окно ( map.addPopup(popup, true); ) после того, как вы map.setCenter(); Поэтому, если вы поместите их оба на конец, это должно сработать. - person martin jrk; 25.06.2013
comment
еще раз большое спасибо. это была моя проблема. всегда пытался вставить линии в разные позиции, но я никогда не осмеливался вставлять их в конец, потому что (почему) я думал, что может быть уместно центрировать карту в конце. Благодарность!!! - person ; 25.06.2013