#leaflet #styles #geojson #markers
#листовка #стили #geojson #маркеры
Вопрос:
Я пытался заставить листовку отображать файл geojson, используя стили, описанные в файле geojson, и я не могу заставить его работать. Приведенный ниже geojson показывает, что у меня там есть стили — ручка в стиле OGR и т. Д., Но я попытался извлечь их с помощью функции стиля (styles) {return {color : data.properties.pen}}, Но это выдает мне ошибку на консоли — но ошибок недостаточно, чтобы соответствовать числуслоев — таким образом, я могу понять, что некоторые слои могут не иметь свойства «pen», но ни один из слоев не имеет каких-либо различий.
«features»: [ { «type»: «Feature», «properties»: { «Layer»: «Здания», «Подклассы»: «AcDbEntity:AcDb2dPolyline», «EntityHandle»: «2ABF», «OGR_STYLE»: «ПЕРО (c: #ff7f00, p:»1.2g 0.72g 0.12g 0.72g»)» }, «геометрия»: { «тип»: «LineString», «координаты»: [ [ -1.386274792183286, 54.907452998026585, 0.0 ], [ -1.386201193400163,
На самом деле, как показывает приведенный выше geojson, на самом деле это геометрия, но все, что появляется, — это маркер, что является моей второй проблемой. Кто-нибудь может указать мне на некоторые примеры кодов или что-нибудь, что может мне помочь?
$.getJSON(address, function(data) {
//add GeoJSON layer to the map once the file is loaded
layer[i] = L.geoJson(data, {style: function(styles) {
return {color: data.properties.pen,
weight: data.properites.weight
};
onEachFeature: onEachFeature
}
}).addTo(map);
Спасибо.
Ответ №1:
Измените свой код на:
function onEachFeature(feature, layer) {
if (feature.properties amp;amp; layer instanceof L.Path) {
layer.setStyle({
color: feature.properties.pen,
weight: feature.properites.weight
});
}
}
$.getJSON(address, function(data) {
//add GeoJSON layer to the map once the file is loaded
layer[i] = L.geoJson(data, {
onEachFeature: onEachFeature
}).addTo(map);
});
Комментарии:
1. Спасибо. Я вставил ваш код, но я получаю сообщение об ошибке — Uncaught TypeError: layer.setStyle не является функцией. Итак, я предположил, что слой должен быть layer [i] — элементом массива для слоя, но затем я получаю неожиданный токен [. Так что, я думаю, я не могу передать массив в функцию?
2. Тогда у вас также есть точки в вашем geojson, потому что маркер не имеет функции
.setStyle()
. Я добавил к ifamp;amp; layer instanceof L.Path
, тогда он должен работать3. Блин, похоже, это работает. Теперь я вижу свою геометрию, но не в правильных стилях — только базовый блюз, но вы дали мне хорошее начало для игры. Спасибо.
4. Это потому, что у вас нет
pen
свойства, толькоOGR_STYLE
со значениемPEN(c:#ff7f00,p:"1.2g 0.72g 0.12g 0.72g")
. Пожалуйста, примите ответ, если вы считаете, что это решило вашу проблему