Обработчик объектов векторного слоя OpenLayers - PullRequest
4 голосов
/ 22 декабря 2011

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

Я не уверен, есть ли способ добавить прослушиватель / обработчик для каждой функции.

Любые идеи

Ответы [ 3 ]

8 голосов
/ 22 декабря 2011

Добавить элемент управления SelectFeture:

var selectFeature = new OpenLayers.Control.SelectFeature(vector_layer);
map.addControl(selectFeature);
selectFeature.activate();

После этого вы можете прослушивать, чтобы выбрать / отменить выбор событий на векторном слое:

vector_layer.events.on({
  'featureselected': function(feature) {
       //display your message here
  },
  'featureunselected': function(feature) {
       //hide message
  }
});
5 голосов
/ 28 декабря 2011

Вам необходимо использовать комбинацию элемента управления SelectFeature и одного из классов OpenLayers.Popup, например OpenLayers.Popup.FramedCloud.Вот пример этого:

http://openlayers.org/dev/examples/select-feature-openpopup.html

В этом примере попробуйте использовать опцию «рисовать многоугольник» для рисования многоугольника (дважды щелкните карту, чтобы завершить многоугольник).Затем используйте «выбрать полигон по щелчку» и щелкните по многоугольнику, и вы получите всплывающее облако в рамке.

Вы можете просмотреть исходный код страницы, чтобы увидеть, как это делается.Вот соответствующие части кода.Конечно, вы можете изменить message на то, что вы хотите отобразить в рамочном облаке:

    var map = <your OpenLayers.Map object>;
    var polygonLayer = <your vector layer>;

    selectControl = new OpenLayers.Control.SelectFeature(polygonLayer,
            {onSelect: onFeatureSelect, onUnselect: onFeatureUnselect});
    map.addControl(selectControl); // not in the example, but do this

    function onPopupClose(evt) {
        selectControl.unselect(selectedFeature);
    }

    function onFeatureSelect(feature) {
        var message = "<div style='font-size:.8em'>Feature: " + feature.id +"<br>Area: " + feature.geometry.getArea()+"</div>";

        selectedFeature = feature;
        popup = new OpenLayers.Popup.FramedCloud("chicken", 
            feature.geometry.getBounds().getCenterLonLat(),
            null,
            message,
            null, true, onPopupClose);
        feature.popup = popup;
        map.addPopup(popup);
    }

    function onFeatureUnselect(feature) {
        map.removePopup(feature.popup);
        feature.popup.destroy();
        feature.popup = null;
    }

Вот ссылки на элементы управления, которые вы будете использовать:

0 голосов
/ 22 декабря 2011

Если имеется много векторных слоев, необходимо ли писать «layer_name.events.on ...» для каждого слоя?Можно ли составить список слоев и назначить всем им ".events.on"?

...