-
Notifications
You must be signed in to change notification settings - Fork 161
Expand file tree
/
Copy pathdraw-ellipse-by-bounding-box-mode.ts
More file actions
25 lines (21 loc) · 1.16 KB
/
draw-ellipse-by-bounding-box-mode.ts
File metadata and controls
25 lines (21 loc) · 1.16 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import bboxPolygon from '@turf/bbox-polygon';
import distance from '@turf/distance';
import ellipse from '@turf/ellipse';
import { point } from '@turf/helpers';
import { Position, Polygon, FeatureOf } from '../geojson-types';
import { getIntermediatePosition } from './geojson-edit-mode';
import { TwoClickPolygonMode } from './two-click-polygon-mode';
export class DrawEllipseByBoundingBoxMode extends TwoClickPolygonMode {
getTwoClickPolygon(coord1: Position, coord2: Position, modeConfig: any): FeatureOf<Polygon> {
const minX = Math.min(coord1[0], coord2[0]);
const minY = Math.min(coord1[1], coord2[1]);
const maxX = Math.max(coord1[0], coord2[0]);
const maxY = Math.max(coord1[1], coord2[1]);
const polygonPoints = bboxPolygon([minX, minY, maxX, maxY]).geometry.coordinates[0];
const centerCoordinates = getIntermediatePosition(coord1, coord2);
const xSemiAxis = Math.max(distance(point(polygonPoints[0]), point(polygonPoints[1])), 0.001);
const ySemiAxis = Math.max(distance(point(polygonPoints[0]), point(polygonPoints[3])), 0.001);
// @ts-expect-error fix return types
return ellipse(centerCoordinates, xSemiAxis, ySemiAxis);
}
}