2015-04-27 4 views
1

Я использую openlayers 3. Из значений, содержащихся в векторном GeoJSON, я хочу заполнить выпадающее меню. При выборе значения из выпадающего меню я хочу увеличить масштаб объекта.Выпадающее меню с OpenLayers 3

Моя проблема в том, что я хочу сгенерировать свой HTML из атрибутов моего GeoJSON. Так что я попробовал этот простой код, но он не работает:

var menu = document.getElementById('menuDropDown'); 
vector2.getSource().forEachFeature(function() { 
    menu.innerHTML = feature.get('NOM').join(', '); 
    }); 

EDIT: Я могу заполнить выпадающее меню из списка:

var list = ['a','b','c']; 
var mySelect = $('#mySelect'); 
    $.each(list, function(val, text) { 
     mySelect.append(
      $('<option></option>').val(val).html(text) 
     ); 
    }); 

Что я хочу сделать это в заполнить этот список из атрибута моего вектора Так я попробовать это:

// vector2 it's a GeoJSON who is integrate on my map 
vector2.getSource().getFeatures().forEachFeature(function(feature) { 
    list.push(feature.get('NOM')); 
}); 
+0

Не могли бы вы объяснить, как это не работает? Какое поведение вы ожидаете и что на самом деле происходит? – Unknown123

+0

На данный момент я бы ожидал, что все имена, содержащиеся в таблице моего GeoJSON, и из Id 'menuDropDown', я буду ссылаться на мой html, и он будет отображаться в моем интерфейсе карты popup – FatAl

ответ

0

меня решить мою проблему:

vector2.getSource().on('change', function(evt){ 
     var source = evt.target; 
     var list = []; 
     source.forEachFeature(function(feature) { 
      list.push(feature.get('NOM')); 
      }); 
     // console.log("Ecrit moi les noms : " + list); 

Спасибо вы тем, кто нашел время ответить

1

Во-первых, я предполагаю, что вы должны пройти некоторый параметр для обратного вызова:

vector2.getSource().forEachFeature(function(feature) { 

Затем вы можете добавить элемент в раскрывающемся списке следующим образом:

var item = document.createElement('option'); 
item.setAttribute('value', feature.get('NOM')); 

var textNode = document.createTextNode(feature.get('NOM')); 
item.appendChild(textNode) 

menu.appendChild(item); 

Все вместе:

var menu = document.getElementById('menuDropDown'); 
vector2.getSource().forEachFeature(function(feature) { 
    var item = document.createElement('option'); 
    item.setAttribute('value', feature.get('NOM')); 

    var textNode = document.createTextNode(feature.get('NOM')); 
    item.appendChild(textNode) 

    menu.appendChild(item); 
}); 
+0

Интересно, как ответ, я не знал этот метод для создания элемента option. Но я все еще не отвечаю в своем всплывающем окне. vector2 = GeoJSON - это вектор, который отображается в моем веб-интерфейсе с атрибутом NAME в таблице. Кстати, я умею diplay мой атрибут, когда я использую select с forEachFeatureAtPixel и метод select – FatAl

+0

Jimmie, я редактировал свой пост, если у вас есть способ заполнить список из источника вектора в openlayers 3. Это оцените. Еще раз спасибо за ответ. – FatAl

+0

Извините, я не совсем понимаю. Но если вы опубликуете пример с JSFiddle, я постараюсь помочь. – Unknown123

Смежные вопросы