2015-01-29 2 views
0

Вот карта, я работаю над:Изменить значок на основе JSON атрибутов

http://members.upcpoczta.pl/w.racek/mapa.html

Я хотел бы изменить значок, который показывает в правом верхнем углу Infobox (при выборе маршрута) соответственно к свойствам файла JSON (цветовой тег). Существует 5 базовых цветов, используемых для маркировки велосипедных маршрутов (синий, красный, зеленый, желтый, черный и без цвета), почти все из них имеют цвет (возможно, 10% имеют символ или разную маркировку). У меня есть 5 значков png, которые должны быть связаны с этим. На данный момент мне удалось установить простую ссылку html, и она отображает только красный значок, но, возможно, есть способ изменить его в соответствии с json-свойствами?

Вот часть кода, который отвечает за показ этой инфобокса: var info = L.control();

info.onAdd = function (map) { 
     this._div = L.DomUtil.create('div', 'info'); 
     this.update(); 
     return this._div; 
    }; 

    info.update = function (props) { 
     this._div.innerHTML = (props ? 
      '<b>' + '<img src="img/red.png " height="42" width="42" > ' + props.name 
      : 'Kliknij na szlak'); 
    }; 

    info.addTo(map); 

Прямо сейчас значок всегда красный.

Я благодарен за советы. Благодаря!

+0

Как выглядит ваш json-файл? – Mike

+0

Вот его часть: var rower = {"type": "FeatureCollection", "features": [{"type": "Feature", "properties": {"osm_id": "50272", "name" : «Euroroute R1 - часть Польши», «цвет»: «зеленый», «сеть»: «icn», «ref»: «R1», «descriptio»: null, «length»: null, «operator»: null , "состояние": NULL, "веб-сайт": NULL, "official_r": NULL, "old_ref": NULL, "расстояние": нулевая}, "геометрии": { "типа": "MultiLineString", "координаты": [ [[18.7691769,53.6058359], ..... и т. Д. ... – Voyteck

ответ

0

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

this._div.innerHTML = (props ? 
     '<b>' + '<img src="img/red.png " height="42" width="42" > ' + props.name 
     : 'Kliknij na szlak'); 

Моя догадка вас пытаются использовать ternary operator. Это не работает. Например, когда один, как правило, делают это:

var value = 'foobar'; 
var result; 

if (value === 'foobar') { 
    result = true; 
} else { 
    result = false; 
} 

С тройным вы можете написать это обсчитывать так:

var value = 'foobar'; 
var result = (value === 'foobar') ? true : false; 

Или в этом примере при возврате булево true или false, можно даже сделать это (но то далеко за пределы точки здесь):

var value = 'foobar'; 
var result = (value === 'foobar'); 

Ваш синтаксис далеко или я, не понимая, что вы пытаетесь сделать. Далее для строки concatination вы делаете:

'<b>' + '<img src="img/red.png " height="42" width="42" > ' 

Может быть просто записать в виде:

'<b><img src="img/red.png " height="42" width="42" > ' 

Теперь для фактического решения с использованием троичной оператора и CONCAT:

this._div.innerHTML = (props) ? 
     '<b><img src="img/' + props.color + '.png " height="42" width="42" >' + props.name + '</b>' : 
     'Kliknij na szlak'; 

Doing его a нормальный оператор:

if (props) { 
    this._div.innerHTML = '<b><img src="img/' + props.color + '.png " height="42" width="42" >' + props.name + '</b>'; 
} else { 
    this._div.innerHTML = 'Kliknij na szlak'; 
} 

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

+0

Это решило. Я удалил var color = 'red'; // цвет по умолчанию if (props.colour) color = props.colour; добавлено просто Voyteck

+0

Я обновил свою страницу, выглядя хорошо! Немного медленный на firefox хотя (странно, потому что json-файл всего 1 мб). В любом случае, полностью работаю. Я добавил также расстояние. – Voyteck

0

Я посмотрел ваш источник, proops получил название и цвет, так что вы можете попробовать это:

info.update = function (props) { 
var color='red'; //default color 
if(props.colour) 
    color=props.colour; 

    this._div.innerHTML = (props ? 
     '<b>' + '<img src="img/'+color+'red.png " height="42" width="42" > ' + props.name 
     : 'Kliknij na szlak'); 
}; 
+1

Это может привести к загрузке чего-то типа 'bluered.png';) – iH8

+0

Привет, спасибо за вашу попытку, но это не сработает. Инфобокс просто исчез. – Voyteck

+0

iH8 прав, попробуйте Mike

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