@math.gl/geospatial 5.0.0-beta.1 → 5.0.0-beta.2

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.
Files changed (90) hide show
  1. package/dist/crs/crs-identifier.d.ts +23 -0
  2. package/dist/crs/crs-identifier.d.ts.map +1 -0
  3. package/dist/crs/crs-identifier.js +74 -0
  4. package/dist/crs/crs-identifier.js.map +1 -0
  5. package/dist/crs/index.cjs +48 -0
  6. package/dist/crs/index.cjs.map +2 -2
  7. package/dist/crs/index.d.ts +1 -0
  8. package/dist/crs/index.d.ts.map +1 -1
  9. package/dist/crs/index.js +1 -0
  10. package/dist/crs/index.js.map +1 -1
  11. package/dist/discontinuous/cap-map.d.ts.map +1 -1
  12. package/dist/discontinuous/cap-map.js +197 -13
  13. package/dist/discontinuous/cap-map.js.map +1 -1
  14. package/dist/discontinuous/elastic/geometry.d.ts +1 -1
  15. package/dist/discontinuous/elastic/geometry.d.ts.map +1 -1
  16. package/dist/discontinuous/elastic/geometry.js +7 -7
  17. package/dist/discontinuous/elastic/geometry.js.map +1 -1
  18. package/dist/discontinuous/elastic/map.d.ts.map +1 -1
  19. package/dist/discontinuous/elastic/map.js +263 -23
  20. package/dist/discontinuous/elastic/map.js.map +1 -1
  21. package/dist/discontinuous/elastic/source-arc.d.ts +10 -0
  22. package/dist/discontinuous/elastic/source-arc.d.ts.map +1 -0
  23. package/dist/discontinuous/elastic/source-arc.js +111 -0
  24. package/dist/discontinuous/elastic/source-arc.js.map +1 -0
  25. package/dist/discontinuous/global-polygons.d.ts +1 -1
  26. package/dist/discontinuous/global-polygons.d.ts.map +1 -1
  27. package/dist/discontinuous/global-polygons.js +49 -1
  28. package/dist/discontinuous/global-polygons.js.map +1 -1
  29. package/dist/discontinuous/map-engine.d.ts +9 -0
  30. package/dist/discontinuous/map-engine.d.ts.map +1 -1
  31. package/dist/discontinuous/map-layout.d.ts +21 -0
  32. package/dist/discontinuous/map-layout.d.ts.map +1 -1
  33. package/dist/discontinuous/map-layout.js +116 -1
  34. package/dist/discontinuous/map-layout.js.map +1 -1
  35. package/dist/discontinuous/map-transition.d.ts.map +1 -1
  36. package/dist/discontinuous/map-transition.js +66 -3
  37. package/dist/discontinuous/map-transition.js.map +1 -1
  38. package/dist/discontinuous/mercator-map.d.ts +2 -2
  39. package/dist/discontinuous/mercator-map.d.ts.map +1 -1
  40. package/dist/discontinuous/mercator-map.js +123 -11
  41. package/dist/discontinuous/mercator-map.js.map +1 -1
  42. package/dist/discontinuous/polygon-constraints.d.ts +16 -0
  43. package/dist/discontinuous/polygon-constraints.d.ts.map +1 -0
  44. package/dist/discontinuous/polygon-constraints.js +157 -0
  45. package/dist/discontinuous/polygon-constraints.js.map +1 -0
  46. package/dist/discontinuous/prepare-features.d.ts +27 -0
  47. package/dist/discontinuous/prepare-features.d.ts.map +1 -1
  48. package/dist/discontinuous/prepare-features.js +106 -5
  49. package/dist/discontinuous/prepare-features.js.map +1 -1
  50. package/dist/discontinuous/rotated-map.d.ts +9 -0
  51. package/dist/discontinuous/rotated-map.d.ts.map +1 -1
  52. package/dist/discontinuous/source-arc.d.ts +4 -0
  53. package/dist/discontinuous/source-arc.d.ts.map +1 -0
  54. package/dist/discontinuous/source-arc.js +23 -0
  55. package/dist/discontinuous/source-arc.js.map +1 -0
  56. package/dist/discontinuous/world-kernels.d.ts +1 -1
  57. package/dist/discontinuous.cjs +1047 -75
  58. package/dist/discontinuous.cjs.map +3 -3
  59. package/dist/index.cjs +48 -0
  60. package/dist/index.cjs.map +2 -2
  61. package/dist/index.d.ts +1 -1
  62. package/dist/index.d.ts.map +1 -1
  63. package/dist/index.js +1 -1
  64. package/dist/index.js.map +1 -1
  65. package/dist/turf.cjs +69 -5
  66. package/dist/turf.cjs.map +2 -2
  67. package/dist/turf.d.ts +9 -0
  68. package/dist/turf.d.ts.map +1 -1
  69. package/dist/turf.js +67 -0
  70. package/dist/turf.js.map +1 -1
  71. package/dist/workers/index.cjs +1075 -79
  72. package/dist/workers/index.cjs.map +3 -3
  73. package/dist/workers/operations.cjs +1049 -77
  74. package/dist/workers/operations.cjs.map +3 -3
  75. package/package.json +5 -5
  76. package/src/crs/crs-identifier.ts +86 -0
  77. package/src/crs/index.ts +1 -0
  78. package/src/discontinuous/cap-map.ts +248 -19
  79. package/src/discontinuous/elastic/geometry.ts +18 -7
  80. package/src/discontinuous/elastic/map.ts +334 -30
  81. package/src/discontinuous/elastic/source-arc.ts +129 -0
  82. package/src/discontinuous/global-polygons.ts +56 -2
  83. package/src/discontinuous/map-layout.ts +165 -2
  84. package/src/discontinuous/map-transition.ts +67 -3
  85. package/src/discontinuous/mercator-map.ts +151 -12
  86. package/src/discontinuous/polygon-constraints.ts +184 -0
  87. package/src/discontinuous/prepare-features.ts +154 -6
  88. package/src/discontinuous/source-arc.ts +31 -0
  89. package/src/index.ts +1 -0
  90. package/src/turf.ts +86 -0
@@ -2,8 +2,10 @@
2
2
  // SPDX-License-Identifier: MIT
3
3
  // SPDX-FileCopyrightText: Copyright (c) vis.gl contributors
4
4
  import polygonClipping from 'polygon-clipping';
5
+ import { tracePolygonConstraints, composePolygonEdge } from "./polygon-constraints.js";
6
+ import { sourceArc } from "./source-arc.js";
5
7
  import { DiscontinuousMap } from "./map-layout.js";
6
- import { geographic, RAD } from "./math.js";
8
+ import { angle, coordinates, geographic, RAD, unit } from "./math.js";
7
9
  /** Spherical Mercator, clipped to a finite latitude band after seam splitting. */
8
10
  export class MercatorMap extends DiscontinuousMap {
9
11
  constructor(radius = 1, centralMeridian = 0, maxLatitude = 85.0511287798066) {
@@ -96,17 +98,74 @@ export class MercatorMap extends DiscontinuousMap {
96
98
  continue;
97
99
  }
98
100
  const at = (t) => [a[0] + (b[0] - a[0]) * t, a[1] + dy * t];
99
- const start = at(t0), end = at(t1);
101
+ // Locate the latitude cut on the sampled source great-circle arc, not
102
+ // on its projected chord. Retain the parent segment throughout this stage.
103
+ const endpoint = (t) => {
104
+ if (t === 0 || t === 1)
105
+ return { xy: at(t), source: part.sourceCoordinates[i - 1 + t], t };
106
+ const va = geographic(part.sourceCoordinates[i - 1]), vb = geographic(part.sourceCoordinates[i]), arc = angle(va, vb);
107
+ const sourceAt = (t) => {
108
+ if (!arc)
109
+ return part.sourceCoordinates[i - 1];
110
+ const a = Math.sin((1 - t) * arc) / Math.sin(arc), b = Math.sin(t * arc) / Math.sin(arc);
111
+ return coordinates(unit(va.map((v, k) => a * v + b * vb[k])));
112
+ };
113
+ const latitude = Math.sign(at(t)[1]) * this.limit;
114
+ let lo = 0, hi = 1;
115
+ for (let j = 0; j < 52; j++) {
116
+ const mid = (lo + hi) / 2;
117
+ if (sourceAt(mid)[1] < latitude === part.sourceCoordinates[i - 1][1] < latitude)
118
+ lo = mid;
119
+ else
120
+ hi = mid;
121
+ }
122
+ const f = (lo + hi) / 2, source = sourceAt(f);
123
+ const xy = super.projectPoint(source, part.regionId).position;
124
+ return { xy, source, t: f };
125
+ };
126
+ const start = endpoint(t0), end = endpoint(t1);
127
+ const append = (point, index) => {
128
+ current.coordinates.push(point.xy);
129
+ current.sourceCoordinates.push(point.source);
130
+ const source = part.provenance, target = current.provenance;
131
+ if (!source || !target)
132
+ return;
133
+ const segment = source.segments[i];
134
+ const from = source.segments[i - 1] === segment ? source.parameters[i - 1] : 0;
135
+ target.segments.push(point.t === 0 || point.t === 1 ? source.segments[index] : segment);
136
+ target.parameters.push(point.t === 0 || point.t === 1
137
+ ? source.parameters[index]
138
+ : from + point.t * (source.parameters[i] - from));
139
+ target.vertices.push(point.t === 0 || point.t === 1 ? source.vertices[index] : 0xffffffff);
140
+ if (options?.pathDistances)
141
+ target.angularDistances.push(source.angularDistances[i - 1] +
142
+ point.t * (source.angularDistances[i] - source.angularDistances[i - 1]));
143
+ };
100
144
  if (!current || t0 > 0) {
101
145
  current = {
102
146
  regionId: part.regionId,
103
- coordinates: [start],
104
- sourceCoordinates: [this.source(start)]
147
+ coordinates: [],
148
+ sourceCoordinates: [],
149
+ ...(part.provenance
150
+ ? {
151
+ provenance: {
152
+ segments: [],
153
+ parameters: [],
154
+ vertices: [],
155
+ angularDistances: [],
156
+ ...(options?.pathBoundaries
157
+ ? { startReason: t0 > 0 ? 'coverage-boundary' : part.provenance.startReason }
158
+ : {})
159
+ }
160
+ }
161
+ : {})
105
162
  };
106
163
  result.push(current);
164
+ append(start, i - 1);
107
165
  }
108
- current.coordinates.push(end);
109
- current.sourceCoordinates.push(this.source(end));
166
+ append(end, i);
167
+ if (current.provenance && options?.pathBoundaries)
168
+ current.provenance.endReason = t1 < 1 ? 'coverage-boundary' : part.provenance.endReason;
110
169
  if (t1 < 1)
111
170
  current = undefined;
112
171
  }
@@ -124,11 +183,64 @@ export class MercatorMap extends DiscontinuousMap {
124
183
  [-x, -y]
125
184
  ]
126
185
  ];
127
- return super.projectPolygon(rings, options).flatMap(part => polygonClipping.intersection(part.coordinates, box).map(coordinates => ({
128
- regionId: part.regionId,
129
- coordinates,
130
- sourceCoordinates: coordinates.map(ring => ring.map(p => this.source(p)))
131
- })));
186
+ return super.projectPolygon(rings, options).flatMap(part => polygonClipping.intersection(part.coordinates, box).map(polygon => {
187
+ const traced = tracePolygonConstraints(part.coordinates, polygon, 1e-10, part.edgeProvenance);
188
+ const sources = traced.rings.map(r => r.map(p => this.source(p)));
189
+ traced.owners.forEach((owners, r) => owners.forEach((owner, i) => {
190
+ if (!owner)
191
+ return;
192
+ const [parentRing, parentEdge] = owner, a = part.sourceCoordinates[parentRing][parentEdge], b = part.sourceCoordinates[parentRing][parentEdge + 1], at = sourceArc(a, b);
193
+ for (const j of [i, i + 1]) {
194
+ const q = traced.rings[r][j], first = part.coordinates[parentRing][parentEdge], last = part.coordinates[parentRing][parentEdge + 1];
195
+ if (Math.hypot(q[0] - first[0], q[1] - first[1]) < 1e-10 * this.radius)
196
+ sources[r][j] = [...a];
197
+ else if (Math.hypot(q[0] - last[0], q[1] - last[1]) < 1e-10 * this.radius)
198
+ sources[r][j] = [...b];
199
+ else {
200
+ const latitude = Math.sign(q[1]) * this.limit;
201
+ let lo = 0, hi = 1;
202
+ if (a[1] < latitude === b[1] < latitude)
203
+ throw new Error('Unresolved Mercator source constraint intersection');
204
+ for (let k = 0; k < 52; k++) {
205
+ const mid = (lo + hi) / 2;
206
+ if (at(mid)[1] < latitude === a[1] < latitude)
207
+ lo = mid;
208
+ else
209
+ hi = mid;
210
+ }
211
+ sources[r][j] = at((lo + hi) / 2);
212
+ }
213
+ }
214
+ }));
215
+ for (const r of sources)
216
+ r[r.length - 1] = [...r[0]];
217
+ return {
218
+ regionId: part.regionId,
219
+ sourceCoordinates: sources,
220
+ coordinates: sources.map(r => r.map(p => super.projectPoint(p, part.regionId).position)),
221
+ ...(options?.polygonEdgeProvenance
222
+ ? {
223
+ edgeProvenance: traced.owners.map((owners, r) => owners.map((owner, i) => {
224
+ if (owner) {
225
+ const [pr, pe] = owner;
226
+ return composePolygonEdge(part.edgeProvenance[pr][pe], part.sourceCoordinates[pr][pe], part.sourceCoordinates[pr][pe + 1], sources[r][i], sources[r][i + 1]);
227
+ }
228
+ if (!sources[r]
229
+ .slice(i, i + 2)
230
+ .every(p => Math.abs(Math.abs(p[1]) - this.limit) < 1e-7))
231
+ throw new Error('Unknown Mercator clipping constraint');
232
+ return {
233
+ kind: 'coverage-boundary',
234
+ ring: 0xffffffff,
235
+ segment: 0xffffffff,
236
+ t0: 0,
237
+ t1: 0
238
+ };
239
+ }))
240
+ }
241
+ : {})
242
+ };
243
+ }));
132
244
  }
133
245
  }
134
246
  //# sourceMappingURL=mercator-map.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"mercator-map.js","sourceRoot":"","sources":["../../src/discontinuous/mercator-map.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mercator-map.js","sourceRoot":"","sources":["../../src/discontinuous/mercator-map.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { type Position } from "./math.js";
2
+ import type { MapPolygonEdge } from "./map-layout.js";
3
+ export type ConstraintOwner = readonly [ring: number, edge: number] | null;
4
+ /** Attribute boolean output to indexed input constraints before final map
5
+ * projection/resampling. Restore vertices erased by collinear-edge merging.
6
+ * Ambiguous ancestry rejects; target rendering coordinates never identify an
7
+ * original source segment. The caller owns this computational clipping chart.
8
+ */
9
+ export declare function tracePolygonConstraints(input: Position[][], output: Position[][], tolerance?: number, priorities?: MapPolygonEdge[][], accept?: (point: Position) => boolean, degenerate?: (a: Position, b: Position) => boolean): {
10
+ rings: Position[][];
11
+ owners: (readonly [ring: number, edge: number])[][];
12
+ };
13
+ /** Compose directed fractions through a known parent edge; never search raw
14
+ * input geometry for an original segment after resampling or projection. */
15
+ export declare function composePolygonEdge(parent: MapPolygonEdge, a: Position, b: Position, start: Position, end: Position): MapPolygonEdge;
16
+ //# sourceMappingURL=polygon-constraints.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"polygon-constraints.d.ts","sourceRoot":"","sources":["../../src/discontinuous/polygon-constraints.ts"],"names":[],"mappings":"AAGA,OAAO,EAAoB,KAAK,QAAQ,EAAC,kBAAe;AACxD,OAAO,KAAK,EAAC,cAAc,EAAC,wBAAqB;AACjD,MAAM,MAAM,eAAe,GAAG,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;AAC3E;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,QAAQ,EAAE,EAAE,EACnB,MAAM,EAAE,QAAQ,EAAE,EAAE,EACpB,SAAS,SAAQ,EACjB,UAAU,CAAC,EAAE,cAAc,EAAE,EAAE,EAC/B,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,OAAO,EACrC,UAAU,CAAC,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,KAAK,OAAO;;;EAmJnD;AACD;4EAC4E;AAC5E,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,cAAc,EACtB,CAAC,EAAE,QAAQ,EACX,CAAC,EAAE,QAAQ,EACX,KAAK,EAAE,QAAQ,EACf,GAAG,EAAE,QAAQ,GACZ,cAAc,CAUhB"}
@@ -0,0 +1,157 @@
1
+ // math.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // SPDX-FileCopyrightText: Copyright (c) vis.gl contributors
4
+ import { angle, geographic } from "./math.js";
5
+ /** Attribute boolean output to indexed input constraints before final map
6
+ * projection/resampling. Restore vertices erased by collinear-edge merging.
7
+ * Ambiguous ancestry rejects; target rendering coordinates never identify an
8
+ * original source segment. The caller owns this computational clipping chart.
9
+ */
10
+ export function tracePolygonConstraints(input, output, tolerance = 1e-10, priorities, accept, degenerate) {
11
+ const constraints = input.flatMap((ring, r) => ring.slice(0, -1).map((a, i) => ({ a, b: ring[i + 1], r, i })));
12
+ let work = 0;
13
+ const tick = () => {
14
+ if (++work > 20000000)
15
+ throw new Error('Polygon constraint work limit exceeded');
16
+ };
17
+ const fraction = (p, a, b) => {
18
+ const dx = b[0] - a[0], dy = b[1] - a[1], l = dx * dx + dy * dy;
19
+ return l ? ((p[0] - a[0]) * dx + (p[1] - a[1]) * dy) / l : NaN;
20
+ };
21
+ const on = (p, a, b) => {
22
+ tick();
23
+ const t = fraction(p, a, b), length = Math.hypot(b[0] - a[0], b[1] - a[1]);
24
+ return (length > 0 &&
25
+ t >= -tolerance &&
26
+ t <= 1 + tolerance &&
27
+ Math.hypot(p[0] - a[0] - t * (b[0] - a[0]), p[1] - a[1] - t * (b[1] - a[1])) <=
28
+ tolerance * Math.max(1, length));
29
+ };
30
+ const boxes = constraints.map(c => [
31
+ Math.min(c.a[0], c.b[0]),
32
+ Math.min(c.a[1], c.b[1]),
33
+ Math.max(c.a[0], c.b[0]),
34
+ Math.max(c.a[1], c.b[1])
35
+ ]);
36
+ const build = (ids) => {
37
+ const box = [Infinity, Infinity, -Infinity, -Infinity];
38
+ for (const id of ids) {
39
+ tick();
40
+ const b = boxes[id];
41
+ box[0] = Math.min(box[0], b[0]);
42
+ box[1] = Math.min(box[1], b[1]);
43
+ box[2] = Math.max(box[2], b[2]);
44
+ box[3] = Math.max(box[3], b[3]);
45
+ }
46
+ if (ids.length <= 16)
47
+ return { box, ids };
48
+ const axis = box[2] - box[0] >= box[3] - box[1] ? 0 : 1;
49
+ ids.sort((a, b) => {
50
+ tick();
51
+ return boxes[a][axis] + boxes[a][axis + 2] - boxes[b][axis] - boxes[b][axis + 2];
52
+ });
53
+ const middle = Math.floor(ids.length / 2);
54
+ return { box, left: build(ids.slice(0, middle)), right: build(ids.slice(middle)) };
55
+ };
56
+ const root = build(constraints.map((_, i) => i));
57
+ const padding = tolerance * Math.max(1, root.box[2] - root.box[0], root.box[3] - root.box[1]);
58
+ const query = (a, b) => {
59
+ const box = [
60
+ Math.min(a[0], b[0]) - padding,
61
+ Math.min(a[1], b[1]) - padding,
62
+ Math.max(a[0], b[0]) + padding,
63
+ Math.max(a[1], b[1]) + padding
64
+ ], ids = [];
65
+ const overlaps = (b) => b[0] <= box[2] && b[2] >= box[0] && b[1] <= box[3] && b[3] >= box[1];
66
+ const visit = (node) => {
67
+ tick();
68
+ if (!overlaps(node.box))
69
+ return;
70
+ if (node.ids) {
71
+ for (const id of node.ids) {
72
+ tick();
73
+ if (overlaps(boxes[id]))
74
+ ids.push(id);
75
+ }
76
+ }
77
+ else {
78
+ visit(node.left);
79
+ visit(node.right);
80
+ }
81
+ };
82
+ visit(root);
83
+ return ids.map(id => constraints[id]);
84
+ };
85
+ const rings = [], owners = [];
86
+ for (const ring of output) {
87
+ const points = [];
88
+ for (let i = 1; i < ring.length; i++) {
89
+ const a = ring[i - 1], b = ring[i];
90
+ if (a.every((v, k) => v === b[k]))
91
+ continue;
92
+ const breaks = [{ t: 0, p: a }];
93
+ for (const c of query(a, b))
94
+ if (on(c.a, a, b) && (!accept || accept(c.a))) {
95
+ const t = fraction(c.a, a, b);
96
+ if (t > 1e-12 && t < 1 - 1e-12)
97
+ breaks.push({ t, p: c.a });
98
+ }
99
+ breaks.sort((a, b) => a.t - b.t);
100
+ for (const item of breaks)
101
+ if (!points.length ||
102
+ Math.hypot(...points[points.length - 1].map((v, k) => v - item.p[k])) > 1e-14)
103
+ points.push([...item.p]);
104
+ }
105
+ if (points.length < 3)
106
+ continue;
107
+ points.push([...points[0]]);
108
+ const tags = [];
109
+ for (let i = 1; i < points.length; i++) {
110
+ const a = points[i - 1], b = points[i];
111
+ if (degenerate?.(a, b)) {
112
+ tags.push(null);
113
+ continue;
114
+ }
115
+ let candidates = query(a, b).filter(c => on(a, c.a, c.b) && on(b, c.a, c.b));
116
+ const same = (p, q) => Math.hypot(...p.map((v, k) => v - q[k])) <=
117
+ 64 * Number.EPSILON * Math.max(1, ...p.map(Math.abs), ...q.map(Math.abs));
118
+ const exact = candidates.filter(c => (same(a, c.a) && same(b, c.b)) || (same(a, c.b) && same(b, c.a)));
119
+ if (exact.length)
120
+ candidates = exact;
121
+ if (candidates.some(c => priorities?.[c.r]?.[c.i]?.kind === 'source-boundary'))
122
+ candidates = candidates.filter(c => priorities?.[c.r]?.[c.i]?.kind === 'source-boundary');
123
+ if (candidates.length > 1) {
124
+ const score = (c) => Math.max(...[a, b].map(p => {
125
+ const t = Math.min(1, Math.max(0, fraction(p, c.a, c.b)));
126
+ return Math.hypot(p[0] - c.a[0] - t * (c.b[0] - c.a[0]), p[1] - c.a[1] - t * (c.b[1] - c.a[1]));
127
+ }));
128
+ candidates.sort((a, b) => score(a) - score(b));
129
+ const epsilon = 64 * Number.EPSILON * Math.max(1, ...a.map(Math.abs), ...b.map(Math.abs));
130
+ if (score(candidates[1]) - score(candidates[0]) > epsilon)
131
+ candidates = [candidates[0]];
132
+ else if (Math.hypot(a[0] - b[0], a[1] - b[1]) <= 2 * epsilon)
133
+ candidates = [];
134
+ else
135
+ throw new Error('Ambiguous polygon clipping constraint ancestry');
136
+ }
137
+ tags.push(candidates.length ? [candidates[0].r, candidates[0].i] : null);
138
+ }
139
+ rings.push(points);
140
+ owners.push(tags);
141
+ }
142
+ return { rings, owners };
143
+ }
144
+ /** Compose directed fractions through a known parent edge; never search raw
145
+ * input geometry for an original segment after resampling or projection. */
146
+ export function composePolygonEdge(parent, a, b, start, end) {
147
+ if (parent.kind !== 'source-boundary')
148
+ return { ...parent };
149
+ const v = geographic(a), length = angle(v, geographic(b));
150
+ const parameter = (p) => (length ? Math.min(1, angle(v, geographic(p)) / length) : 0);
151
+ return {
152
+ ...parent,
153
+ t0: parent.t0 + parameter(start) * (parent.t1 - parent.t0),
154
+ t1: parent.t0 + parameter(end) * (parent.t1 - parent.t0)
155
+ };
156
+ }
157
+ //# sourceMappingURL=polygon-constraints.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"polygon-constraints.js","sourceRoot":"","sources":["../../src/discontinuous/polygon-constraints.ts"],"names":[],"mappings":"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"}
@@ -59,6 +59,16 @@ export type PreparedMapGeometry = {
59
59
  paths: PreparedMapVertices & {
60
60
  parts: PreparedMapPathPart[];
61
61
  pathStarts: Uint32Array;
62
+ provenance?: {
63
+ sourceSegmentIndices?: Uint32Array;
64
+ sourceSegmentParameters?: Float64Array;
65
+ sourceVertexIndices?: Uint32Array;
66
+ sourceDistances?: Float64Array;
67
+ distanceRadius?: number;
68
+ /** Per part: source endpoint, coverage boundary, cut, or continuous join. */
69
+ startReasons?: string[];
70
+ endReasons?: string[];
71
+ };
62
72
  };
63
73
  polygons: PreparedMapVertices & {
64
74
  parts: PreparedMapPart[];
@@ -66,11 +76,28 @@ export type PreparedMapGeometry = {
66
76
  ringStarts: Uint32Array;
67
77
  /** Ring offsets for polygon parts, with a terminal sentinel. Outer ring comes first. */
68
78
  polygonStarts: Uint32Array;
79
+ /** One edge from each vertex to the next; repeated closing vertices have kind 0. */
80
+ edgeProvenance?: {
81
+ kinds: Uint8Array;
82
+ sourceRingIndices: Uint32Array;
83
+ sourceSegmentIndices: Uint32Array;
84
+ sourceParameterRanges: Float64Array;
85
+ };
69
86
  };
70
87
  };
71
88
  /** Static preparation controls. This does not triangulate, interpolate attributes or pose meshes. */
72
89
  export type MapPrepareFeaturesOptions = {
73
90
  sampling?: MapSamplingOptions;
91
+ provenance?: {
92
+ sourceSegments?: boolean;
93
+ boundaries?: boolean;
94
+ polygonEdges?: boolean;
95
+ /** Source minor-great-circle distance in meters on the declared sphere. */
96
+ distances?: {
97
+ metric: 'spherical';
98
+ radius: number;
99
+ };
100
+ };
74
101
  /** Project original polygon boundaries separately; default true. */
75
102
  polygonOutlines?: boolean;
76
103
  /** Directed global spherical polygons; original outlines never include atlas connectors. */
@@ -1 +1 @@
1
- {"version":3,"file":"prepare-features.d.ts","sourceRoot":"","sources":["../../src/discontinuous/prepare-features.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"prepare-features.d.ts","sourceRoot":"","sources":["../../src/discontinuous/prepare-features.ts"],"names":[],"mappings":"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"}
@@ -32,6 +32,25 @@ export function prepareMapFeatures(map, features, options = {}) {
32
32
  throw new Error('Expected a feature array');
33
33
  if (options.polygonOutlines !== undefined && typeof options.polygonOutlines !== 'boolean')
34
34
  throw new Error('polygonOutlines must be boolean');
35
+ const provenance = options.provenance;
36
+ if (provenance !== undefined &&
37
+ (!provenance || typeof provenance !== 'object' || Array.isArray(provenance)))
38
+ throw new Error('Unsupported provenance policy');
39
+ if (provenance?.distances !== undefined &&
40
+ (!provenance.distances || typeof provenance.distances !== 'object'))
41
+ throw new Error('Unsupported provenance distance policy');
42
+ if (provenance &&
43
+ (typeof provenance !== 'object' ||
44
+ Object.keys(provenance).some(k => !['sourceSegments', 'boundaries', 'distances', 'polygonEdges'].includes(k)) ||
45
+ [provenance.sourceSegments, provenance.boundaries, provenance.polygonEdges].some(v => v !== undefined && typeof v !== 'boolean') ||
46
+ (provenance.distances &&
47
+ (provenance.distances.metric !== 'spherical' ||
48
+ !Number.isFinite(provenance.distances.radius) ||
49
+ provenance.distances.radius <= 0))))
50
+ throw new Error('Unsupported provenance policy');
51
+ const edgeKinds = [], edgeRings = [], edgeSegments = [], edgeParameters = [];
52
+ const lineage = Boolean(provenance?.sourceSegments || provenance?.boundaries || provenance?.distances);
53
+ const segments = [], parameters = [], originalVertices = [], distances = [], startReasons = [], endReasons = [];
35
54
  const regionIds = map.regions.map(r => r.id), regionIndices = new Map(regionIds.map((id, i) => [id, i]));
36
55
  const points = vertices(), paths = vertices(), polygons = vertices();
37
56
  const pointParts = [], pathParts = [], polygonParts = [];
@@ -52,7 +71,27 @@ export function prepareMapFeatures(map, features, options = {}) {
52
71
  const isRing = ringIndex !== undefined;
53
72
  if (isRing && !closed(line))
54
73
  line.push([...line[0]]);
55
- for (const p of map.projectLine(line, options.sampling)) {
74
+ for (const p of map.projectLine(line, {
75
+ ...options.sampling,
76
+ pathProvenance: lineage,
77
+ pathDistances: Boolean(provenance?.distances),
78
+ pathBoundaries: Boolean(provenance?.boundaries)
79
+ })) {
80
+ if (lineage) {
81
+ if (!p.provenance)
82
+ throw new Error('Map backend does not support path provenance');
83
+ if (provenance?.sourceSegments) {
84
+ segments.push(...p.provenance.segments);
85
+ parameters.push(...p.provenance.parameters);
86
+ originalVertices.push(...p.provenance.vertices);
87
+ }
88
+ if (provenance?.distances)
89
+ distances.push(...p.provenance.angularDistances.map(d => d * provenance.distances.radius));
90
+ if (provenance?.boundaries) {
91
+ startReasons.push(p.provenance.startReason);
92
+ endReasons.push(p.provenance.endReason);
93
+ }
94
+ }
56
95
  append(paths, p.coordinates, p.sourceCoordinates);
57
96
  pathParts.push({
58
97
  ...part(featureIndex, geometryPath, p.regionId),
@@ -68,10 +107,38 @@ export function prepareMapFeatures(map, features, options = {}) {
68
107
  return;
69
108
  const rings = input.map(r => r.map(position));
70
109
  const parts = options.sphericalCuts
71
- ? map.projectGlobalPolygon(rings, { ...options.sampling, ...options.sphericalCuts })
72
- : map.projectPolygon(rings, options.sampling);
110
+ ? map.projectGlobalPolygon(rings, {
111
+ ...options.sampling,
112
+ ...options.sphericalCuts,
113
+ polygonEdgeProvenance: provenance?.polygonEdges
114
+ })
115
+ : map.projectPolygon(rings, {
116
+ ...options.sampling,
117
+ polygonEdgeProvenance: provenance?.polygonEdges
118
+ });
73
119
  for (const p of parts) {
74
120
  for (let i = 0; i < p.coordinates.length; i++) {
121
+ if (provenance?.polygonEdges) {
122
+ const edges = p.edgeProvenance?.[i];
123
+ if (!edges)
124
+ throw new Error('Map backend does not support polygon edge provenance');
125
+ const kinds = [
126
+ 'source-boundary',
127
+ 'coverage-boundary',
128
+ 'chart-cut',
129
+ 'continuous-chart-join'
130
+ ];
131
+ for (const edge of edges) {
132
+ edgeKinds.push(kinds.indexOf(edge.kind) + 1);
133
+ edgeRings.push(edge.ring);
134
+ edgeSegments.push(edge.segment);
135
+ edgeParameters.push(edge.t0, edge.t1);
136
+ }
137
+ edgeKinds.push(0);
138
+ edgeRings.push(0xffffffff);
139
+ edgeSegments.push(0xffffffff);
140
+ edgeParameters.push(0, 0);
141
+ }
75
142
  append(polygons, p.coordinates[i], p.sourceCoordinates[i]);
76
143
  ringStarts.push(polygons.positions.length / 2);
77
144
  }
@@ -137,12 +204,46 @@ export function prepareMapFeatures(map, features, options = {}) {
137
204
  featureIds,
138
205
  regionIds,
139
206
  points: { ...pack(points), parts: pointParts },
140
- paths: { ...pack(paths), parts: pathParts, pathStarts: new Uint32Array(pathStarts) },
207
+ paths: {
208
+ ...pack(paths),
209
+ parts: pathParts,
210
+ pathStarts: new Uint32Array(pathStarts),
211
+ ...(lineage
212
+ ? {
213
+ provenance: {
214
+ ...(provenance?.sourceSegments
215
+ ? {
216
+ sourceSegmentIndices: new Uint32Array(segments),
217
+ sourceSegmentParameters: new Float64Array(parameters),
218
+ sourceVertexIndices: new Uint32Array(originalVertices)
219
+ }
220
+ : {}),
221
+ ...(provenance?.distances
222
+ ? {
223
+ sourceDistances: new Float64Array(distances),
224
+ distanceRadius: provenance.distances.radius
225
+ }
226
+ : {}),
227
+ ...(provenance?.boundaries ? { startReasons, endReasons } : {})
228
+ }
229
+ }
230
+ : {})
231
+ },
141
232
  polygons: {
142
233
  ...pack(polygons),
143
234
  parts: polygonParts,
144
235
  ringStarts: new Uint32Array(ringStarts),
145
- polygonStarts: new Uint32Array(polygonStarts)
236
+ polygonStarts: new Uint32Array(polygonStarts),
237
+ ...(provenance?.polygonEdges
238
+ ? {
239
+ edgeProvenance: {
240
+ kinds: new Uint8Array(edgeKinds),
241
+ sourceRingIndices: new Uint32Array(edgeRings),
242
+ sourceSegmentIndices: new Uint32Array(edgeSegments),
243
+ sourceParameterRanges: new Float64Array(edgeParameters)
244
+ }
245
+ }
246
+ : {})
146
247
  }
147
248
  };
148
249
  }