Генерация случайных географических точек в Turf.js выполняется через
модуль @turf/random, который предоставляет инструменты для
создания псевдослучайных пространственных объектов: точек, позиций,
линий и полигонов. Основная задача этих методов — формирование
синтетических наборов геоданных, тестирование алгоритмов
пространственного анализа, моделирование распределений и построение
демонстрационных карт.
Пакет @turf/random построен вокруг генераторов, которые
используют равномерное распределение в пределах заданных географических
ограничений. В отличие от простого случайного выбора координат,
генерация учитывает географические границы, проекции и геометрические
маски.
Ключевая особенность заключается в том, что выходные данные всегда соответствуют GeoJSON-структурам, что позволяет напрямую использовать их в пространственных операциях Turf.js без дополнительной трансформации.
Основная функция для создания набора точек —
randomPoint.
import { randomPoint } from "@turf/random";
Базовый вызов:
const points = randomPoint(100);
Параметр 100 определяет количество создаваемых точек. По
умолчанию координаты генерируются в пределах всего мира, что
соответствует глобальному bounding box:
[-180, -90, 180, 90].
Часто требуется ограничить генерацию конкретной географической
областью. Для этого используется параметр bbox.
const points = randomPoint(50, {
bbox: [70, 40, 90, 55]
});
Формат bbox:
[minX, minY, maxX, maxY]
где:
minX — минимальная долготаminY — минимальная широтаmaxX — максимальная долготаmaxY — максимальная широтаГенерация внутри bbox выполняется равномерно, без учета административных или природных границ.
Более точный способ ограничения пространства — параметр
mask. В качестве маски используется GeoJSON-полигон, внутри
которого должны находиться все сгенерированные точки.
import { randomPoint } from "@turf/random";
import polygon from "@turf/helpers";
const mask = {
type: "Feature",
geometry: {
type: "Polygon",
coordinates: [
[
[30, 10],
[40, 40],
[20, 40],
[30, 10]
]
]
}
};
const points = randomPoint(200, { mask });
Алгоритм работы с mask включает:
При сложных полигонах с высокой долей пустого пространства эффективность может снижаться из-за увеличения числа повторных попыток.
Функция randomPosition возвращает не GeoJSON-объект, а
массив координат [lng, lat].
import { randomPosition } from "@turf/random";
const position = randomPosition([-10, -10, 10, 10]);
Особенности:
randomPoint за счёт отсутствия структуры
GeoJSONТипичный сценарий — генерация координат для последующего ручного формирования геометрий.
Модуль @turf/random также поддерживает создание более
сложных геометрий.
import { randomLineString } from "@turf/random";
const lines = randomLineString(10, {
bbox: [-80, -40, 80, 40],
num_vertices: 5
});
Параметры:
num_vertices — количество узлов линииbbox — ограничение области генерацииЛинии строятся как последовательность случайных точек, соединённых в порядке генерации.
import { randomPolygon } from "@turf/random";
const polygons = randomPolygon(5, {
bbox: [-100, -50, 100, 50],
num_vertices: 6
});
Особенности генерации:
Генерация в Turf.js основана на равномерном распределении в декартовой системе координат. Однако географические координаты вводят искажения:
Для задач высокой точности часто применяется дополнительная нормализация или проекционные преобразования через сторонние библиотеки.
При создании больших наборов точек (десятки и сотни тысяч) важны следующие аспекты:
randomPoint работает быстрее при использовании bbox
вместо maskОптимизация часто включает:
Случайная генерация используется для проверки корректности геоалгоритмов:
booleanPointInPolygonПример связки генерации и проверки:
import { randomPoint } from "@turf/random";
import booleanPointInPolygon from "@turf/boolean-point-in-polygon";
const poly = {
type: "Feature",
geometry: {
type: "Polygon",
coordinates: [[[0,0],[10,0],[10,10],[0,10],[0,0]]]
}
};
const points = randomPoint(1000);
const inside = points.features.filter(p =>
booleanPointInPolygon(p, poly)
);
При генерации внутри масок возникают численные особенности:
Эти эффекты особенно заметны при генерации в полигональных структурах с большим количеством вершин.
Все функции random в Turf.js работают в WGS84 координатной системе:
При генерации без bbox фактически используется глобальная модель мира, что делает результаты пригодными для симуляций, но не для локальных аналитических задач без дополнительной фильтрации.
Генерация случайных данных часто используется совместно с:
@turf/centroid — вычисление центров кластеров@turf/distance — анализ расстояний между точками@turf/cluster — группировка случайных
распределений@turf/buffer — построение зон вокруг точекКомбинация генерации и анализа позволяет строить полные модели пространственного поведения, включая симуляции плотности населения, распределения объектов или маршрутов движения.