Geometry Library расширяет базовый функционал картографического API набором математических операций над географическими координатами. Основная задача библиотеки — выполнение вычислений на поверхности сферы, учитывающих кривизну Земли, а не плоскую евклидову геометрию.
В состав входят инструменты для вычисления расстояний, площадей, направлений, интерполяции точек, анализа полилиний и работы с геометрическими кодировками.
Библиотека логически разделена на несколько модулей:
google.maps.geometry.sphericalgoogle.maps.geometry.encodinggoogle.maps.geometry.polyКаждый модуль решает отдельный класс задач, связанных с геопространственной аналитикой.
Geometry Library не загружается автоматически и подключается через
параметр libraries при инициализации API.
const map = new google.maps.Map(document.getElementById("map"), {
center: { lat: 40.7128, lng: -74.0060 },
zoom: 10
});
Загрузка API с подключением геометрического модуля:
<script
src="https://maps.googleapis.com/maps/api/js?key=API_KEY&libraries=geometry"
></script>
После загрузки становятся доступны объекты:
google.maps.geometry.spherical
google.maps.geometry.encoding
google.maps.geometry.poly
Основной модуль Geometry Library — spherical. Он
выполняет вычисления на сфере, используя модель Земли как сфероида с
радиусом ~6378137 метров.
Ключевая функция:
google.maps.geometry.spherical.computeDistanceBetween(latLngA, latLngB);
Функция возвращает расстояние в метрах между двумя точками.
Пример:
const a = new google.maps.LatLng(55.751244, 37.618423);
const b = new google.maps.LatLng(59.931058, 30.360909);
const distance = google.maps.geometry.spherical.computeDistanceBetween(a, b);
Математически используется формула гаверсинусов, адаптированная под сферическую модель.
google.maps.geometry.spherical.computeLength(path);
path — массив координат LatLng.
const path = [
new google.maps.LatLng(55.75, 37.61),
new google.maps.LatLng(56.00, 38.00),
new google.maps.LatLng(57.00, 39.00)
];
const length = google.maps.geometry.spherical.computeLength(path);
Результат выражается в метрах.
google.maps.geometry.spherical.computeArea(polygonPath);
Функция вычисляет площадь на поверхности сферы.
const polygon = [
new google.maps.LatLng(55.75, 37.61),
new google.maps.LatLng(55.80, 37.70),
new google.maps.LatLng(55.70, 37.80)
];
const area = google.maps.geometry.spherical.computeArea(polygon);
Возвращаемое значение — квадратные метры.
google.maps.geometry.spherical.computeHeading(pointA, pointB);
Возвращает азимут в градусах от северного направления.
const heading = google.maps.geometry.spherical.computeHeading(a, b);
Значение лежит в диапазоне от -180 до 180 градусов.
google.maps.geometry.spherical.interpolate(pointA, pointB, fraction);
fraction — доля пути от 0 до 1.
const mid = google.maps.geometry.spherical.interpolate(a, b, 0.5);
Функция используется для построения плавных траекторий и анимации перемещения объектов.
google.maps.geometry.spherical.computeOffset(origin, distance, heading);
Позволяет вычислить координату по заданному расстоянию и направлению.
const destination = google.maps.geometry.spherical.computeOffset(
a,
1000,
90
);
Результат — точка на расстоянии 1 км на восток.
Модуль encoding работает с компактным представлением
геометрических линий.
google.maps.geometry.encoding.encodePath(path);
const encoded = google.maps.geometry.encoding.encodePath(path);
Результат — строка, содержащая сжатое представление координат.
google.maps.geometry.encoding.decodePath(encodedString);
const decoded = google.maps.geometry.encoding.decodePath(encoded);
Используется для передачи маршрутов между клиентом и сервером.
Модуль poly предоставляет инструменты анализа
принадлежности точек и проверки пересечений.
google.maps.geometry.poly.containsLocation(point, polygon);
const inside = google.maps.geometry.poly.containsLocation(
new google.maps.LatLng(55.75, 37.61),
polygon
);
Результат — логическое значение.
google.maps.geometry.poly.isLocationOnEdge(point, polyline, tolerance);
const onE dge = google.maps.geometry.poly.isLocationOnEdge(
point,
path,
10e-6
);
tolerance задаёт допустимое отклонение.
Все вычисления Geometry Library основаны на сферической модели Земли. Это приводит к отличиям от плоской геометрии:
Используется радиус Земли:
R ≈ 6378137 м
Сферическая модель обеспечивает баланс между точностью и вычислительной эффективностью.
Geometry Library работает с объектами LatLng, где:
lat — широта (-90 до 90)lng — долгота (-180 до 180)Внутренние вычисления переводят координаты в радианы:
rad = deg × π / 180
Далее применяются тригонометрические функции сферической геометрии.
Сферическая геометрия включает тригонометрические операции, что делает её более затратной по сравнению с евклидовой.
Факторы, влияющие на производительность:
Для оптимизации применяются:
При обработке маршрутов с большим количеством точек используется комбинированный подход:
encoding.decodePathcomputeLengthПример анализа маршрута:
const path = google.maps.geometry.encoding.decodePath(encoded);
const totalDistance = google.maps.geometry.spherical.computeLength(path);
const segments = [];
for (let i = 0; i < path.length - 1; i++) {
segments.push(
google.maps.geometry.spherical.computeDistanceBetween(path[i], path[i + 1])
);
}
Точность вычислений зависит от:
На малых расстояниях погрешность минимальна, но при глобальных маршрутах может достигать заметных значений.
Geometry Library часто используется совместно:
spherical для базовых вычисленийencoding для передачи данныхpoly для анализа областейТипичный сценарий обработки геоданных включает:
Geometry Library применяется для задач:
Все операции выполняются на клиентской стороне, что снижает нагрузку на серверную инфраструктуру и ускоряет интерактивную обработку данных.