@drawtonomy/sdk 0.6.0 → 0.8.0

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.
@@ -0,0 +1,370 @@
1
+ // Convert parsed Lanelet2 OSM data into the shape primitives that the
2
+ // drawtonomy editor consumes (points, linestrings, lanes).
3
+ //
4
+ // The output is the intermediate `ImportedShapes` structure used by the
5
+ // editor's import flow — not a full DrawtonomySnapshot — because the editor
6
+ // needs per-shape positioning + bounds to drive its chunked import (camera
7
+ // alignment, progress reporting, etc.). Callers can wrap the result into
8
+ // shapes themselves.
9
+ import { latLonToCanvas } from './osmParser';
10
+ /** Default allocator: monotonic counter per shape kind. */
11
+ export function createShapeIdAllocator() {
12
+ const counters = { point: 0, linestring: 0, lane: 0 };
13
+ return {
14
+ next(kind) {
15
+ const id = `shape:${kind}_${counters[kind]}`;
16
+ counters[kind] += 1;
17
+ return id;
18
+ },
19
+ };
20
+ }
21
+ function getMiddlePoint(points) {
22
+ if (points.length === 0)
23
+ return { x: 0, y: 0 };
24
+ if (points.length === 1)
25
+ return points[0];
26
+ if (points.length === 2) {
27
+ return {
28
+ x: (points[0].x + points[1].x) / 2,
29
+ y: (points[0].y + points[1].y) / 2,
30
+ };
31
+ }
32
+ return points[Math.floor(points.length / 2)];
33
+ }
34
+ /**
35
+ * Decide whether to reverse the left and/or right boundary so the lane is
36
+ * interpreted consistently by the editor.
37
+ *
38
+ * In Lanelet2, the way's node order defines the lane direction (the left
39
+ * boundary's direction is the lane's direction). This routine preserves that
40
+ * direction whenever possible, only flipping a boundary when needed to keep
41
+ * the right-of-left invariant.
42
+ */
43
+ export function alignBoundaries(leftPoints, rightPoints) {
44
+ if (leftPoints.length < 2 || rightPoints.length < 2) {
45
+ return { invertLeft: false, invertRight: false };
46
+ }
47
+ const getEffective = (points, invert) => invert ? [...points].reverse() : points;
48
+ const areParallel = (left, right) => {
49
+ const ls = left[0], le = left[left.length - 1];
50
+ const rs = right[0], re = right[right.length - 1];
51
+ const parallelDist = Math.hypot(ls.x - rs.x, ls.y - rs.y) + Math.hypot(le.x - re.x, le.y - re.y);
52
+ const crossDist = Math.hypot(ls.x - re.x, ls.y - re.y) + Math.hypot(le.x - rs.x, le.y - rs.y);
53
+ return parallelDist <= crossDist;
54
+ };
55
+ const isRightOnRightSide = (left, right) => {
56
+ if (left.length < 2 || right.length < 1)
57
+ return false;
58
+ const leftDir = {
59
+ x: left[left.length - 1].x - left[0].x,
60
+ y: left[left.length - 1].y - left[0].y,
61
+ };
62
+ const leftMid = getMiddlePoint(left);
63
+ const rightMid = getMiddlePoint(right);
64
+ const leftToRight = {
65
+ x: rightMid.x - leftMid.x,
66
+ y: rightMid.y - leftMid.y,
67
+ };
68
+ // Cross product. In screen coordinates (Y points down), the sign is
69
+ // inverted vs. standard math convention; positive means "right is on the
70
+ // right of left".
71
+ const cross = leftDir.x * leftToRight.y - leftDir.y * leftToRight.x;
72
+ if (Math.abs(cross) < 1e-6) {
73
+ // Converging boundaries: fall back to comparing start-to-start.
74
+ const leftToRightStart = {
75
+ x: right[0].x - left[0].x,
76
+ y: right[0].y - left[0].y,
77
+ };
78
+ const crossStart = leftDir.x * leftToRightStart.y - leftDir.y * leftToRightStart.x;
79
+ return crossStart > 0;
80
+ }
81
+ return cross > 0;
82
+ };
83
+ if (areParallel(leftPoints, rightPoints) && isRightOnRightSide(leftPoints, rightPoints)) {
84
+ return { invertLeft: false, invertRight: false };
85
+ }
86
+ const rightInverted = getEffective(rightPoints, true);
87
+ if (areParallel(leftPoints, rightInverted) && isRightOnRightSide(leftPoints, rightInverted)) {
88
+ return { invertLeft: false, invertRight: true };
89
+ }
90
+ const leftInverted = getEffective(leftPoints, true);
91
+ if (areParallel(leftInverted, rightPoints) && isRightOnRightSide(leftInverted, rightPoints)) {
92
+ return { invertLeft: true, invertRight: false };
93
+ }
94
+ if (areParallel(leftInverted, rightInverted) && isRightOnRightSide(leftInverted, rightInverted)) {
95
+ return { invertLeft: true, invertRight: true };
96
+ }
97
+ if (areParallel(leftPoints, rightPoints)) {
98
+ return { invertLeft: false, invertRight: false };
99
+ }
100
+ if (areParallel(leftPoints, rightInverted)) {
101
+ return { invertLeft: false, invertRight: true };
102
+ }
103
+ return { invertLeft: false, invertRight: false };
104
+ }
105
+ /**
106
+ * Detect lane connectivity (next/prev) by matching the boundary endpoints of
107
+ * one lane to the start of another. Runs in O(n) using start/end node hash
108
+ * maps.
109
+ */
110
+ function detectLaneConnections(laneInfos) {
111
+ const connections = new Map();
112
+ laneInfos.forEach(info => {
113
+ connections.set(info.laneId, { next: [], prev: [] });
114
+ });
115
+ const getEffectiveNodes = (lane) => {
116
+ const leftStart = lane.invertLeft ? lane.leftLastNode : lane.leftFirstNode;
117
+ const leftEnd = lane.invertLeft ? lane.leftFirstNode : lane.leftLastNode;
118
+ const rightStart = lane.invertRight ? lane.rightLastNode : lane.rightFirstNode;
119
+ const rightEnd = lane.invertRight ? lane.rightFirstNode : lane.rightLastNode;
120
+ return { leftStart, leftEnd, rightStart, rightEnd };
121
+ };
122
+ const startNodeMap = new Map();
123
+ const endNodeMap = new Map();
124
+ for (const lane of laneInfos) {
125
+ const nodes = getEffectiveNodes(lane);
126
+ const startKey = `${nodes.leftStart}|${nodes.rightStart}`;
127
+ const endKey = `${nodes.leftEnd}|${nodes.rightEnd}`;
128
+ if (!startNodeMap.has(startKey))
129
+ startNodeMap.set(startKey, []);
130
+ startNodeMap.get(startKey).push(lane.laneId);
131
+ if (!endNodeMap.has(endKey))
132
+ endNodeMap.set(endKey, []);
133
+ endNodeMap.get(endKey).push(lane.laneId);
134
+ }
135
+ for (const lane of laneInfos) {
136
+ const nodes = getEffectiveNodes(lane);
137
+ const endKey = `${nodes.leftEnd}|${nodes.rightEnd}`;
138
+ const nextLaneIds = startNodeMap.get(endKey);
139
+ if (!nextLaneIds)
140
+ continue;
141
+ const conn = connections.get(lane.laneId);
142
+ for (const nextLaneId of nextLaneIds) {
143
+ if (nextLaneId === lane.laneId)
144
+ continue;
145
+ if (!conn.next.includes(nextLaneId)) {
146
+ conn.next.push(nextLaneId);
147
+ const nextConn = connections.get(nextLaneId);
148
+ if (!nextConn.prev.includes(lane.laneId)) {
149
+ nextConn.prev.push(lane.laneId);
150
+ }
151
+ }
152
+ }
153
+ }
154
+ return connections;
155
+ }
156
+ function emptyBounds() {
157
+ return {
158
+ minX: Infinity,
159
+ maxX: -Infinity,
160
+ minY: Infinity,
161
+ maxY: -Infinity,
162
+ centerX: 0,
163
+ centerY: 0,
164
+ width: 0,
165
+ height: 0,
166
+ };
167
+ }
168
+ /**
169
+ * Convert parsed OSM data into editor-ready point/linestring/lane records.
170
+ *
171
+ * Pass `selectedLaneIds` to restrict to a subset of lanelet relations
172
+ * (selective import); leave it `undefined` to import every `type=lanelet`
173
+ * relation.
174
+ */
175
+ export function osmToShapes(osmData, options = {}) {
176
+ const idAllocator = options.idAllocator ?? createShapeIdAllocator();
177
+ const result = {
178
+ points: [],
179
+ linestrings: [],
180
+ lanes: [],
181
+ bounds: emptyBounds(),
182
+ };
183
+ // Compute the projection center.
184
+ let minLat = Infinity, maxLat = -Infinity;
185
+ let minLon = Infinity, maxLon = -Infinity;
186
+ osmData.nodes.forEach(node => {
187
+ if (node.lat < minLat)
188
+ minLat = node.lat;
189
+ if (node.lat > maxLat)
190
+ maxLat = node.lat;
191
+ if (node.lon < minLon)
192
+ minLon = node.lon;
193
+ if (node.lon > maxLon)
194
+ maxLon = node.lon;
195
+ });
196
+ // For files emitted by drawtonomy, honor the embedded origin so page
197
+ // coordinates round-trip exactly. Otherwise center on the bbox.
198
+ const centerLat = osmData.drawtonomyOrigin?.lat ?? (minLat + maxLat) / 2;
199
+ const centerLon = osmData.drawtonomyOrigin?.lon ?? (minLon + maxLon) / 2;
200
+ result.originLatLon = { lat: centerLat, lon: centerLon };
201
+ const osmNodeToPointId = new Map();
202
+ const osmWayToLinestringId = new Map();
203
+ const pointIdToPoint = new Map();
204
+ const linestringIdToLinestring = new Map();
205
+ // Only `type=lanelet` relations become lanes. Other relation types
206
+ // (regulatory_element, multipolygon, etc.) are preserved verbatim via the
207
+ // OSM sidecar.
208
+ let laneletRelations = osmData.relations.filter(r => r.tags.type === 'lanelet');
209
+ if (options.selectedLaneIds) {
210
+ const selected = new Set(options.selectedLaneIds);
211
+ laneletRelations = laneletRelations.filter(r => selected.has(r.id));
212
+ }
213
+ // Collect ways and nodes referenced by the chosen lanelets.
214
+ const usedWayIds = new Set();
215
+ const usedNodeIds = new Set();
216
+ for (const relation of laneletRelations) {
217
+ for (const member of relation.members) {
218
+ if (member.type === 'way')
219
+ usedWayIds.add(member.ref);
220
+ }
221
+ }
222
+ for (const wayId of usedWayIds) {
223
+ const way = osmData.ways.get(wayId);
224
+ if (!way)
225
+ continue;
226
+ for (const ref of way.nodeRefs)
227
+ usedNodeIds.add(ref);
228
+ }
229
+ // Materialize points (one per OSM node, shared across boundaries).
230
+ for (const nodeId of usedNodeIds) {
231
+ const node = osmData.nodes.get(nodeId);
232
+ if (!node)
233
+ continue;
234
+ const { x, y } = latLonToCanvas(node.lat, node.lon, centerLat, centerLon);
235
+ const pointId = idAllocator.next('point');
236
+ osmNodeToPointId.set(nodeId, pointId);
237
+ const data = { id: pointId, x, y, osmId: nodeId };
238
+ result.points.push(data);
239
+ pointIdToPoint.set(pointId, data);
240
+ }
241
+ // Materialize linestrings (one per used way).
242
+ for (const wayId of usedWayIds) {
243
+ const way = osmData.ways.get(wayId);
244
+ if (!way)
245
+ continue;
246
+ const pointIds = [];
247
+ for (const nodeRef of way.nodeRefs) {
248
+ const pid = osmNodeToPointId.get(nodeRef);
249
+ if (pid)
250
+ pointIds.push(pid);
251
+ }
252
+ if (pointIds.length < 2)
253
+ continue;
254
+ const firstPoint = pointIdToPoint.get(pointIds[0]);
255
+ if (!firstPoint)
256
+ continue;
257
+ const linestringId = idAllocator.next('linestring');
258
+ osmWayToLinestringId.set(wayId, linestringId);
259
+ const data = {
260
+ id: linestringId,
261
+ x: firstPoint.x,
262
+ y: firstPoint.y,
263
+ pointIds,
264
+ osmId: wayId,
265
+ attributes: {
266
+ type: way.tags.type || 'line_thin',
267
+ subtype: way.tags.subtype || 'solid',
268
+ width: way.tags.width || '0.2',
269
+ },
270
+ };
271
+ result.linestrings.push(data);
272
+ linestringIdToLinestring.set(linestringId, data);
273
+ }
274
+ // Materialize lanes and collect info for connectivity detection.
275
+ const laneInfos = [];
276
+ for (const relation of laneletRelations) {
277
+ let leftWayId = null;
278
+ let rightWayId = null;
279
+ let leftBoundaryId = null;
280
+ let rightBoundaryId = null;
281
+ for (const member of relation.members) {
282
+ if (member.type !== 'way')
283
+ continue;
284
+ const linestringId = osmWayToLinestringId.get(member.ref);
285
+ if (!linestringId)
286
+ continue;
287
+ if (member.role === 'left') {
288
+ leftBoundaryId = linestringId;
289
+ leftWayId = member.ref;
290
+ }
291
+ else if (member.role === 'right') {
292
+ rightBoundaryId = linestringId;
293
+ rightWayId = member.ref;
294
+ }
295
+ }
296
+ if (!leftBoundaryId || !rightBoundaryId || !leftWayId || !rightWayId)
297
+ continue;
298
+ const leftWay = osmData.ways.get(leftWayId);
299
+ const rightWay = osmData.ways.get(rightWayId);
300
+ const leftLinestring = linestringIdToLinestring.get(leftBoundaryId);
301
+ const rightLinestring = linestringIdToLinestring.get(rightBoundaryId);
302
+ if (!leftWay || !rightWay || !leftLinestring || !rightLinestring)
303
+ continue;
304
+ const getPointCoords = (pointIds) => pointIds
305
+ .map(pid => pointIdToPoint.get(pid))
306
+ .filter((p) => p !== undefined)
307
+ .map(p => ({ x: p.x, y: p.y }));
308
+ const { invertLeft, invertRight } = alignBoundaries(getPointCoords(leftLinestring.pointIds), getPointCoords(rightLinestring.pointIds));
309
+ const laneId = idAllocator.next('lane');
310
+ laneInfos.push({
311
+ osmId: relation.id,
312
+ laneId,
313
+ leftWayId,
314
+ rightWayId,
315
+ leftFirstNode: leftWay.nodeRefs[0],
316
+ leftLastNode: leftWay.nodeRefs[leftWay.nodeRefs.length - 1],
317
+ rightFirstNode: rightWay.nodeRefs[0],
318
+ rightLastNode: rightWay.nodeRefs[rightWay.nodeRefs.length - 1],
319
+ invertLeft,
320
+ invertRight,
321
+ });
322
+ result.lanes.push({
323
+ id: laneId,
324
+ x: leftLinestring.x,
325
+ y: leftLinestring.y,
326
+ leftBoundaryId,
327
+ rightBoundaryId,
328
+ invertLeft,
329
+ invertRight,
330
+ osmId: relation.id,
331
+ attributes: {
332
+ type: 'lanelet',
333
+ subtype: relation.tags.subtype || 'road',
334
+ location: relation.tags.location || 'urban',
335
+ one_way: relation.tags.one_way || 'yes',
336
+ speed_limit: relation.tags.speed_limit || '30',
337
+ turn_direction: relation.tags.turn_direction || 'straight',
338
+ },
339
+ next: [],
340
+ prev: [],
341
+ });
342
+ }
343
+ const connections = detectLaneConnections(laneInfos);
344
+ for (const lane of result.lanes) {
345
+ const conn = connections.get(lane.id);
346
+ if (conn) {
347
+ lane.next = conn.next;
348
+ lane.prev = conn.prev;
349
+ }
350
+ }
351
+ // Bounds across all materialized points.
352
+ for (const point of result.points) {
353
+ if (point.x < result.bounds.minX)
354
+ result.bounds.minX = point.x;
355
+ if (point.x > result.bounds.maxX)
356
+ result.bounds.maxX = point.x;
357
+ if (point.y < result.bounds.minY)
358
+ result.bounds.minY = point.y;
359
+ if (point.y > result.bounds.maxY)
360
+ result.bounds.maxY = point.y;
361
+ }
362
+ if (result.points.length > 0) {
363
+ result.bounds.width = result.bounds.maxX - result.bounds.minX;
364
+ result.bounds.height = result.bounds.maxY - result.bounds.minY;
365
+ result.bounds.centerX = result.bounds.minX + result.bounds.width / 2;
366
+ result.bounds.centerY = result.bounds.minY + result.bounds.height / 2;
367
+ }
368
+ return result;
369
+ }
370
+ //# sourceMappingURL=osmToShapes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"osmToShapes.js","sourceRoot":"","sources":["../../src/exporter/osmToShapes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Geographic anchor expressed as WGS84 lat/lon (and optional heading).
3
+ * Used to derive a local PROJ string anchored at this point.
4
+ */
5
+ export interface GeoOrigin {
6
+ lat: number;
7
+ lon: number;
8
+ /** Heading of the local page +x axis clockwise from north, in radians. */
9
+ headingRad?: number;
10
+ }
11
+ /**
12
+ * Fallback PROJ string used when no geographic origin is available. It still
13
+ * declares WGS84 explicitly so downstream tools see a defined CRS rather than
14
+ * an empty <geoReference>.
15
+ */
16
+ export declare const FALLBACK_GEO_REFERENCE = "+proj=longlat +datum=WGS84 +no_defs";
17
+ /**
18
+ * Build a Transverse Mercator (tmerc) PROJ.4 string anchored at the given
19
+ * lat/lon. tmerc is preferred over UTM for small-area maps (sub-km) because
20
+ * it avoids UTM zone boundary distortion and minimises error near the origin.
21
+ */
22
+ export declare function latLonToTmercProj(lat: number, lon: number): string;
23
+ /**
24
+ * Build a UTM PROJ.4 string for the UTM zone containing the given lon. The
25
+ * hemisphere is selected from the sign of lat. Use this when the consumer
26
+ * expects a globally-named UTM zone rather than a tmerc-at-origin.
27
+ */
28
+ export declare function latLonToUtmProj(lat: number, lon: number): string;
29
+ /**
30
+ * Choose a PROJ.4 string for the given origin. Defaults to tmerc-at-origin,
31
+ * which is appropriate for the small-area maps that this SDK typically
32
+ * exports. Falls back to a generic WGS84 longlat string when origin is absent
33
+ * or malformed.
34
+ */
35
+ export declare function originToProjString(origin: GeoOrigin | undefined | null, method?: 'tmerc' | 'utm'): string;
36
+ //# sourceMappingURL=projection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projection.d.ts","sourceRoot":"","sources":["../../src/exporter/projection.ts"],"names":[],"mappings":"AAUA;;;GAGG;AACH,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,MAAM,CAAA;IACX,0EAA0E;IAC1E,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,wCAAwC,CAAA;AAE3E;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAYlE;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAMhE;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,IAAI,EACpC,MAAM,GAAE,OAAO,GAAG,KAAe,GAChC,MAAM,CAaR"}
@@ -0,0 +1,65 @@
1
+ // PROJ.4 string helpers used by the OpenDRIVE exporter to populate
2
+ // <header><geoReference>.
3
+ //
4
+ // OpenDRIVE 1.8 expects the <geoReference> child of <header> to declare the
5
+ // coordinate reference system as a PROJ.4 string (or similar). Without it,
6
+ // downstream tools (esmini, RoadRunner, CARLA, asam-qc-opendrive) cannot
7
+ // interpret the map's coordinates consistently.
8
+ //
9
+ // No external dependencies — these are pure formatting helpers.
10
+ /**
11
+ * Fallback PROJ string used when no geographic origin is available. It still
12
+ * declares WGS84 explicitly so downstream tools see a defined CRS rather than
13
+ * an empty <geoReference>.
14
+ */
15
+ export const FALLBACK_GEO_REFERENCE = '+proj=longlat +datum=WGS84 +no_defs';
16
+ /**
17
+ * Build a Transverse Mercator (tmerc) PROJ.4 string anchored at the given
18
+ * lat/lon. tmerc is preferred over UTM for small-area maps (sub-km) because
19
+ * it avoids UTM zone boundary distortion and minimises error near the origin.
20
+ */
21
+ export function latLonToTmercProj(lat, lon) {
22
+ return [
23
+ '+proj=tmerc',
24
+ `+lat_0=${lat.toFixed(8)}`,
25
+ `+lon_0=${lon.toFixed(8)}`,
26
+ '+k=1',
27
+ '+x_0=0',
28
+ '+y_0=0',
29
+ '+datum=WGS84',
30
+ '+units=m',
31
+ '+no_defs',
32
+ ].join(' ');
33
+ }
34
+ /**
35
+ * Build a UTM PROJ.4 string for the UTM zone containing the given lon. The
36
+ * hemisphere is selected from the sign of lat. Use this when the consumer
37
+ * expects a globally-named UTM zone rather than a tmerc-at-origin.
38
+ */
39
+ export function latLonToUtmProj(lat, lon) {
40
+ const zone = Math.floor((lon + 180) / 6) + 1;
41
+ const parts = ['+proj=utm', `+zone=${zone}`];
42
+ if (lat < 0)
43
+ parts.push('+south');
44
+ parts.push('+datum=WGS84', '+units=m', '+no_defs');
45
+ return parts.join(' ');
46
+ }
47
+ /**
48
+ * Choose a PROJ.4 string for the given origin. Defaults to tmerc-at-origin,
49
+ * which is appropriate for the small-area maps that this SDK typically
50
+ * exports. Falls back to a generic WGS84 longlat string when origin is absent
51
+ * or malformed.
52
+ */
53
+ export function originToProjString(origin, method = 'tmerc') {
54
+ if (!origin ||
55
+ typeof origin.lat !== 'number' ||
56
+ typeof origin.lon !== 'number' ||
57
+ !Number.isFinite(origin.lat) ||
58
+ !Number.isFinite(origin.lon)) {
59
+ return FALLBACK_GEO_REFERENCE;
60
+ }
61
+ return method === 'utm'
62
+ ? latLonToUtmProj(origin.lat, origin.lon)
63
+ : latLonToTmercProj(origin.lat, origin.lon);
64
+ }
65
+ //# sourceMappingURL=projection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projection.js","sourceRoot":"","sources":["../../src/exporter/projection.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,0BAA0B;AAC1B,EAAE;AACF,4EAA4E;AAC5E,2EAA2E;AAC3E,yEAAyE;AACzE,gDAAgD;AAChD,EAAE;AACF,gEAAgE;AAahE;;;;GAIG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,qCAAqC,CAAA;AAE3E;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,GAAW,EAAE,GAAW;IACxD,OAAO;QACL,aAAa;QACb,UAAU,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;QAC1B,UAAU,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;QAC1B,MAAM;QACN,QAAQ;QACR,QAAQ;QACR,cAAc;QACd,UAAU;QACV,UAAU;KACX,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AACb,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,GAAW,EAAE,GAAW;IACtD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAA;IAC5C,MAAM,KAAK,GAAG,CAAC,WAAW,EAAE,SAAS,IAAI,EAAE,CAAC,CAAA;IAC5C,IAAI,GAAG,GAAG,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IACjC,KAAK,CAAC,IAAI,CAAC,cAAc,EAAE,UAAU,EAAE,UAAU,CAAC,CAAA;IAClD,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AACxB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAChC,MAAoC,EACpC,SAA0B,OAAO;IAEjC,IACE,CAAC,MAAM;QACP,OAAO,MAAM,CAAC,GAAG,KAAK,QAAQ;QAC9B,OAAO,MAAM,CAAC,GAAG,KAAK,QAAQ;QAC9B,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC;QAC5B,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,EAC5B,CAAC;QACD,OAAO,sBAAsB,CAAA;IAC/B,CAAC;IACD,OAAO,MAAM,KAAK,KAAK;QACrB,CAAC,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC;QACzC,CAAC,CAAC,iBAAiB,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,CAAA;AAC/C,CAAC"}
package/dist/types.d.ts CHANGED
@@ -192,6 +192,17 @@ export interface DrawtonomySnapshot {
192
192
  y: number;
193
193
  z: number;
194
194
  };
195
+ /**
196
+ * Optional geographic anchor for the scene, expressed as WGS84 lat/lon plus
197
+ * an optional heading of the page +x axis clockwise from north (radians).
198
+ * When present, the OpenDRIVE exporter uses this to populate
199
+ * <header><geoReference> with a PROJ.4 string.
200
+ */
201
+ origin?: {
202
+ lat: number;
203
+ lon: number;
204
+ headingRad?: number;
205
+ };
195
206
  }
196
207
  export type ExtensionCapability = 'shapes:write' | 'shapes:read' | 'snapshot:read' | 'snapshot:export' | 'viewport:read' | 'selection:read' | 'ui:panel' | 'ui:notify';
197
208
  export interface ExtensionManifest {
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,OAAO,GAAG,MAAM,CAAA;AAE5B,MAAM,WAAW,SAAS,CAAC,IAAI,SAAS,MAAM,GAAG,MAAM,EAAE,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACtF,EAAE,EAAE,OAAO,CAAA;IACX,IAAI,EAAE,IAAI,CAAA;IACV,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,KAAK,CAAA;CACb;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,OAAO,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,EAAE,CAAA;IAClB,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,UAAU,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAA;IAC7C,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7B,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI,CAAA;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,IAAI,CAAA;IAC5F,SAAS,CAAC,EAAE;QACV,QAAQ,EAAE,MAAM,CAAA;QAChB,MAAM,EAAE,MAAM,CAAA;QACd,UAAU,EAAE,MAAM,CAAA;QAClB,YAAY,CAAC,EAAE,MAAM,CAAA;KACtB,CAAA;IACD,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;CACxB;AAED,MAAM,WAAW,SAAS;IACxB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7B,eAAe,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,UAAU,EAAE,OAAO,CAAA;IACnB,WAAW,EAAE,OAAO,CAAA;IACpB,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI,CAAA;IACvB,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IACnE,IAAI,EAAE,MAAM,EAAE,CAAA;IACd,IAAI,EAAE,MAAM,EAAE,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,YAAY;IAC3B,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,UAAU,EAAE;QAAE,IAAI,EAAE,SAAS,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAA;IAChD,KAAK,EAAE,MAAM,CAAA;IACb,UAAU,EAAE,MAAM,CAAA;IAClB,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAED,MAAM,WAAW,eAAe;IAC9B,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,UAAU,EAAE;QAAE,IAAI,EAAE,YAAY,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAA;IACnD,KAAK,EAAE,MAAM,CAAA;IACb,UAAU,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CACxB;AAED,MAAM,WAAW,YAAY;IAC3B,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CACxB;AAED,MAAM,WAAW,UAAU;IACzB,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,SAAS,EAAE,MAAM,CAAA;IACjB,YAAY,EAAE,MAAM,CAAA;IACpB,aAAa,EAAE,MAAM,CAAA;CACtB;AAED,MAAM,WAAW,SAAS;IACxB,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAA;IACtC,QAAQ,EAAE,OAAO,CAAA;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,EAAE,CAAA;IAClB,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACnC,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI,CAAA;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,IAAI,CAAA;CAC7F;AAED,MAAM,WAAW,iBAAiB;IAChC,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,KAAK,EAAE,MAAM,CAAA;IACb,kEAAkE;IAClE,KAAK,EAAE,MAAM,CAAA;IACb,yDAAyD;IACzD,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,UAAU,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACxE,KAAK,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,cAAc;IAC7B,uDAAuD;IACvD,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,qDAAqD;IACrD,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,6CAA6C;IAC7C,cAAc,EAAE,MAAM,CAAA;IACtB,kCAAkC;IAClC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,+BAA+B;IAC/B,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,UAAU,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACxE,KAAK,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,KAAK,CAAC;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACvC,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,UAAU,EAAE,OAAO,CAAA;CACpB;AAGD,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,SAAS,EAAE,CAAA;IACnB,MAAM,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CAC7C;AAGD,MAAM,MAAM,mBAAmB,GAC3B,cAAc,GACd,aAAa,GACb,eAAe,GACf,iBAAiB,GACjB,eAAe,GACf,gBAAgB,GAChB,UAAU,GACV,WAAW,CAAA;AAGf,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IACtC,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,YAAY,EAAE,mBAAmB,EAAE,CAAA;IACnC,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAGD,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK,GAAG,gBAAgB,GAAG,MAAM,CAAA;AAE7F,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAA;IACjB,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;CACjB;AAGD,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;IAChB,GAAG,CAAC,EAAE,MAAM,EAAE,CAAA;IACd,YAAY,CAAC,EAAE,OAAO,CAAA;CACvB;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAC/B;AAED,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,CAAA;IACnB,mBAAmB,EAAE,mBAAmB,EAAE,CAAA;IAC1C,QAAQ,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;CAC5C"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@drawtonomy/sdk",
3
- "version": "0.6.0",
3
+ "version": "0.8.0",
4
4
  "description": "SDK for building drawtonomy extensions",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -15,6 +15,11 @@
15
15
  "dist",
16
16
  "README.md"
17
17
  ],
18
+ "scripts": {
19
+ "build": "tsc",
20
+ "test": "vitest run",
21
+ "prepublishOnly": "pnpm build"
22
+ },
18
23
  "keywords": [
19
24
  "drawtonomy",
20
25
  "extension",
@@ -27,9 +32,5 @@
27
32
  "jsdom": "29.0.1",
28
33
  "typescript": "5.9.3",
29
34
  "vitest": "4.1.2"
30
- },
31
- "scripts": {
32
- "build": "tsc",
33
- "test": "vitest run"
34
35
  }
35
- }
36
+ }