Работа с геоданными в JavaScript-API требует строгого понимания того, как представляются координаты, геометрии и пространственные объекты в различных форматах. В экосистеме HERE используются как внутренние структуры SDK, так и внешние стандарты обмена данными, включая GeoJSON, WKT, KML и собственные модели платформы.
В JavaScript SDK геометрия обычно представляется через объекты
пространства H.geo и классы H.map.
H.geo.Point)H.geo.LineString)H.geo.Polygon)Пример создания точки:
const point = new H.geo.Point(52.5200, 13.4050);
Линия:
const lineString = new H.geo.LineString();
lineString.pushPoint({ lat: 52.5200, lng: 13.4050 });
lineString.pushPoint({ lat: 52.5206, lng: 13.4090 });
Многоугольник:
const polygon = new H.geo.Polygon(
new H.geo.LineString([
{ lat: 52.52, lng: 13.40 },
{ lat: 52.52, lng: 13.41 },
{ lat: 52.51, lng: 13.41 },
{ lat: 52.51, lng: 13.40 }
])
);
GeoJSON является стандартом де-факто для интеграции геоданных в веб-приложениях. HERE Maps API поддерживает преобразование GeoJSON в свои внутренние объекты.
{
"type": "Point",
"coordinates": [13.4050, 52.5200]
}
Важно: порядок координат в GeoJSON —
[longitude, latitude], что часто вызывает ошибки при
миграции данных.
const geojsonPoint = {
type: "Point",
coordinates: [13.4050, 52.5200]
};
const herePoint = H.geo.Point.fromGeoPoint(geojsonPoint);
{
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"geometry": {
"type": "LineString",
"coordinates": [
[13.4, 52.52],
[13.41, 52.53]
]
},
"properties": {
"name": "Route A"
}
}
]
}
В SDK доступны методы преобразования внутренних структур в GeoJSON:
const line = new H.geo.LineString([
{ lat: 52.52, lng: 13.4 },
{ lat: 52.53, lng: 13.41 }
]);
const geojson = H.geo.LineString.prototype.toGeoJSON.call(line);
Для полигонов:
const geojsonPolygon = polygon.toGeoJSON();
WKT используется в GIS-системах и базах данных (PostGIS, Oracle Spatial). В экосистеме HERE Technologies он применяется при интеграции с внешними пространственными хранилищами.
Точка:
POINT (13.4050 52.5200)
Линия:
LINESTRING (13.4 52.52, 13.41 52.53)
Полигон:
POLYGON ((13.4 52.52, 13.41 52.52, 13.41 52.51, 13.4 52.51, 13.4 52.52))
const wkt = "POINT (13.4050 52.5200)";
const geometry = H.util.wkt.parse(wkt);
const wktString = H.util.wkt.stringify(geometry);
KML используется в Google Earth и GIS-инструментах. В HERE Maps API его поддержка реализуется через парсеры данных или промежуточное преобразование.
<Placemark>
<Point>
<coordinates>13.4050,52.5200,0</coordinates>
</Point>
</Placemark>
Типичный рабочий процесс:
function kmlPointToGeoJSON(kmlCoords) {
const [lng, lat] = kmlCoords.split(',').map(Number);
return {
type: "Point",
coordinates: [lng, lat]
};
}
Все данные в HERE Maps API используют систему координат WGS84:
Наиболее частая проблема — путаница форматов:
| Формат | Порядок |
|---|---|
| HERE API | lat, lng |
| GeoJSON | lng, lat |
| WKT | lng lat |
const routeGeoJSON = {
type: "LineString",
coordinates: [
[13.4, 52.52],
[13.41, 52.53],
[13.42, 52.54]
]
};
const line = new H.geo.LineString();
routeGeoJSON.coordinates.forEach(([lng, lat]) => {
line.pushPoint({ lat, lng });
});
const coords = [
[13.4, 52.52],
[13.41, 52.52],
[13.41, 52.51],
[13.4, 52.51]
];
const polygon = new H.geo.Polygon(
new H.geo.LineString(coords.map(([lng, lat]) => ({ lat, lng })))
);
В рамках HERE Maps API часто требуется сохранять геометрии для последующего восстановления.
const serialized = JSON.stringify(polygon.toGeoJSON());
localStorage.setItem("polygon", serialized);
const restored = JSON.parse(localStorage.getItem("polygon"));
const polygon = H.geo.Polygon.fromGeoJson(restored);
При интеграции с корпоративными GIS системами часто встречаются:
Типовой пайплайн:
Shapefile → GeoJSON → HERE Geometry → Map Object
Перед конвертацией выполняются операции:
Пример фильтрации:
function normalizeCoords(coords) {
return coords
.filter(c => Array.isArray(c) && c.length === 2)
.map(([lng, lat]) => ({
lng: Number(lng),
lat: Number(lat)
}))
.filter(p => isFinite(p.lat) && isFinite(p.lng));
}
В сложных системах вводится слой адаптации:
Такой подход снижает связанность кода и упрощает поддержку различных форматов.
При работе с routing API используется специализированная структура:
Пример waypoint:
const waypoints = [
{ lat: 52.52, lng: 13.4 },
{ lat: 52.53, lng: 13.41 }
];
Далее они преобразуются в маршрутный запрос без промежуточных GeoJSON-структур.
В некоторых API используется компактное представление маршрутов:
Это уменьшает размер передаваемых данных при больших маршрутах и потоковой визуализации.