Отображение стилей, сохраненных в файле GeoJSON, и отображение строк в виде строк вместо маркеров

#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);
});

  

Учебное пособие по листовке GeoJSON

Комментарии:

1. Спасибо. Я вставил ваш код, но я получаю сообщение об ошибке — Uncaught TypeError: layer.setStyle не является функцией. Итак, я предположил, что слой должен быть layer [i] — элементом массива для слоя, но затем я получаю неожиданный токен [. Так что, я думаю, я не могу передать массив в функцию?

2. Тогда у вас также есть точки в вашем geojson, потому что маркер не имеет функции .setStyle() . Я добавил к if amp;amp; layer instanceof L.Path , тогда он должен работать

3. Блин, похоже, это работает. Теперь я вижу свою геометрию, но не в правильных стилях — только базовый блюз, но вы дали мне хорошее начало для игры. Спасибо.

4. Это потому, что у вас нет pen свойства, только OGR_STYLE со значением PEN(c:#ff7f00,p:"1.2g 0.72g 0.12g 0.72g") . Пожалуйста, примите ответ, если вы считаете, что это решило вашу проблему