Я пытаюсь отобразить разные маркеры на карте Mapbox, но мой код, похоже, не соответствует ожиданиям.Я извлекаю данные из пользовательского типа записи WordPress (используемые переменные уже определены):
function makeObjectsArray() {
for(var i = 0; i < data.length; i++) {
placeTitle = data[i].title.rendered;
placeLong = data[i].acf.longitude;
placeLat = data[i].acf.latitude;
placeCategory = data[i].categories;
place = {
type: "Feature",
geometry: {
type: "Point",
coordinates: [placeLong, placeLat]
},
properties: {
title: placeTitle,
category: placeCategory
}
};
placesArray.push(place);
categoriesArray.push(placeCategory.toString());//this will create a list of category IDs
};
};
makeObjectsArray();
и помещаю их в переменную:
var geojson = {
type: 'FeatureCollection',
features: placesArray //an array containing the coordinates and other properties from the custom post type
};
Затем я создаю маркеры (div's):
geojson.features.forEach(function(marker) {
// create a HTML element for each feature
var el = document.createElement("div");
// I'm adding a class that sets "background-image" of the marker
el.className = "marker";
new mapboxgl.Marker(el)
.setLngLat(marker.geometry.coordinates)
.addTo(map);
});
Приведенный выше код работает нормально, но я хотел иметь разные маркеры для разных категорий мест.Для этого я пытался добавить разные классы для разных идентификаторов категорий (скажем, у меня есть только две категории с идентификаторами 2 и 3):
geojson.features.forEach(function(marker) {
// create a HTML element for each feature
var el = document.createElement("div");
el.className = "marker";
for(var k = 0; k < categoriesArray.length; k++) {
var classCat = "";
if (categoriesArray[k] == 2) {
classCat = "marker cat2";
el.className = "";
el.className = classCat;
} else if (categoriesArray[k] == 3) {
classCat = "marker cat3";
el.className = "";
el.className = classCat;
}
}
// make a marker for each feature and add to the map
new mapboxgl.Marker(el)
.setLngLat(marker.geometry.coordinates)
.addTo(map);
});
Классы .cat2
и .cat3
содержат разные маркеры (фоновые URL).Код выше дает все маркеры класса .cat2
.Я подозреваю, что в моей логике JavaScript есть какая-то ошибка, но я пробовал много вариантов вышеупомянутых, и я не могу решить это.Любая помощь будет оценена.