@trackunit/geo-json-utils 1.11.57 → 1.11.58
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/index.cjs.js +370 -174
- package/index.esm.js +366 -175
- package/package.json +1 -1
- package/src/GeoJsonSchemas.d.ts +168 -90
- package/src/GeoJsonUtils.d.ts +18 -41
- package/src/{TUGeoJsonObjectBridgeUtils.d.ts → TuGeoJsonBridgeUtils.d.ts} +1 -1
- package/src/TuGeoJsonConversions.d.ts +42 -0
- package/src/TuGeoJsonSchemas.d.ts +17 -14
- package/src/index.d.ts +3 -2
- /package/src/{meridianUtils.d.ts → MeridianUtils.d.ts} +0 -0
package/package.json
CHANGED
package/src/GeoJsonSchemas.d.ts
CHANGED
|
@@ -1,69 +1,107 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
/**
|
|
3
|
-
* A Position is an array of coordinates. [
|
|
4
|
-
*
|
|
3
|
+
* A Position is an array of coordinates. [longitude, latitude] or [longitude, latitude, altitude]
|
|
4
|
+
* RFC 7946 Section 3.1.1: "There MUST be two or more elements. The first two elements
|
|
5
|
+
* are longitude and latitude [...] Altitude or elevation MAY be included as an optional
|
|
6
|
+
* third element."
|
|
5
7
|
*/
|
|
6
|
-
export declare const
|
|
8
|
+
export declare const geoJsonPosition2dSchema: z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>;
|
|
9
|
+
export declare const geoJsonPositionSchema: z.ZodEffects<z.ZodUnion<[z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>, z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>]>, [number, number] | [number, number, number], [number, number] | [number, number, number]>;
|
|
7
10
|
export type GeoJsonPosition = z.infer<typeof geoJsonPositionSchema>;
|
|
11
|
+
export type GeoJsonPosition2d = z.infer<typeof geoJsonPosition2dSchema>;
|
|
12
|
+
/**
|
|
13
|
+
* 2D bounding box of the GeoJSON object.
|
|
14
|
+
* The value of the bbox member is an array of length 4.
|
|
15
|
+
*
|
|
16
|
+
* [west, south, east, north]
|
|
17
|
+
*
|
|
18
|
+
* Note: west may be greater than east for bboxes that cross the
|
|
19
|
+
* antimeridian (RFC 7946 Section 5.2).
|
|
20
|
+
*
|
|
21
|
+
* Zero-height bboxes (north === south) are rejected per RFC 7946 Section 5.2:
|
|
22
|
+
* "The latitude of the northeast corner is always greater than the latitude
|
|
23
|
+
* of the southwest corner." Zero-width bboxes (west === east) are not explicitly
|
|
24
|
+
* forbidden by the RFC for non-antimeridian cases, so they pass.
|
|
25
|
+
*/
|
|
26
|
+
export declare const geoJsonBboxSchema: z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber, z.ZodNumber], null>, [number, number, number, number], [number, number, number, number]>, [number, number, number, number], [number, number, number, number]>, [number, number, number, number], [number, number, number, number]>;
|
|
27
|
+
export type GeoJsonBbox = z.infer<typeof geoJsonBboxSchema>;
|
|
8
28
|
/**
|
|
9
29
|
* Point geometry object.
|
|
30
|
+
* Uses z.object() (not strictObject) so RFC 7946 Section 6.1 "foreign members"
|
|
31
|
+
* (crs, vendor extensions, etc.) are accepted and stripped during parse.
|
|
10
32
|
* https://tools.ietf.org/html/rfc7946#section-3.1.2
|
|
11
33
|
*/
|
|
12
34
|
export declare const geoJsonPointSchema: z.ZodObject<{
|
|
13
35
|
type: z.ZodLiteral<"Point">;
|
|
14
|
-
coordinates: z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>;
|
|
15
|
-
|
|
36
|
+
coordinates: z.ZodEffects<z.ZodUnion<[z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>, z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>]>, [number, number] | [number, number, number], [number, number] | [number, number, number]>;
|
|
37
|
+
bbox: z.ZodOptional<z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber, z.ZodNumber], null>, [number, number, number, number], [number, number, number, number]>, [number, number, number, number], [number, number, number, number]>, [number, number, number, number], [number, number, number, number]>>;
|
|
38
|
+
}, "strip", z.ZodTypeAny, {
|
|
16
39
|
type: "Point";
|
|
17
|
-
coordinates: [number, number];
|
|
40
|
+
coordinates: [number, number] | [number, number, number];
|
|
41
|
+
bbox?: [number, number, number, number] | undefined;
|
|
18
42
|
}, {
|
|
19
43
|
type: "Point";
|
|
20
|
-
coordinates: [number, number];
|
|
44
|
+
coordinates: [number, number] | [number, number, number];
|
|
45
|
+
bbox?: [number, number, number, number] | undefined;
|
|
21
46
|
}>;
|
|
22
47
|
export type GeoJsonPoint = z.infer<typeof geoJsonPointSchema>;
|
|
23
48
|
/**
|
|
24
49
|
* MultiPoint geometry object.
|
|
25
|
-
*
|
|
50
|
+
* Foreign members (RFC 7946 Section 6.1) are stripped during parse.
|
|
51
|
+
* https://tools.ietf.org/html/rfc7946#section-3.1.3
|
|
26
52
|
*/
|
|
27
53
|
export declare const geoJsonMultiPointSchema: z.ZodObject<{
|
|
28
54
|
type: z.ZodLiteral<"MultiPoint">;
|
|
29
|
-
coordinates: z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>, "many">;
|
|
30
|
-
|
|
55
|
+
coordinates: z.ZodArray<z.ZodEffects<z.ZodUnion<[z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>, z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>]>, [number, number] | [number, number, number], [number, number] | [number, number, number]>, "many">;
|
|
56
|
+
bbox: z.ZodOptional<z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber, z.ZodNumber], null>, [number, number, number, number], [number, number, number, number]>, [number, number, number, number], [number, number, number, number]>, [number, number, number, number], [number, number, number, number]>>;
|
|
57
|
+
}, "strip", z.ZodTypeAny, {
|
|
31
58
|
type: "MultiPoint";
|
|
32
|
-
coordinates: [number, number][];
|
|
59
|
+
coordinates: ([number, number] | [number, number, number])[];
|
|
60
|
+
bbox?: [number, number, number, number] | undefined;
|
|
33
61
|
}, {
|
|
34
62
|
type: "MultiPoint";
|
|
35
|
-
coordinates: [number, number][];
|
|
63
|
+
coordinates: ([number, number] | [number, number, number])[];
|
|
64
|
+
bbox?: [number, number, number, number] | undefined;
|
|
36
65
|
}>;
|
|
37
66
|
export type GeoJsonMultiPoint = z.infer<typeof geoJsonMultiPointSchema>;
|
|
38
67
|
/**
|
|
39
68
|
* LineString geometry object.
|
|
40
69
|
* Minimum length of 2 positions.
|
|
70
|
+
* Foreign members (RFC 7946 Section 6.1) are stripped during parse.
|
|
41
71
|
* https://tools.ietf.org/html/rfc7946#section-3.1.4
|
|
42
72
|
*/
|
|
43
73
|
export declare const geoJsonLineStringSchema: z.ZodObject<{
|
|
44
74
|
type: z.ZodLiteral<"LineString">;
|
|
45
|
-
coordinates: z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>, "many">;
|
|
46
|
-
|
|
75
|
+
coordinates: z.ZodArray<z.ZodEffects<z.ZodUnion<[z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>, z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>]>, [number, number] | [number, number, number], [number, number] | [number, number, number]>, "many">;
|
|
76
|
+
bbox: z.ZodOptional<z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber, z.ZodNumber], null>, [number, number, number, number], [number, number, number, number]>, [number, number, number, number], [number, number, number, number]>, [number, number, number, number], [number, number, number, number]>>;
|
|
77
|
+
}, "strip", z.ZodTypeAny, {
|
|
47
78
|
type: "LineString";
|
|
48
|
-
coordinates: [number, number][];
|
|
79
|
+
coordinates: ([number, number] | [number, number, number])[];
|
|
80
|
+
bbox?: [number, number, number, number] | undefined;
|
|
49
81
|
}, {
|
|
50
82
|
type: "LineString";
|
|
51
|
-
coordinates: [number, number][];
|
|
83
|
+
coordinates: ([number, number] | [number, number, number])[];
|
|
84
|
+
bbox?: [number, number, number, number] | undefined;
|
|
52
85
|
}>;
|
|
53
86
|
export type GeoJsonLineString = z.infer<typeof geoJsonLineStringSchema>;
|
|
54
87
|
/**
|
|
55
88
|
* MultiLineString geometry object.
|
|
89
|
+
* Each inner array is a LineString coordinate array (>= 2 positions per RFC 7946 Section 3.1.5).
|
|
90
|
+
* Foreign members (RFC 7946 Section 6.1) are stripped during parse.
|
|
56
91
|
* https://tools.ietf.org/html/rfc7946#section-3.1.5
|
|
57
92
|
*/
|
|
58
93
|
export declare const geoJsonMultiLineStringSchema: z.ZodObject<{
|
|
59
94
|
type: z.ZodLiteral<"MultiLineString">;
|
|
60
|
-
coordinates: z.ZodArray<z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>, "many">, "many">;
|
|
61
|
-
|
|
95
|
+
coordinates: z.ZodArray<z.ZodArray<z.ZodEffects<z.ZodUnion<[z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>, z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>]>, [number, number] | [number, number, number], [number, number] | [number, number, number]>, "many">, "many">;
|
|
96
|
+
bbox: z.ZodOptional<z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber, z.ZodNumber], null>, [number, number, number, number], [number, number, number, number]>, [number, number, number, number], [number, number, number, number]>, [number, number, number, number], [number, number, number, number]>>;
|
|
97
|
+
}, "strip", z.ZodTypeAny, {
|
|
62
98
|
type: "MultiLineString";
|
|
63
|
-
coordinates: [number, number][][];
|
|
99
|
+
coordinates: ([number, number] | [number, number, number])[][];
|
|
100
|
+
bbox?: [number, number, number, number] | undefined;
|
|
64
101
|
}, {
|
|
65
102
|
type: "MultiLineString";
|
|
66
|
-
coordinates: [number, number][][];
|
|
103
|
+
coordinates: ([number, number] | [number, number, number])[][];
|
|
104
|
+
bbox?: [number, number, number, number] | undefined;
|
|
67
105
|
}>;
|
|
68
106
|
export type GeoJsonMultiLineString = z.infer<typeof geoJsonMultiLineStringSchema>;
|
|
69
107
|
/**
|
|
@@ -78,99 +116,139 @@ export type GeoJsonMultiLineString = z.infer<typeof geoJsonMultiLineStringSchema
|
|
|
78
116
|
area it bounds, i.e., exterior rings are counterclockwise, and
|
|
79
117
|
holes are clockwise
|
|
80
118
|
*/
|
|
81
|
-
export declare const geoJsonLinearRingSchema: z.ZodEffects<z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>, "many">, [number, number][], [number, number][]>;
|
|
119
|
+
export declare const geoJsonLinearRingSchema: z.ZodEffects<z.ZodArray<z.ZodEffects<z.ZodUnion<[z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>, z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>]>, [number, number] | [number, number, number], [number, number] | [number, number, number]>, "many">, ([number, number] | [number, number, number])[], ([number, number] | [number, number, number])[]>;
|
|
82
120
|
export type GeoJsonLinearRing = z.infer<typeof geoJsonLinearRingSchema>;
|
|
83
121
|
/**
|
|
84
122
|
* Polygon geometry object.
|
|
123
|
+
* Must have at least one ring (the exterior ring) per RFC 7946 Section 3.1.6.
|
|
124
|
+
* Foreign members (RFC 7946 Section 6.1) are stripped during parse.
|
|
85
125
|
* https://tools.ietf.org/html/rfc7946#section-3.1.6
|
|
86
126
|
*/
|
|
87
127
|
export declare const geoJsonPolygonSchema: z.ZodObject<{
|
|
88
128
|
type: z.ZodLiteral<"Polygon">;
|
|
89
|
-
coordinates: z.ZodArray<z.ZodEffects<z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>, "many">, [number, number][], [number, number][]>, "many">;
|
|
90
|
-
|
|
129
|
+
coordinates: z.ZodArray<z.ZodEffects<z.ZodArray<z.ZodEffects<z.ZodUnion<[z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>, z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>]>, [number, number] | [number, number, number], [number, number] | [number, number, number]>, "many">, ([number, number] | [number, number, number])[], ([number, number] | [number, number, number])[]>, "many">;
|
|
130
|
+
bbox: z.ZodOptional<z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber, z.ZodNumber], null>, [number, number, number, number], [number, number, number, number]>, [number, number, number, number], [number, number, number, number]>, [number, number, number, number], [number, number, number, number]>>;
|
|
131
|
+
}, "strip", z.ZodTypeAny, {
|
|
91
132
|
type: "Polygon";
|
|
92
|
-
coordinates: [number, number][][];
|
|
133
|
+
coordinates: ([number, number] | [number, number, number])[][];
|
|
134
|
+
bbox?: [number, number, number, number] | undefined;
|
|
93
135
|
}, {
|
|
94
136
|
type: "Polygon";
|
|
95
|
-
coordinates: [number, number][][];
|
|
137
|
+
coordinates: ([number, number] | [number, number, number])[][];
|
|
138
|
+
bbox?: [number, number, number, number] | undefined;
|
|
96
139
|
}>;
|
|
97
140
|
export type GeoJsonPolygon = z.infer<typeof geoJsonPolygonSchema>;
|
|
98
141
|
/**
|
|
99
142
|
* MultiPolygon geometry object.
|
|
143
|
+
* Foreign members (RFC 7946 Section 6.1) are stripped during parse.
|
|
100
144
|
* https://tools.ietf.org/html/rfc7946#section-3.1.7
|
|
101
145
|
*/
|
|
102
146
|
export declare const geoJsonMultiPolygonSchema: z.ZodObject<{
|
|
103
147
|
type: z.ZodLiteral<"MultiPolygon">;
|
|
104
|
-
coordinates: z.ZodArray<z.ZodArray<z.ZodEffects<z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>, "many">, [number, number][], [number, number][]>, "many">, "many">;
|
|
105
|
-
|
|
148
|
+
coordinates: z.ZodArray<z.ZodArray<z.ZodEffects<z.ZodArray<z.ZodEffects<z.ZodUnion<[z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>, z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>]>, [number, number] | [number, number, number], [number, number] | [number, number, number]>, "many">, ([number, number] | [number, number, number])[], ([number, number] | [number, number, number])[]>, "many">, "many">;
|
|
149
|
+
bbox: z.ZodOptional<z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber, z.ZodNumber], null>, [number, number, number, number], [number, number, number, number]>, [number, number, number, number], [number, number, number, number]>, [number, number, number, number], [number, number, number, number]>>;
|
|
150
|
+
}, "strip", z.ZodTypeAny, {
|
|
106
151
|
type: "MultiPolygon";
|
|
107
|
-
coordinates: [number, number][][][];
|
|
152
|
+
coordinates: ([number, number] | [number, number, number])[][][];
|
|
153
|
+
bbox?: [number, number, number, number] | undefined;
|
|
108
154
|
}, {
|
|
109
155
|
type: "MultiPolygon";
|
|
110
|
-
coordinates: [number, number][][][];
|
|
156
|
+
coordinates: ([number, number] | [number, number, number])[][][];
|
|
157
|
+
bbox?: [number, number, number, number] | undefined;
|
|
111
158
|
}>;
|
|
112
159
|
export type GeoJsonMultiPolygon = z.infer<typeof geoJsonMultiPolygonSchema>;
|
|
113
|
-
export declare const geoJsonGeometrySchema: z.ZodUnion<[z.ZodObject<{
|
|
114
|
-
type: z.ZodLiteral<"Point">;
|
|
115
|
-
coordinates: z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>;
|
|
116
|
-
}, "strict", z.ZodTypeAny, {
|
|
117
|
-
type: "Point";
|
|
118
|
-
coordinates: [number, number];
|
|
119
|
-
}, {
|
|
120
|
-
type: "Point";
|
|
121
|
-
coordinates: [number, number];
|
|
122
|
-
}>, z.ZodObject<{
|
|
123
|
-
type: z.ZodLiteral<"MultiPoint">;
|
|
124
|
-
coordinates: z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>, "many">;
|
|
125
|
-
}, "strict", z.ZodTypeAny, {
|
|
126
|
-
type: "MultiPoint";
|
|
127
|
-
coordinates: [number, number][];
|
|
128
|
-
}, {
|
|
129
|
-
type: "MultiPoint";
|
|
130
|
-
coordinates: [number, number][];
|
|
131
|
-
}>, z.ZodObject<{
|
|
132
|
-
type: z.ZodLiteral<"LineString">;
|
|
133
|
-
coordinates: z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>, "many">;
|
|
134
|
-
}, "strict", z.ZodTypeAny, {
|
|
135
|
-
type: "LineString";
|
|
136
|
-
coordinates: [number, number][];
|
|
137
|
-
}, {
|
|
138
|
-
type: "LineString";
|
|
139
|
-
coordinates: [number, number][];
|
|
140
|
-
}>, z.ZodObject<{
|
|
141
|
-
type: z.ZodLiteral<"MultiLineString">;
|
|
142
|
-
coordinates: z.ZodArray<z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>, "many">, "many">;
|
|
143
|
-
}, "strict", z.ZodTypeAny, {
|
|
144
|
-
type: "MultiLineString";
|
|
145
|
-
coordinates: [number, number][][];
|
|
146
|
-
}, {
|
|
147
|
-
type: "MultiLineString";
|
|
148
|
-
coordinates: [number, number][][];
|
|
149
|
-
}>, z.ZodObject<{
|
|
150
|
-
type: z.ZodLiteral<"Polygon">;
|
|
151
|
-
coordinates: z.ZodArray<z.ZodEffects<z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>, "many">, [number, number][], [number, number][]>, "many">;
|
|
152
|
-
}, "strict", z.ZodTypeAny, {
|
|
153
|
-
type: "Polygon";
|
|
154
|
-
coordinates: [number, number][][];
|
|
155
|
-
}, {
|
|
156
|
-
type: "Polygon";
|
|
157
|
-
coordinates: [number, number][][];
|
|
158
|
-
}>, z.ZodObject<{
|
|
159
|
-
type: z.ZodLiteral<"MultiPolygon">;
|
|
160
|
-
coordinates: z.ZodArray<z.ZodArray<z.ZodEffects<z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>, "many">, [number, number][], [number, number][]>, "many">, "many">;
|
|
161
|
-
}, "strict", z.ZodTypeAny, {
|
|
162
|
-
type: "MultiPolygon";
|
|
163
|
-
coordinates: [number, number][][][];
|
|
164
|
-
}, {
|
|
165
|
-
type: "MultiPolygon";
|
|
166
|
-
coordinates: [number, number][][][];
|
|
167
|
-
}>]>;
|
|
168
|
-
export type GeoJsonGeometry = z.infer<typeof geoJsonGeometrySchema>;
|
|
169
160
|
/**
|
|
170
|
-
*
|
|
171
|
-
* The value of the Bbox member is an array of length 4.
|
|
161
|
+
* GeometryCollection and the recursive Geometry union type.
|
|
172
162
|
*
|
|
173
|
-
*
|
|
163
|
+
* RFC 7946 Section 3.1.8: GeometryCollection contains a "geometries" array
|
|
164
|
+
* of Geometry objects. Because this is recursive (a GeometryCollection can
|
|
165
|
+
* contain other GeometryCollections), the types are defined manually to
|
|
166
|
+
* break the circular z.infer chain.
|
|
174
167
|
*/
|
|
175
|
-
export
|
|
176
|
-
|
|
168
|
+
export type GeoJsonGeometryCollection = {
|
|
169
|
+
readonly type: "GeometryCollection";
|
|
170
|
+
readonly geometries: ReadonlyArray<GeoJsonGeometry>;
|
|
171
|
+
readonly bbox?: GeoJsonBbox;
|
|
172
|
+
};
|
|
173
|
+
export type GeoJsonGeometry = z.infer<typeof geoJsonPointSchema> | z.infer<typeof geoJsonMultiPointSchema> | z.infer<typeof geoJsonLineStringSchema> | z.infer<typeof geoJsonMultiLineStringSchema> | z.infer<typeof geoJsonPolygonSchema> | z.infer<typeof geoJsonMultiPolygonSchema> | GeoJsonGeometryCollection;
|
|
174
|
+
/**
|
|
175
|
+
* GeometryCollection schema.
|
|
176
|
+
* Foreign members (RFC 7946 Section 6.1) are stripped during parse.
|
|
177
|
+
*/
|
|
178
|
+
export declare const geoJsonGeometryCollectionSchema: z.ZodType<GeoJsonGeometryCollection>;
|
|
179
|
+
export declare const geoJsonGeometrySchema: z.ZodType<GeoJsonGeometry>;
|
|
180
|
+
/**
|
|
181
|
+
* Feature object.
|
|
182
|
+
* Geometry may be null for unlocated features (RFC 7946 Section 3.2).
|
|
183
|
+
* Foreign members (RFC 7946 Section 6.1) are stripped during parse.
|
|
184
|
+
* https://tools.ietf.org/html/rfc7946#section-3.2
|
|
185
|
+
*/
|
|
186
|
+
export declare const geoJsonFeatureSchema: z.ZodObject<{
|
|
187
|
+
type: z.ZodLiteral<"Feature">;
|
|
188
|
+
geometry: z.ZodNullable<z.ZodType<GeoJsonGeometry, z.ZodTypeDef, GeoJsonGeometry>>;
|
|
189
|
+
properties: z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
190
|
+
id: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodNumber]>>;
|
|
191
|
+
bbox: z.ZodOptional<z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber, z.ZodNumber], null>, [number, number, number, number], [number, number, number, number]>, [number, number, number, number], [number, number, number, number]>, [number, number, number, number], [number, number, number, number]>>;
|
|
192
|
+
}, "strip", z.ZodTypeAny, {
|
|
193
|
+
type: "Feature";
|
|
194
|
+
geometry: GeoJsonGeometry | null;
|
|
195
|
+
properties: Record<string, unknown> | null;
|
|
196
|
+
bbox?: [number, number, number, number] | undefined;
|
|
197
|
+
id?: string | number | undefined;
|
|
198
|
+
}, {
|
|
199
|
+
type: "Feature";
|
|
200
|
+
geometry: GeoJsonGeometry | null;
|
|
201
|
+
properties: Record<string, unknown> | null;
|
|
202
|
+
bbox?: [number, number, number, number] | undefined;
|
|
203
|
+
id?: string | number | undefined;
|
|
204
|
+
}>;
|
|
205
|
+
export type GeoJsonFeature = z.infer<typeof geoJsonFeatureSchema>;
|
|
206
|
+
/**
|
|
207
|
+
* FeatureCollection object.
|
|
208
|
+
* Foreign members (RFC 7946 Section 6.1) are stripped during parse.
|
|
209
|
+
* https://tools.ietf.org/html/rfc7946#section-3.3
|
|
210
|
+
*/
|
|
211
|
+
export declare const geoJsonFeatureCollectionSchema: z.ZodObject<{
|
|
212
|
+
type: z.ZodLiteral<"FeatureCollection">;
|
|
213
|
+
features: z.ZodArray<z.ZodObject<{
|
|
214
|
+
type: z.ZodLiteral<"Feature">;
|
|
215
|
+
geometry: z.ZodNullable<z.ZodType<GeoJsonGeometry, z.ZodTypeDef, GeoJsonGeometry>>;
|
|
216
|
+
properties: z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
217
|
+
id: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodNumber]>>;
|
|
218
|
+
bbox: z.ZodOptional<z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber, z.ZodNumber], null>, [number, number, number, number], [number, number, number, number]>, [number, number, number, number], [number, number, number, number]>, [number, number, number, number], [number, number, number, number]>>;
|
|
219
|
+
}, "strip", z.ZodTypeAny, {
|
|
220
|
+
type: "Feature";
|
|
221
|
+
geometry: GeoJsonGeometry | null;
|
|
222
|
+
properties: Record<string, unknown> | null;
|
|
223
|
+
bbox?: [number, number, number, number] | undefined;
|
|
224
|
+
id?: string | number | undefined;
|
|
225
|
+
}, {
|
|
226
|
+
type: "Feature";
|
|
227
|
+
geometry: GeoJsonGeometry | null;
|
|
228
|
+
properties: Record<string, unknown> | null;
|
|
229
|
+
bbox?: [number, number, number, number] | undefined;
|
|
230
|
+
id?: string | number | undefined;
|
|
231
|
+
}>, "many">;
|
|
232
|
+
bbox: z.ZodOptional<z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber, z.ZodNumber], null>, [number, number, number, number], [number, number, number, number]>, [number, number, number, number], [number, number, number, number]>, [number, number, number, number], [number, number, number, number]>>;
|
|
233
|
+
}, "strip", z.ZodTypeAny, {
|
|
234
|
+
type: "FeatureCollection";
|
|
235
|
+
features: {
|
|
236
|
+
type: "Feature";
|
|
237
|
+
geometry: GeoJsonGeometry | null;
|
|
238
|
+
properties: Record<string, unknown> | null;
|
|
239
|
+
bbox?: [number, number, number, number] | undefined;
|
|
240
|
+
id?: string | number | undefined;
|
|
241
|
+
}[];
|
|
242
|
+
bbox?: [number, number, number, number] | undefined;
|
|
243
|
+
}, {
|
|
244
|
+
type: "FeatureCollection";
|
|
245
|
+
features: {
|
|
246
|
+
type: "Feature";
|
|
247
|
+
geometry: GeoJsonGeometry | null;
|
|
248
|
+
properties: Record<string, unknown> | null;
|
|
249
|
+
bbox?: [number, number, number, number] | undefined;
|
|
250
|
+
id?: string | number | undefined;
|
|
251
|
+
}[];
|
|
252
|
+
bbox?: [number, number, number, number] | undefined;
|
|
253
|
+
}>;
|
|
254
|
+
export type GeoJsonFeatureCollection = z.infer<typeof geoJsonFeatureCollectionSchema>;
|
package/src/GeoJsonUtils.d.ts
CHANGED
|
@@ -1,18 +1,11 @@
|
|
|
1
1
|
import { GeoJsonBbox, GeoJsonLinearRing, GeoJsonMultiPolygon, GeoJsonPoint, GeoJsonPolygon, GeoJsonPosition } from "./GeoJsonSchemas";
|
|
2
|
-
import { TuGeoJsonPolygonNoHoles } from "./TuGeoJsonSchemas";
|
|
3
2
|
export declare const EARTH_RADIUS = 6378137;
|
|
4
|
-
export interface TuCoordinate {
|
|
5
|
-
longitude: number;
|
|
6
|
-
latitude: number;
|
|
7
|
-
}
|
|
8
|
-
interface TuBoundingBox {
|
|
9
|
-
nw: TuCoordinate;
|
|
10
|
-
se: TuCoordinate;
|
|
11
|
-
}
|
|
12
3
|
/**
|
|
13
|
-
* @description Creates a polygon
|
|
4
|
+
* @description Creates a polygon from a bounding box.
|
|
5
|
+
* Handles antimeridian-crossing bboxes (where west > east) by splitting into
|
|
6
|
+
* a MultiPolygon with one polygon per hemisphere.
|
|
14
7
|
*/
|
|
15
|
-
export declare const getPolygonFromBbox: (bbox: GeoJsonBbox) =>
|
|
8
|
+
export declare const getPolygonFromBbox: (bbox: GeoJsonBbox) => GeoJsonPolygon | GeoJsonMultiPolygon;
|
|
16
9
|
/**
|
|
17
10
|
* @description Creates a bounding box from a GeoJSON Polygon or MultiPolygon.
|
|
18
11
|
* Handles cases where the polygon crosses the 180/-180 meridian.
|
|
@@ -20,26 +13,15 @@ export declare const getPolygonFromBbox: (bbox: GeoJsonBbox) => TuGeoJsonPolygon
|
|
|
20
13
|
export declare const getBboxFromGeoJsonPolygon: (polygon: GeoJsonPolygon | GeoJsonMultiPolygon) => GeoJsonBbox | null;
|
|
21
14
|
/**
|
|
22
15
|
* @description Creates a round polygon from a point and a radius.
|
|
16
|
+
* Handles antimeridian crossing per RFC 7946 Section 3.1.9 by splitting
|
|
17
|
+
* into a MultiPolygon. Clamps polar latitudes to [-90, 90].
|
|
18
|
+
*
|
|
19
|
+
* Returns null when the polygon crosses the antimeridian but both hemisphere
|
|
20
|
+
* intersections yield zero polygons (e.g. very small polygons near the
|
|
21
|
+
* dateline). In that case, returning the original coordinates would produce
|
|
22
|
+
* invalid geometry per RFC 7946.
|
|
23
23
|
*/
|
|
24
|
-
export declare const getPolygonFromPointAndRadius: (point: GeoJsonPoint, radius: number) => GeoJsonPolygon;
|
|
25
|
-
/**
|
|
26
|
-
* @description Creates a TU bounding box from a GeoJson Polygon.
|
|
27
|
-
* Handles cases where the polygon crosses the 180/-180 meridian.
|
|
28
|
-
*/
|
|
29
|
-
export declare const getBoundingBoxFromGeoJsonPolygon: (polygon: GeoJsonPolygon | GeoJsonMultiPolygon) => TuBoundingBox | null;
|
|
30
|
-
/**
|
|
31
|
-
* @description Creates a GeoJSON MultiPolygon from a TU bounding box.
|
|
32
|
-
* It has to return a MultiPolygon because the polygon may cross the 180/-180 meridian
|
|
33
|
-
* and we need to avoid the polygon being ambiguous about which side of the meridian it wraps around.
|
|
34
|
-
* so if it crosses the meridian, we return a MultiPolygon with two polygons, one for the western hemisphere and one for the eastern hemisphere.
|
|
35
|
-
* @param boundingBox The bounding box to create a polygon from
|
|
36
|
-
* @returns {GeoJsonMultiPolygon | GeoJsonPolygon} The polygon created from the bounding box
|
|
37
|
-
*/
|
|
38
|
-
export declare const getGeoJsonPolygonFromBoundingBox: (boundingBox: TuBoundingBox) => GeoJsonMultiPolygon | GeoJsonPolygon;
|
|
39
|
-
/**
|
|
40
|
-
* @description Creates TU point coordinate from a GeoJSON Point.
|
|
41
|
-
*/
|
|
42
|
-
export declare const getPointCoordinateFromGeoJsonPoint: (point: GeoJsonPoint) => TuCoordinate;
|
|
24
|
+
export declare const getPolygonFromPointAndRadius: (point: GeoJsonPoint, radius: number) => GeoJsonPolygon | GeoJsonMultiPolygon | null;
|
|
43
25
|
/**
|
|
44
26
|
* @description Gets the extreme point of a polygon in a given direction.
|
|
45
27
|
* @param {object} params - The parameters object
|
|
@@ -60,27 +42,22 @@ export declare const isGeoJsonPositionInLinearRing: ({ position, linearRing, }:
|
|
|
60
42
|
}) => boolean | null;
|
|
61
43
|
/**
|
|
62
44
|
* @description Checks if a point is inside a polygon.
|
|
45
|
+
* Correctly handles holes per RFC 7946 Section 3.1.6: the first ring is the
|
|
46
|
+
* exterior boundary, subsequent rings are holes. A point inside a hole is
|
|
47
|
+
* considered outside the polygon.
|
|
63
48
|
*/
|
|
64
49
|
export declare const isGeoJsonPointInPolygon: ({ point, polygon, }: {
|
|
65
50
|
point: GeoJsonPoint;
|
|
66
51
|
polygon: GeoJsonPolygon;
|
|
67
52
|
}) => boolean | null;
|
|
68
53
|
/**
|
|
69
|
-
* Checks if polygon1
|
|
54
|
+
* Checks if polygon1 is fully contained within polygon2.
|
|
55
|
+
* Correctly handles holes per RFC 7946 Section 3.1.6: a polygon inside
|
|
56
|
+
* a hole of polygon2 is NOT considered contained.
|
|
70
57
|
*/
|
|
71
58
|
export declare const isFullyContainedInGeoJsonPolygon: (polygon1: GeoJsonPolygon, polygon2: GeoJsonPolygon) => boolean | null;
|
|
72
59
|
/**
|
|
73
60
|
* @description Gets the intersection between two GeoJSON polygons/multi-polygons.
|
|
74
61
|
* Returns a MultiPolygon representing the intersection, or null if there is no intersection.
|
|
75
|
-
* @param polygon1 The first polygon/multi-polygon to check intersection
|
|
76
|
-
* @param polygon2 The second polygon/multi-polygon to check intersection
|
|
77
|
-
* @returns {(GeoJsonMultiPolygon | GeoJsonPolygon)} The intersection as either a Polygon or MultiPolygon
|
|
78
62
|
*/
|
|
79
63
|
export declare const getGeoJsonPolygonIntersection: (polygon1: GeoJsonPolygon | GeoJsonMultiPolygon, polygon2: GeoJsonPolygon | GeoJsonMultiPolygon) => GeoJsonMultiPolygon | GeoJsonPolygon | null;
|
|
80
|
-
/**
|
|
81
|
-
* @description Creates a TU bounding box from a GeoJSON Bbox.
|
|
82
|
-
* @param bbox The GeoJSON Bbox to create a TU bounding box from
|
|
83
|
-
* @returns {TuBoundingBox} The TU bounding box created from the GeoJSON Bbox
|
|
84
|
-
*/
|
|
85
|
-
export declare const getBoundingBoxFromGeoJsonBbox: (bbox: GeoJsonBbox) => TuBoundingBox;
|
|
86
|
-
export {};
|
|
@@ -16,7 +16,7 @@ interface GeoJsonFeature {
|
|
|
16
16
|
* @param inconsistentCoordinates Single point, array of points or nested array of points
|
|
17
17
|
* @returns {GeoJsonPosition[]} Array of standardized coordinates
|
|
18
18
|
*/
|
|
19
|
-
export declare const coordinatesToStandardFormat: (inconsistentCoordinates: GeoJsonPosition | Array<GeoJsonPosition> | Array<Array<GeoJsonPosition>> | null | undefined) => [number, number][];
|
|
19
|
+
export declare const coordinatesToStandardFormat: (inconsistentCoordinates: GeoJsonPosition | Array<GeoJsonPosition> | Array<Array<GeoJsonPosition>> | null | undefined) => ([number, number] | [number, number, number])[];
|
|
20
20
|
/**
|
|
21
21
|
* @description Extracts a point coordinate from a GeoJSON object.
|
|
22
22
|
* @param geoObject A GeoJSON object.
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { GeoJsonBbox, GeoJsonMultiPolygon, GeoJsonPoint, GeoJsonPolygon, GeoJsonPosition, GeoJsonPosition2d } from "./GeoJsonSchemas";
|
|
2
|
+
/**
|
|
3
|
+
* @description Converts a GeoJSON position (which may have altitude) to a 2D position.
|
|
4
|
+
*/
|
|
5
|
+
export declare const toPosition2d: (position: GeoJsonPosition) => GeoJsonPosition2d;
|
|
6
|
+
export interface TuCoordinate {
|
|
7
|
+
longitude: number;
|
|
8
|
+
latitude: number;
|
|
9
|
+
}
|
|
10
|
+
export interface TuBoundingBox {
|
|
11
|
+
nw: TuCoordinate;
|
|
12
|
+
se: TuCoordinate;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* @description Creates a TU bounding box from a GeoJson Polygon.
|
|
16
|
+
* Handles cases where the polygon crosses the 180/-180 meridian.
|
|
17
|
+
*/
|
|
18
|
+
export declare const getBoundingBoxFromGeoJsonPolygon: (polygon: GeoJsonPolygon | GeoJsonMultiPolygon) => TuBoundingBox | null;
|
|
19
|
+
/**
|
|
20
|
+
* @description Creates a GeoJSON Polygon or MultiPolygon from a TU bounding box.
|
|
21
|
+
* Returns a MultiPolygon when the bounding box crosses the 180/-180 meridian,
|
|
22
|
+
* with one polygon per hemisphere.
|
|
23
|
+
*
|
|
24
|
+
* Returns a 2D-only coordinate type since bounding boxes have no altitude.
|
|
25
|
+
* The return type is assignable to both GeoJsonPolygon | GeoJsonMultiPolygon
|
|
26
|
+
* (for GeoJSON consumers) and GraphQL AreaInput (for query variables).
|
|
27
|
+
*/
|
|
28
|
+
export declare const getGeoJsonPolygonFromBoundingBox: (boundingBox: TuBoundingBox) => {
|
|
29
|
+
type: "MultiPolygon";
|
|
30
|
+
coordinates: Array<Array<Array<GeoJsonPosition2d>>>;
|
|
31
|
+
} | {
|
|
32
|
+
type: "Polygon";
|
|
33
|
+
coordinates: Array<Array<GeoJsonPosition2d>>;
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* @description Creates TU point coordinate from a GeoJSON Point.
|
|
37
|
+
*/
|
|
38
|
+
export declare const getPointCoordinateFromGeoJsonPoint: (point: GeoJsonPoint) => TuCoordinate;
|
|
39
|
+
/**
|
|
40
|
+
* @description Creates a TU bounding box from a GeoJSON Bbox.
|
|
41
|
+
*/
|
|
42
|
+
export declare const getBoundingBoxFromGeoJsonBbox: (bbox: GeoJsonBbox) => TuBoundingBox;
|
|
@@ -4,16 +4,17 @@ import { z } from "zod";
|
|
|
4
4
|
*
|
|
5
5
|
* Same as geoJsonPolygonSchema but type disallows holes by
|
|
6
6
|
* using tuple of one single linear ring instead of an array.
|
|
7
|
+
* Foreign members (RFC 7946 Section 6.1) are stripped during parse.
|
|
7
8
|
*/
|
|
8
9
|
export declare const tuGeoJsonPolygonNoHolesSchema: z.ZodObject<{
|
|
9
10
|
type: z.ZodLiteral<"Polygon">;
|
|
10
|
-
coordinates: z.ZodTuple<[z.ZodEffects<z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>, "many">, [number, number][], [number, number][]>], null>;
|
|
11
|
-
}, "
|
|
11
|
+
coordinates: z.ZodTuple<[z.ZodEffects<z.ZodArray<z.ZodEffects<z.ZodUnion<[z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>, z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>]>, [number, number] | [number, number, number], [number, number] | [number, number, number]>, "many">, ([number, number] | [number, number, number])[], ([number, number] | [number, number, number])[]>], null>;
|
|
12
|
+
}, "strip", z.ZodTypeAny, {
|
|
12
13
|
type: "Polygon";
|
|
13
|
-
coordinates: [[number, number][]];
|
|
14
|
+
coordinates: [([number, number] | [number, number, number])[]];
|
|
14
15
|
}, {
|
|
15
16
|
type: "Polygon";
|
|
16
|
-
coordinates: [[number, number][]];
|
|
17
|
+
coordinates: [([number, number] | [number, number, number])[]];
|
|
17
18
|
}>;
|
|
18
19
|
export type TuGeoJsonPolygonNoHoles = z.infer<typeof tuGeoJsonPolygonNoHolesSchema>;
|
|
19
20
|
/**
|
|
@@ -21,38 +22,40 @@ export type TuGeoJsonPolygonNoHoles = z.infer<typeof tuGeoJsonPolygonNoHolesSche
|
|
|
21
22
|
* For when you wish to define an area by a point and a radius.
|
|
22
23
|
*
|
|
23
24
|
* radius is in meters
|
|
25
|
+
* Foreign members are stripped during parse.
|
|
24
26
|
*/
|
|
25
27
|
export declare const tuGeoJsonPointRadiusSchema: z.ZodObject<{
|
|
26
28
|
type: z.ZodLiteral<"PointRadius">;
|
|
27
|
-
coordinates: z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>;
|
|
29
|
+
coordinates: z.ZodEffects<z.ZodUnion<[z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>, z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>]>, [number, number] | [number, number, number], [number, number] | [number, number, number]>;
|
|
28
30
|
radius: z.ZodNumber;
|
|
29
|
-
}, "
|
|
31
|
+
}, "strip", z.ZodTypeAny, {
|
|
30
32
|
type: "PointRadius";
|
|
31
|
-
coordinates: [number, number];
|
|
33
|
+
coordinates: [number, number] | [number, number, number];
|
|
32
34
|
radius: number;
|
|
33
35
|
}, {
|
|
34
36
|
type: "PointRadius";
|
|
35
|
-
coordinates: [number, number];
|
|
37
|
+
coordinates: [number, number] | [number, number, number];
|
|
36
38
|
radius: number;
|
|
37
39
|
}>;
|
|
38
40
|
export type TuGeoJsonPointRadius = z.infer<typeof tuGeoJsonPointRadiusSchema>;
|
|
39
41
|
/**
|
|
40
42
|
* A Polygon with exactly 5 points and 4 horizontal/vertical sides that form a normal rectangular box.
|
|
43
|
+
* Foreign members are stripped during parse.
|
|
41
44
|
*/
|
|
42
45
|
export declare const tuGeoJsonRectangularBoxPolygonSchema: z.ZodEffects<z.ZodObject<{
|
|
43
46
|
type: z.ZodLiteral<"Polygon">;
|
|
44
|
-
coordinates: z.ZodArray<z.ZodEffects<z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>, "many">, [number, number][], [number, number][]>, "many">;
|
|
45
|
-
}, "
|
|
47
|
+
coordinates: z.ZodArray<z.ZodEffects<z.ZodArray<z.ZodEffects<z.ZodUnion<[z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>, z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>]>, [number, number] | [number, number, number], [number, number] | [number, number, number]>, "many">, ([number, number] | [number, number, number])[], ([number, number] | [number, number, number])[]>, "many">;
|
|
48
|
+
}, "strip", z.ZodTypeAny, {
|
|
46
49
|
type: "Polygon";
|
|
47
|
-
coordinates: [number, number][][];
|
|
50
|
+
coordinates: ([number, number] | [number, number, number])[][];
|
|
48
51
|
}, {
|
|
49
52
|
type: "Polygon";
|
|
50
|
-
coordinates: [number, number][][];
|
|
53
|
+
coordinates: ([number, number] | [number, number, number])[][];
|
|
51
54
|
}>, {
|
|
52
55
|
type: "Polygon";
|
|
53
|
-
coordinates: [number, number][][];
|
|
56
|
+
coordinates: ([number, number] | [number, number, number])[][];
|
|
54
57
|
}, {
|
|
55
58
|
type: "Polygon";
|
|
56
|
-
coordinates: [number, number][][];
|
|
59
|
+
coordinates: ([number, number] | [number, number, number])[][];
|
|
57
60
|
}>;
|
|
58
61
|
export type TuGeoJsonRectangularBoxPolygon = z.infer<typeof tuGeoJsonRectangularBoxPolygonSchema>;
|
package/src/index.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export * from "./GeoJsonSchemas";
|
|
2
2
|
export * from "./GeoJsonUtils";
|
|
3
|
-
export * from "./
|
|
4
|
-
export * from "./
|
|
3
|
+
export * from "./MeridianUtils";
|
|
4
|
+
export * from "./TuGeoJsonBridgeUtils";
|
|
5
|
+
export * from "./TuGeoJsonConversions";
|
|
5
6
|
export * from "./TuGeoJsonSchemas";
|
|
File without changes
|