#mapbox #mapbox-gl-js
#mapbox #mapbox-gl-js
Вопрос:
Я загружаю изображение со следующим кодом:
map.on('load', function () {
map.loadImage('....png', function(error, image) {
if (error) throw error;
map.addImage('b7', image);
map.addLayer({
"id": "b7",
"type": "symbol",
"source": {
"type": "geojson",
"data": {
"type": "FeatureCollection",
"features": [{
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [0, 0]
}
}]
}
},
"layout": {
"icon-image": "b7",
"icon-size": 0.2
}
});
});
Как я могу установить видимость равной нулю при определенном уровне масштабирования?
Похоже, вы не можете использовать map.setLayoutProperty для LoadImage. В консоли написано: Ошибка: слой ‘b7’ не существует в стиле карты и не может быть оформлен.
Почему бы мне не попробовать что-то вроде:
map.setLayoutProperty( 'b7', 'visibility', 'none' );
Есть идеи?
Ответ №1:
Два предложения о том, как решить эту проблему:
Во-первых, убедитесь, что название вашего изображения и название слоя отличаются. Возможно, функция ищет слой b7, но сначала находит изображение с именем b7 (или наоборот). В любом случае это следует изменить, поскольку это создает конфликтующие переменные.
Во-вторых, если это не сработает, попробуйте добавить свой источник отдельно, а не внутри слоя.
map.addSource("mySource", {
"type": "geojson",
"data": {
"type": "FeatureCollection",
"features": [{
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [-74.981906, 41.742503]
},
"properties": {
"title": "title ",
"icon": "myImage",
}
}]
}
});
А затем добавьте слой с исходным кодом.
map.addLayer({
"id": "b7",
"type": "symbol",
"source": "mySource",
"layout": {
"icon-image": "myImage",
"icon-size": 0.2
}
});
Теперь вы можете вызвать свойство setLayoutProperty в прослушивателе zoomstart. Добавьте условное значение, если оно требуется только при определенном уровне масштабирования, используя map.getZoom();
Здесь нужно настраивать видимость для слоя, а не для изображения.
map.on('zoomstart', 'b7', function(e) {
if (map.getZoom() > 12) {
map.setLayoutProperty('b7', 'visibility', 'none');
}
})
Фрагмент ниже, дайте мне знать, если у вас возникнут какие-либо проблемы.
map.on('load', function() {
map.loadImage('myImage.png', function(error, image) {
if (error) throw error;
map.addImage('myImage', image);
map.addSource("mySource", {
"type": "geojson",
"data": {
"type": "FeatureCollection",
"features": [{
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [-73.981906, 40.742503]
},
"properties": {
"title": "title ",
"icon": "myImage",
}
}]
}
});
map.addLayer({
"id": "b7",
"type": "symbol",
"source": "mySource",
"layout": {
"icon-image": "myImage",
"icon-size": 0.2
}
});
});
});
map.on('zoomstart', 'b7', function(e) {
if (map.getZoom() > 12) {
map.setLayoutProperty('b7', 'visibility', 'none');
}
})
Комментарии:
1. map.LoadImage доступна ли эта функция mapbox для Maps SDK для Android?