| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158 |
- // index.ts
- import {
- featureCollection,
- isNumber,
- isObject,
- lineString,
- point,
- polygon,
- validateBBox
- } from "@turf/helpers";
- function randomPosition(bbox) {
- checkBBox(bbox);
- return randomPositionUnchecked(bbox);
- }
- function randomPositionUnchecked(bbox) {
- if (Array.isArray(bbox)) {
- return coordInBBox(bbox);
- }
- if (bbox && bbox.bbox) {
- return coordInBBox(bbox.bbox);
- }
- return [lon(), lat()];
- }
- function checkBBox(bbox) {
- if (bbox == null) {
- return;
- } else if (Array.isArray(bbox)) {
- validateBBox(bbox);
- } else if (bbox.bbox != null) {
- validateBBox(bbox.bbox);
- }
- }
- function randomPoint(count, options = {}) {
- checkBBox(options.bbox);
- if (count === void 0 || count === null) {
- count = 1;
- }
- const features = [];
- for (let i = 0; i < count; i++) {
- features.push(point(randomPositionUnchecked(options.bbox)));
- }
- return featureCollection(features);
- }
- function randomPolygon(count, options = {}) {
- checkBBox(options.bbox);
- if (count === void 0 || count === null) {
- count = 1;
- }
- if (options.bbox === void 0 || options.bbox === null) {
- options.bbox = [-180, -90, 180, 90];
- }
- if (!isNumber(options.num_vertices) || options.num_vertices === void 0) {
- options.num_vertices = 10;
- }
- if (!isNumber(options.max_radial_length) || options.max_radial_length === void 0) {
- options.max_radial_length = 10;
- }
- const bboxWidth = Math.abs(options.bbox[0] - options.bbox[2]);
- const bboxHeight = Math.abs(options.bbox[1] - options.bbox[3]);
- const maxRadius = Math.min(bboxWidth / 2, bboxHeight / 2);
- if (options.max_radial_length > maxRadius) {
- throw new Error("max_radial_length is greater than the radius of the bbox");
- }
- const paddedBbox = [
- options.bbox[0] + options.max_radial_length,
- options.bbox[1] + options.max_radial_length,
- options.bbox[2] - options.max_radial_length,
- options.bbox[3] - options.max_radial_length
- ];
- const features = [];
- for (let i = 0; i < count; i++) {
- let vertices = [];
- const circleOffsets = [...Array(options.num_vertices + 1)].map(Math.random);
- circleOffsets.forEach((cur, index, arr) => {
- arr[index] = index > 0 ? cur + arr[index - 1] : cur;
- });
- circleOffsets.forEach((cur) => {
- cur = cur * 2 * Math.PI / circleOffsets[circleOffsets.length - 1];
- const radialScaler = Math.random();
- vertices.push([
- radialScaler * (options.max_radial_length || 10) * Math.sin(cur),
- radialScaler * (options.max_radial_length || 10) * Math.cos(cur)
- ]);
- });
- vertices[vertices.length - 1] = vertices[0];
- vertices = vertices.reverse().map(vertexToCoordinate(randomPositionUnchecked(paddedBbox)));
- features.push(polygon([vertices]));
- }
- return featureCollection(features);
- }
- function randomLineString(count, options = {}) {
- options = options || {};
- if (!isObject(options)) {
- throw new Error("options is invalid");
- }
- const bbox = options.bbox;
- checkBBox(bbox);
- let num_vertices = options.num_vertices;
- let max_length = options.max_length;
- let max_rotation = options.max_rotation;
- if (count === void 0 || count === null) {
- count = 1;
- }
- if (!isNumber(num_vertices) || num_vertices === void 0 || num_vertices < 2) {
- num_vertices = 10;
- }
- if (!isNumber(max_length) || max_length === void 0) {
- max_length = 1e-4;
- }
- if (!isNumber(max_rotation) || max_rotation === void 0) {
- max_rotation = Math.PI / 8;
- }
- const features = [];
- for (let i = 0; i < count; i++) {
- const startingPoint = randomPositionUnchecked(bbox);
- const vertices = [startingPoint];
- for (let j = 0; j < num_vertices - 1; j++) {
- const priorAngle = j === 0 ? Math.random() * 2 * Math.PI : Math.tan(
- (vertices[j][1] - vertices[j - 1][1]) / (vertices[j][0] - vertices[j - 1][0])
- );
- const angle = priorAngle + (Math.random() - 0.5) * max_rotation * 2;
- const distance = Math.random() * max_length;
- vertices.push([
- vertices[j][0] + distance * Math.cos(angle),
- vertices[j][1] + distance * Math.sin(angle)
- ]);
- }
- features.push(lineString(vertices));
- }
- return featureCollection(features);
- }
- function vertexToCoordinate(hub) {
- return (cur) => {
- return [cur[0] + hub[0], cur[1] + hub[1]];
- };
- }
- function rnd() {
- return Math.random() - 0.5;
- }
- function lon() {
- return rnd() * 360;
- }
- function lat() {
- return rnd() * 180;
- }
- function coordInBBox(bbox) {
- return [
- Math.random() * (bbox[2] - bbox[0]) + bbox[0],
- Math.random() * (bbox[3] - bbox[1]) + bbox[1]
- ];
- }
- export {
- randomLineString,
- randomPoint,
- randomPolygon,
- randomPosition
- };
- //# sourceMappingURL=index.js.map
|