-
Notifications
You must be signed in to change notification settings - Fork 3
/
area.ts
62 lines (54 loc) · 1.85 KB
/
area.ts
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
import * as arrow from "apache-arrow";
import { PolygonData } from "../data";
import { PolygonVector } from "../vector";
import { makeMathGlPolygon } from "./utils/polygon";
/**
* Compute the unsigned area of the polygon input.
*/
export function area(input: PolygonData): arrow.Data<arrow.Float>;
export function area(input: PolygonVector): arrow.Vector<arrow.Float>;
export function area(
input: PolygonData | PolygonVector,
): arrow.Data<arrow.Float> | arrow.Vector<arrow.Float> {
if ("data" in input) {
return new arrow.Vector(input.data.map((polygonData) => area(polygonData)));
}
const result = new Float64Array(input.length);
for (let geomIndex = 0; geomIndex < input.length; geomIndex++) {
let polygon = makeMathGlPolygon(input, geomIndex);
result[geomIndex] = polygon.getArea();
}
return arrow.makeData({
type: new arrow.Float(arrow.Precision.DOUBLE),
length: input.length,
nullCount: input.nullCount,
nullBitmap: input.nullBitmap,
data: result,
});
}
/**
* Compute the signed area of the polygon input.
*/
export function signedArea(input: PolygonData): arrow.Data<arrow.Float>;
export function signedArea(input: PolygonVector): arrow.Vector<arrow.Float>;
export function signedArea(
input: PolygonData | PolygonVector,
): arrow.Data<arrow.Float> | arrow.Vector<arrow.Float> {
if ("data" in input) {
return new arrow.Vector(
input.data.map((polygonData) => signedArea(polygonData)),
);
}
const result = new Float64Array(input.length);
for (let geomIndex = 0; geomIndex < input.length; geomIndex++) {
let polygon = makeMathGlPolygon(input, geomIndex);
result[geomIndex] = polygon.getSignedArea();
}
return arrow.makeData({
type: new arrow.Float(arrow.Precision.DOUBLE),
length: input.length,
nullCount: input.nullCount,
nullBitmap: input.nullBitmap,
data: result,
});
}