Tilequery API представляет собой инструмент для выполнения запросов к векторным тайлам в реальном времени с целью получения объектов (features), находящихся в заданной географической области. В отличие от классических пространственных запросов к серверной базе данных, Tilequery работает поверх предварительно отрендеренных векторных тайлов, что обеспечивает высокую скорость ответа и масштабируемость.
Основная идея заключается в том, что геоданные уже разложены по тайловой сетке, и запрос выполняется не по всей базе, а по ограниченному набору тайлов, пересекающих заданный радиус или геометрию.
Tilequery API использует следующий принцип обработки запросов:
Ключевое отличие от классических GIS-запросов — отсутствие необходимости выполнять пространственные операции над полной базой данных.
Типичный HTTP-запрос к Tilequery API выглядит следующим образом:
https://api.mapbox.com/v4/{tileset_id}/tilequery/{lon},{lat}.json
Обязательные параметры:
tileset_id — идентификатор векторного набора
данныхlon,lat — координаты центра запросаДополнительные параметры:
radius — радиус поиска в метрахlimit — максимальное количество возвращаемых
объектовlayers — фильтрация по слоям tileset’аdedupe — устранение дубликатов объектовgeometry — тип возвращаемой геометрии (point,
linestring, polygon)Пример:
https://api.mapbox.com/v4/mapbox.mapbox-streets-v8/tilequery/37.6173,55.7558.json?radius=100&limit=10&access_token=YOUR_TOKEN
radius
Радиус определяет область поиска вокруг точки. Значение задаётся в метрах и напрямую влияет на количество тайлов, которые будут обработаны.
Особенности:
limit
Ограничивает количество возвращаемых объектов. Полезен при работе с плотными городскими слоями.
layers
Позволяет сузить область поиска до конкретных слоёв tileset’а:
layers=building,road,poi
Это особенно важно для оптимизации запросов.
dedupe
Убирает дублирующиеся объекты, которые могут появляться при пересечении нескольких тайлов.
geometry
Управляет тем, как возвращается геометрия объекта:
point — только координатыlinestring — для линейных объектовpolygon — для площадных объектовTilequery API часто используется совместно с интерактивными картами для реализации событийных сценариев: клик по карте, поиск ближайших объектов, динамическая фильтрация.
Пример использования при клике по карте:
map.on('click', async (e) => {
const url = `https://api.mapbox.com/v4/mapbox.mapbox-streets-v8/tilequery/${e.lngLat.lng},${e.lngLat.lat}.json` +
`?radius=50&limit=5&access_token=YOUR_TOKEN`;
const response = await fetch(url);
const data = await response.json();
console.log(data);
});
Результаты Tilequery можно преобразовать в GeoJSON и отобразить через слой источника:
map.on('click', async (e) => {
const query = await fetch(
`https://api.mapbox.com/v4/mapbox.mapbox-streets-v8/tilequery/` +
`${e.lngLat.lng},${e.lngLat.lat}.json?radius=100&access_token=YOUR_TOKEN`
);
const data = await query.json();
const geojson = {
type: 'FeatureCollection',
features: data.features
};
if (map.getSource('query-results')) {
map.getSource('query-results').setData(geojson);
} else {
map.addSource('query-results', {
type: 'geojson',
data: geojson
});
map.addLayer({
id: 'query-points',
type: 'circle',
source: 'query-results',
paint: {
'circle-radius': 6,
'circle-color': '#ff5200'
}
});
}
});
Каждый объект, возвращаемый Tilequery API, содержит:
geometrypropertiesidlayerПример фильтрации:
const buildings = data.features.filter(f =>
f.properties.class === 'building'
);
Это позволяет реализовывать сложные сценарии анализа городской среды.
Tilequery API применяется в следующих сценариях:
Несмотря на высокую скорость работы, Tilequery имеет ряд ограничений:
Оптимизация достигается через:
layerslimitТиповые ошибки:
Пример обработки:
try {
const res = await fetch(url);
if (!res.ok) throw new Error(`HTTP ${res.status}`);
const data = await res.json();
} catch (err) {
console.error('Tilequery error:', err);
}
Tilequery API часто используется вместе с кастомными слоями Mapbox GL JS:
Пример синхронизации с картой:
map.on('moveend', async () => {
const center = map.getCenter();
const url = `https://api.mapbox.com/v4/mapbox.mapbox-streets-v8/tilequery/` +
`${center.lng},${center.lat}.json?radius=200&limit=20&access_token=YOUR_TOKEN`;
const res = await fetch(url);
const data = await res.json();
map.getSource('query-results').setData({
type: 'FeatureCollection',
features: data.features
});
});
В городских районах Tilequery может возвращать большое количество объектов. Для корректной работы применяются стратегии:
Tilequery возвращает геометрию в формате GeoJSON, но точность зависит от исходного tileset’а. Важно учитывать: