В контексте работы с Mapbox GL JS под «результатами» понимаются различные структуры данных, которые возвращаются библиотекой при взаимодействии с картой, слоями, источниками данных и внешними сервисами. Эти результаты формируются на разных уровнях: от геокодинга до выборки векторных фич и обработки событий рендеринга.
Архитектура Mapbox GL JS строится вокруг концепции слоёв (layers), источников данных (sources) и событий (events), поэтому типы результатов напрямую отражают эти сущности.
Одним из наиболее распространённых типов результатов являются ответы
геокодера (Mapbox Geocoding API), которые используются через
mapbox-gl-geocoder или прямые HTTP-запросы.
Каждый результат представляет собой объект GeoJSON Feature:
{
"id": "place.123456",
"type": "Feature",
"place_type": ["place"],
"text": "Karaganda",
"place_name": "Karaganda, Kazakhstan",
"center": [72.9800, 49.8060],
"geometry": {
"type": "Point",
"coordinates": [72.9800, 49.8060]
},
"properties": {}
}
Результаты геокодинга:
Метод queryRenderedFeatures возвращает набор объектов,
которые уже отрисованы на карте в текущем viewport.
const features = map.queryRenderedFeatures(point, {
layers: ['cities-layer']
});
Результат:
[
{
"type": "Feature",
"id": 42,
"layer": {
"id": "cities-layer",
"type": "circle"
},
"source": "cities",
"properties": {
"name": "Karaganda",
"population": 500000
},
"geometry": {
"type": "Point",
"coordinates": [72.98, 49.8]
}
}
]
Метод querySourceFeatures работает на уровне источника
данных, а не рендеринга.
const features = map.querySourceFeatures('cities-source', {
sourceLayer: 'cities'
});
[
{
"type": "Feature",
"properties": {
"name": "Karaganda"
},
"geometry": {
"type": "Point",
"coordinates": [72.98, 49.8]
}
}
]
| Характеристика | queryRenderedFeatures | querySourceFeatures |
|---|---|---|
| Уровень | Рендер | Источник данных |
| Видимость | Только видимые | Все доступные |
| Учет стилей | Да | Нет |
| Производительность | Ниже при сложных сценах | Выше |
Mapbox GL JS генерирует множество событий, каждое из которых содержит объект результата.
map.on('click', (e) => {
console.log(e);
});
{
"type": "click",
"point": { "x": 120, "y": 300 },
"lngLat": { "lng": 72.98, "lat": 49.8 },
"features": [
{
"type": "Feature",
"properties": {
"name": "Karaganda"
}
}
]
}
Эти результаты используются для:
Источники данных генерируют события загрузки и обновления.
sourcedatamap.on('sourcedata', (e) => {
console.log(e.sourceId, e.isSourceLoaded);
});
{
"type": "sourcedata",
"sourceId": "cities-source",
"isSourceLoaded": true,
"dataType": "source"
}
Рендер-события позволяют отслеживать процесс отрисовки карты.
rendermap.on('render', () => {
console.log('frame rendered');
});
idlemap.on('idle', () => {
console.log('map is fully rendered');
});
Результаты рендеринга не являются геоданными. Это служебные сигналы:
Mapbox GL JS использует expression system для вычисления динамических значений.
paint: {
'circle-radius': [
'interpolate',
['linear'],
['get', 'population'],
1000, 5,
1000000, 20
]
}
Каждый слой получает вычисленное значение:
{
"circle-radius": 12
}
GeoJSON источники возвращают данные в стандартизированном формате.
map.addSource('points', {
type: 'geojson',
data: {
type: 'FeatureCollection',
features: []
}
});
После загрузки:
{
"type": "FeatureCollection",
"features": [...]
}
setDataПри использовании кластеров GeoJSON источники возвращают специальные агрегированные объекты.
{
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [72.98, 49.8]
},
"properties": {
"cluster": true,
"cluster_id": 123,
"point_count": 42
}
}
Слои интерфейса (heatmap, symbol, circle) возвращают разные интерпретации данных.
{
"intensity": 0.85,
"coordinates": [72.98, 49.8]
}
{
"icon-image": "marker",
"text-field": "Karaganda"
}
{
"circle-radius": 10,
"circle-color": "#ff0000"
}
| Категория | Источник | Формат |
|---|---|---|
| Геокодинг | API | GeoJSON Feature |
| Render query | map.queryRenderedFeatures | Feature[] |
| Source query | map.querySourceFeatures | Feature[] |
| События | map events | EventObject |
| Рендеринг | render/idle | State signal |
| Expressions | style system | вычисленные значения |
| Clusters | GeoJSON source | Feature (clustered) |
Все типы результатов в Mapbox GL JS связаны единой моделью:
Эта модель позволяет использовать одни и те же данные на разных уровнях: от анализа до рендеринга и пользовательского взаимодействия.