В основе работы с картой в HERE Maps API лежит географическая система координат WGS84, где каждая точка определяется парой значений: широта (latitude) и долгота (longitude).
Ключевой момент:
(lat, lng)Любые операции центрирования и позиционирования сводятся к преобразованию этих геокоординат в экранные координаты и обратно.
Центр карты определяет точку, которая отображается в середине viewport. В HERE Maps API это одна из фундаментальных настроек карты.
const platform = new H.service.Platform({
apikey: 'YOUR_API_KEY'
});
const defaultLayers = platform.createDefaultLayers();
const map = new H.Map(
document.getElementById('map'),
defaultLayers.vector.normal.map,
{
center: { lat: 48.8566, lng: 2.3522 },
zoom: 10,
pixelRatio: window.devicePixelRatio || 1
}
);
Здесь:
center задаёт начальную точкуzoom определяет масштаб отображенияПосле создания карты центр можно изменять в любой момент:
map.setCenter({ lat: 55.7558, lng: 37.6173 });
Метод setCenter:
Для плавного перемещения используется параметр
animation:
map.setCenter(
{ lat: 40.7128, lng: -74.0060 },
true
);
Или через расширенный API камеры:
map.getViewModel().setLookAtData({
position: { lat: 40.7128, lng: -74.0060 },
zoom: 12
}, true);
Здесь true включает анимацию перехода.
Центр всегда связан с масштабом:
map.setZoom(14);
Поведение:
Комбинация:
map.setViewBounds(bounds);
Часто вместо центра задаётся область отображения.
const bounds = new H.geo.Rect(
55.85, 37.35, // северо-запад
55.55, 37.85 // юго-восток
);
map.getViewModel().setLookAtData({
bounds: bounds
}, true);
Этот подход автоматически:
Метод fitBounds обеспечивает адаптивное
позиционирование:
map.getViewModel().setLookAtData({
bounds: markersGroup.getBoundingBox()
}, true);
Применяется для:
Для позиционирования по GPS:
navigator.geolocation.getCurrentPosition((position) => {
const coords = {
lat: position.coords.latitude,
lng: position.coords.longitude
};
map.setCenter(coords);
map.setZoom(14);
});
Особенности:
Внутри HERE Maps API существует два пространства:
const point = map.geoToScreen({ lat: 48.8566, lng: 2.3522 });
const geo = map.screenToGeo(100, 200);
Используется для:
Карта предоставляет события взаимодействия:
map.addEventListener('tap', function (evt) {
const coord = map.screenToGeo(
evt.currentPointer.viewportX,
evt.currentPointer.viewportY
);
map.setCenter(coord);
});
Применения:
Для контроля навигации используется ограничение границ:
map.getViewModel().setLookAtData({
bounds: new H.geo.Rect(60, 30, 40, 10)
});
Дополнительно можно ограничить панорамирование:
map.setRestriction(bounds);
Поведение:
При ресайзе контейнера карта требует пересчёта:
window.addEventListener('resize', () => {
map.getViewPort().resize();
});
Если этого не сделать:
Современный подход в HERE Maps API основан на абстракции камеры:
const viewModel = map.getViewModel();
viewModel.setLookAtData({
position: { lat: 48.8566, lng: 2.3522 },
zoom: 13,
tilt: 45,
heading: 90
});
Параметры:
position — центрzoom — масштабtilt — наклон камерыheading — поворотПлавные переходы улучшают восприятие навигации:
map.getViewModel().setLookAtData({
position: { lat: 52.52, lng: 13.405 },
zoom: 11
}, true);
Используется при:
Для динамических объектов:
function updatePosition(lat, lng) {
map.getViewModel().setLookAtData({
position: { lat, lng },
zoom: map.getZoom()
}, true);
}
Типичные сценарии:
Иногда центр смещают относительно геометрического центра экрана:
map.getViewModel().setLookAtData({
position: { lat: 48.8566, lng: 2.3522 },
zoom: 12,
padding: { top: 100, left: 0, bottom: 0, right: 0 }
});
Это используется для:
Разные слои карты не влияют напрямую на центр, но влияют на восприятие позиции:
lng/lat в неправильном порядкеviewport.resize() при изменении
контейнераЭти ошибки приводят к визуальным смещениям и нестабильному поведению интерфейса.