@trailstash/ultra 3.1.2 → 3.2.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.
Binary file
Binary file
package/README.md CHANGED
@@ -6,7 +6,7 @@ JS](https://maplibre.org).
6
6
  ## Deployments
7
7
 
8
8
  - Production version - [overpass-ultra.us](https://overpass-ultra.us) <small>([config](https://gitlab.com/trailstash/overpass-ultra/-/blob/main/config.js))</small>
9
- - Development Version - [ultra.trailsta.sh](https://ultra.trailsta.sh) <small>([config](./config.js))</small>
9
+ - Development Version - [ultra.trailsta.sh](https://ultra.trailsta.sh) <small>([config](https://gitlab.com/trailstash/ultra/-/blob/main/config.js))</small>
10
10
  - OHM version - [ohm.overpass-ultra.us](https://ohm.overpass-ultra.us) <small>([config](https://gitlab.com/trailstash/ohm-ultra/-/blob/main/config.js))</small>
11
11
 
12
12
  ## Documentation
Binary file
package/cli/build.js CHANGED
@@ -2,9 +2,10 @@ import fs from "fs";
2
2
  import path from "path";
3
3
  import process from "process";
4
4
  import { build } from "esbuild";
5
- import { Command, Flags } from "@oclif/core";
5
+ import { Args, Command, Flags } from "@oclif/core";
6
6
  import { copy } from "esbuild-plugin-copy";
7
7
  import { Liquid } from "liquidjs";
8
+ import { parseSettings } from "../lib/settings.js";
8
9
 
9
10
  const engine = new Liquid();
10
11
  export const getHTMLContext = async (configFile) => {
@@ -15,6 +16,19 @@ export const getHTMLContext = async (configFile) => {
15
16
  return { title, description, url, mastodon };
16
17
  };
17
18
 
19
+ export const buildConfigFromQuery = async (config, query) => {
20
+ const querySettings = parseSettings(fs.readFileSync(query));
21
+ const { defaultMode, modes } = await import(config);
22
+ const settings = {
23
+ ...modes.map.settings,
24
+ ...querySettings,
25
+ loadSettingsFromQueryParams: false,
26
+ };
27
+ const newConfig = `export const defaultMode = "map";
28
+ export const modes = {map: {settings: ${JSON.stringify(settings, null, 2)}}};`;
29
+ return `data:text/javascript;base64,${btoa(newConfig)}`;
30
+ };
31
+
18
32
  export const ultraRoot = path.dirname(
19
33
  path.dirname(new URL(import.meta.url).pathname),
20
34
  );
@@ -52,14 +66,24 @@ export default class Build extends Command {
52
66
  default: path.join(process.cwd(), "/config.js"),
53
67
  }),
54
68
  };
69
+ static args = {
70
+ query: Args.file({
71
+ description: "A query to build an interactive map for",
72
+ }),
73
+ };
55
74
 
56
75
  static description = `Build a release of Ultra`;
57
76
 
58
77
  async run() {
59
- const {
78
+ let {
60
79
  flags: { config },
80
+ args: { query },
61
81
  } = await this.parse(Build);
62
82
 
83
+ if (query) {
84
+ config = await buildConfigFromQuery(config, query);
85
+ }
86
+
63
87
  const html = engine.parseAndRenderSync(
64
88
  fs.readFileSync(path.join(ultraRoot, "index.html")),
65
89
  await getHTMLContext(config),
package/cli/serve.js CHANGED
@@ -1,8 +1,13 @@
1
1
  import fs from "fs";
2
2
  import path from "path";
3
3
  import { context } from "esbuild";
4
- import { Command, Flags } from "@oclif/core";
5
- import Build, { buildOptions, getHTMLContext, ultraRoot } from "./build.js";
4
+ import { Args, Command, Flags } from "@oclif/core";
5
+ import Build, {
6
+ buildConfigFromQuery,
7
+ buildOptions,
8
+ getHTMLContext,
9
+ ultraRoot,
10
+ } from "./build.js";
6
11
  import { Liquid } from "liquidjs";
7
12
 
8
13
  const engine = new Liquid();
@@ -22,15 +27,24 @@ export default class Serve extends Command {
22
27
  parse: parseInt,
23
28
  }),
24
29
  };
30
+ static args = {
31
+ query: Args.file({
32
+ description: "A query to build an interactive map for",
33
+ }),
34
+ };
25
35
 
26
36
  static description = `Run an Ultra development server`;
27
37
 
28
38
  async run() {
29
- const {
39
+ let {
30
40
  args: { query },
31
41
  flags: { config, host, port },
32
42
  } = await this.parse(Serve);
33
43
 
44
+ if (query) {
45
+ config = await buildConfigFromQuery(config, query);
46
+ }
47
+
34
48
  const html = engine.parseAndRenderSync(
35
49
  fs.readFileSync(path.join(ultraRoot, "index.html")),
36
50
  await getHTMLContext(config),
@@ -0,0 +1,78 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <svg
3
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
4
+ xmlns:cc="http://creativecommons.org/ns#"
5
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
6
+ xmlns:svg="http://www.w3.org/2000/svg"
7
+ xmlns="http://www.w3.org/2000/svg"
8
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
9
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
10
+ height="22"
11
+ width="22"
12
+ viewBox="0 0 704 704"
13
+ version="1.1"
14
+ id="svg4"
15
+ sodipodi:docname="logo.svg"
16
+ inkscape:version="1.0.2 (e86c870879, 2021-01-15)">
17
+ <metadata
18
+ id="metadata8">
19
+ <rdf:RDF>
20
+ <cc:Work
21
+ rdf:about="">
22
+ <dc:format>image/svg+xml</dc:format>
23
+ <dc:type
24
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
25
+ </cc:Work>
26
+ </rdf:RDF>
27
+ </metadata>
28
+ <defs
29
+ id="defs8" />
30
+ <sodipodi:namedview
31
+ id="namedview6"
32
+ pagecolor="#ffffff"
33
+ bordercolor="#666666"
34
+ borderopacity="1.0"
35
+ inkscape:pageshadow="2"
36
+ inkscape:pageopacity="0.0"
37
+ inkscape:pagecheckerboard="0"
38
+ showgrid="false"
39
+ inkscape:zoom="23.748482"
40
+ inkscape:cx="0.28180161"
41
+ inkscape:cy="7.5070578"
42
+ inkscape:window-width="2000"
43
+ inkscape:window-height="1253"
44
+ inkscape:window-x="0"
45
+ inkscape:window-y="0"
46
+ inkscape:window-maximized="1"
47
+ inkscape:current-layer="svg4"
48
+ inkscape:document-rotation="0" />
49
+ <!--!Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.-->
50
+ <path
51
+ d="M 0,352.00011 C 0,157.59567 157.59578,1.1113408e-4 352,1.1113408e-4 546.40422,1.1113408e-4 704,157.59567 704,352.00011 c 0,194.40445 -157.59578,352 -352,352 -194.40422,0 -352,-157.59555 -352,-352 z"
52
+ id="path2"
53
+ style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke-width:1.375"
54
+ sodipodi:nodetypes="sssss" />
55
+ <path
56
+ style="fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:#ff0000;stroke-width:0.968366;stroke-opacity:1"
57
+ d="m 562.1348,394.20034 c -24.36253,-6.09555 -38.87589,-31.23955 -31.57391,-54.70088 9.69205,-31.1406 48.93706,-41.17209 71.5572,-18.29088 9.2616,9.3685 12.98726,18.20169 12.98726,30.79153 0,12.58984 -3.72548,21.42303 -12.98726,30.79153 -10.4064,10.5265 -25.87191,14.93938 -39.98329,11.4087 z"
58
+ id="path2039" />
59
+ <path
60
+ style="fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:#ff0000;stroke-width:0.968366;stroke-opacity:1"
61
+ d="m 340.66013,570.73635 c -21.70562,-2.79677 -44.61211,-16.08209 -57.89509,-33.57808 -6.30391,-8.30334 -12.93817,-21.77501 -15.59751,-31.67254 -2.75361,-10.24844 -3.04204,-30.65931 -0.57272,-40.52935 3.95574,-15.81141 11.04495,-28.9471 21.84961,-40.48556 15.42529,-16.47286 35.63618,-26.11684 57.85929,-27.60858 l 8.82916,-0.59267 44.4121,-100.73482 c 24.42665,-55.40414 45.59793,-102.60464 47.04724,-104.89 3.22036,-5.07763 8.88677,-9.30546 16.14514,-12.04574 11.16289,-4.21442 26.27231,-0.396 34.21123,8.64611 6.66015,7.58552 9.92266,19.75235 7.68227,28.64966 -0.61248,2.43264 -21.16026,49.98921 -45.66166,105.68124 l -44.54792,101.25828 3.94794,4.48511 c 29.65793,33.69321 27.52934,86.07857 -4.81183,118.41974 -14.01168,14.01167 -31.60929,22.57355 -51.5307,25.07147 -9.04172,1.13388 -12.07327,1.12332 -21.36656,-0.0748 z"
62
+ id="path2189" />
63
+ <path
64
+ style="fill:#ffffff;stroke-width:0.0249354;stroke-linejoin:round;stroke-dashoffset:3.8;fill-opacity:1"
65
+ d="M 3.8030177,12.323546 C 3.3782561,12.22055 2.9749708,11.854662 2.8417976,11.451463 2.669399,10.929505 2.7856098,10.430606 3.1694843,10.044689 c 0.5418431,-0.5447266 1.3695005,-0.5440222 1.9147492,0.0016 0.2687844,0.268983 0.3958216,0.575086 0.3958216,0.953754 0,0.241343 -0.043233,0.415026 -0.1586014,0.637158 -0.1703677,0.32803 -0.521472,0.602511 -0.8782964,0.686624 -0.1724295,0.04065 -0.4718397,0.0405 -0.6401396,-3.08e-4 z"
66
+ id="path10"
67
+ transform="scale(32)" />
68
+ <path
69
+ style="fill:#ffffff;stroke-width:0.0249354;stroke-linejoin:round;stroke-dashoffset:3.8;fill-opacity:1"
70
+ d="M 5.9532325,7.5284272 C 5.5819707,7.4573167 5.2565902,7.2410423 5.0479378,6.9266941 4.9364416,6.7587179 4.8436181,6.4807429 4.8280826,6.2683021 4.7822526,5.6415959 5.2392938,5.0222238 5.8643213,4.8640142 6.0326362,4.8214096 6.3364212,4.8214763 6.504317,4.8641547 6.8739312,4.9581091 7.2382341,5.246434 7.4006,5.5735113 7.8343052,6.4471873 7.2474771,7.4729318 6.2723522,7.5456292 6.1726455,7.5530625 6.0462921,7.5462521 5.9532325,7.5284272 Z"
71
+ id="path12"
72
+ transform="scale(32)" />
73
+ <path
74
+ style="fill:#ffffff;stroke-width:0.0249354;stroke-linejoin:round;stroke-dashoffset:3.8;fill-opacity:1"
75
+ d="M 10.719604,5.4583568 C 9.9759581,5.2893251 9.5026576,4.5470852 9.6738812,3.8184319 9.7908054,3.3208531 10.217638,2.8991213 10.709857,2.7948375 c 0.416647,-0.088273 0.871064,0.029737 1.190494,0.3091668 0.134292,0.117475 0.313993,0.3773193 0.376521,0.5444406 0.18623,0.4977426 0.06458,1.0468044 -0.317331,1.4322699 -0.156873,0.1583324 -0.358748,0.2833937 -0.559266,0.3464643 -0.188139,0.059177 -0.495543,0.073257 -0.680671,0.031178 z"
76
+ id="path14"
77
+ transform="scale(32)" />
78
+ </svg>
package/kids.ultra ADDED
@@ -0,0 +1,1044 @@
1
+ ---
2
+ title: TrailStash Kids
3
+ style:
4
+ extends: https://open.trailsta.sh/style.json
5
+ glyphs: https://styles.trailsta.sh/fonts/{fontstack}/{range}.pbf
6
+ sprite:
7
+ - id: nps
8
+ url: https://styles.trailsta.sh/sprites/nps-shielded
9
+ layers:
10
+ - {id: poi_dot, visibility: none}
11
+ - {id: poi, visibility: none}
12
+ - &poi
13
+ filter: [">=", [get, order], 15]
14
+ type: symbol
15
+ maxzoom: 24
16
+ minzoom: 14
17
+ symbol-sort-key: [get, order]
18
+ text-justify:
19
+ - case
20
+ - - any
21
+ - [ ==, [ get, anchor ], right ]
22
+ - [ ==, [ get, anchor ], left ]
23
+ - [get, anchor]
24
+ - - any
25
+ - [ ==, [ get, anchor ], top ]
26
+ - [ ==, [ get, anchor ], bottom ]
27
+ - center
28
+ - [ ==, [ length, [ get, sprites ] ], 1 ]
29
+ - center
30
+ - left
31
+ text-anchor:
32
+ - case
33
+ - [has, anchor]
34
+ - [get, anchor]
35
+ - [ ==, [ length, [ get, sprites ] ], 1 ]
36
+ - top
37
+ - left
38
+ text-offset:
39
+ - case
40
+ - [ ==, [ length, [ get, sprites ] ], 1 ]
41
+ - [ literal, [ 0, -.75 ] ]
42
+ - [ ==, [ get, anchor ], right ]
43
+ - [ literal, [ .75, 0 ] ]
44
+ - [ literal, [ -.75, 0 ] ]
45
+ text-color: white
46
+ text-halo-color: black
47
+ text-halo-width: 1
48
+ text-font: [ Noto Sans Bold ]
49
+ text-field:
50
+ - case
51
+ - [ '>', [ length, [ get, sprites ] ], 1 ]
52
+ - - format
53
+ - [ get, name ]
54
+ - {}
55
+ - [ literal, "\n" ]
56
+ - [ image, [ at, 0, [ get, sprites ] ] ]
57
+ - {}
58
+ - [ literal, " " ]
59
+ - {}
60
+ - [ image, [ at, 1, [ get, sprites ] ] ]
61
+ - {}
62
+ - [ literal, " " ]
63
+ - {}
64
+ - - case
65
+ - [ '>', [ length, [ get, sprites ] ], 2 ]
66
+ - [ image, [ at, 2, [ get, sprites ] ] ]
67
+ - ""
68
+ - {}
69
+ - [ literal, " " ]
70
+ - {}
71
+ - - case
72
+ - [ '>', [ length, [ get, sprites ] ], 3 ]
73
+ - [ image, [ at, 3, [ get, sprites ] ] ]
74
+ - ""
75
+ - {}
76
+ - [ literal, " " ]
77
+ - {}
78
+ - - case
79
+ - [ '>', [ length, [ get, sprites ] ], 4 ]
80
+ - [ image, [ at, 4, [ get, sprites ] ] ]
81
+ - ""
82
+ - {}
83
+ - [ literal, " " ]
84
+ - {}
85
+ - - case
86
+ - [ '>', [ length, [ get, sprites ] ], 5 ]
87
+ - [ image, [ at, 5, [ get, sprites ] ] ]
88
+ - ""
89
+ - {}
90
+ - [ literal, " " ]
91
+ - {}
92
+ - - case
93
+ - [ '>', [ length, [ get, sprites ] ], 6 ]
94
+ - [ image, [ at, 6, [ get, sprites ] ] ]
95
+ - ""
96
+ - {}
97
+ - [ literal, " " ]
98
+ - {}
99
+ - - case
100
+ - [ '>', [ length, [ get, sprites ] ], 7 ]
101
+ - [ image, [ at, 7, [ get, sprites ] ] ]
102
+ - ""
103
+ - {}
104
+ - [ literal, " " ]
105
+ - {}
106
+ - - case
107
+ - [ '>', [ length, [ get, sprites ] ], 8 ]
108
+ - [ image, [ at, 8, [ get, sprites ] ] ]
109
+ - ""
110
+ - {}
111
+ - - all
112
+ - [ ==, [ length, [ get, sprites ] ], 1 ]
113
+ - [ has, name ]
114
+ - - format
115
+ - [ image, [ at, 0, [ get, sprites ] ] ]
116
+ - {}
117
+ - "\n"
118
+ - {}
119
+ - [ get, name ]
120
+ - {}
121
+ - [ ==, [ length, [ get, sprites ] ], 1 ]
122
+ - - format
123
+ - [ image, [ at, 0, [ get, sprites ] ] ]
124
+ - {}
125
+ - [ get, name ]
126
+ - <<: *poi
127
+ maxzoom: 14
128
+ minzoom: 10
129
+ filter: ["<", [get, order], 20]
130
+ ---
131
+ {
132
+ "type": "FeatureCollection",
133
+ "features": [
134
+ {
135
+ "type": "Feature",
136
+ "properties": {
137
+ "name": "T. Tyler Potterfield Memorial Bridge",
138
+ "sprites": [
139
+ "nps:bridge-white-14"
140
+ ],
141
+ "order": 30
142
+ },
143
+ "geometry": {
144
+ "coordinates": [
145
+ -77.44506279150815,
146
+ 37.53235558757456
147
+ ],
148
+ "type": "Point"
149
+ }
150
+ },
151
+ {
152
+ "type": "Feature",
153
+ "properties": {
154
+ "name": "Bryan Park",
155
+ "sprites": [
156
+ "nps:walking-white-14",
157
+ "nps:strollers-white-14",
158
+ "nps:bicycle-trail-white-14",
159
+ "nps:playground-white-14"
160
+ ],
161
+ "order": 10
162
+ },
163
+ "geometry": {
164
+ "coordinates": [
165
+ -77.47615917296733,
166
+ 37.59181931916156
167
+ ],
168
+ "type": "Point"
169
+ }
170
+ },
171
+ {
172
+ "type": "Feature",
173
+ "properties": {
174
+ "name": "Deep Run Park",
175
+ "sprites": [
176
+ "nps:walking-white-14",
177
+ "nps:strollers-white-14",
178
+ "nps:bicycle-trail-white-14",
179
+ "nps:playground-white-14"
180
+ ],
181
+ "order": 10
182
+ },
183
+ "geometry": {
184
+ "coordinates": [
185
+ -77.59169355139638,
186
+ 37.626191499030554
187
+ ],
188
+ "type": "Point"
189
+ },
190
+ "id": 2
191
+ },
192
+ {
193
+ "type": "Feature",
194
+ "properties": {
195
+ "name": "Deep Run Pump Track",
196
+ "sprites": [
197
+ "nps:bicycle-trail-white-14"
198
+ ],
199
+ "order": 30
200
+ },
201
+ "geometry": {
202
+ "coordinates": [
203
+ -77.59230305674437,
204
+ 37.62717540687524
205
+ ],
206
+ "type": "Point"
207
+ }
208
+ },
209
+ {
210
+ "type": "Feature",
211
+ "properties": {
212
+ "name": "Belle Isle",
213
+ "sprites": [
214
+ "nps:walking-white-14",
215
+ "nps:trailhead-white-14",
216
+ "nps:strollers-white-14",
217
+ "nps:bicycle-trail-white-14",
218
+ "nps:climbing-white-14"
219
+ ],
220
+ "order": 10,
221
+ "anchor": "right"
222
+ },
223
+ "geometry": {
224
+ "coordinates": [
225
+ -77.45191935359166,
226
+ 37.528638630614765
227
+ ],
228
+ "type": "Point"
229
+ }
230
+ },
231
+ {
232
+ "type": "Feature",
233
+ "properties": {
234
+ "name": "Maymont",
235
+ "sprites": [
236
+ "nps:walking-white-14",
237
+ "nps:strollers-white-14"
238
+ ],
239
+ "order": 10
240
+ },
241
+ "geometry": {
242
+ "coordinates": [
243
+ -77.47771160807967,
244
+ 37.535612934418225
245
+ ],
246
+ "type": "Point"
247
+ }
248
+ },
249
+ {
250
+ "type": "Feature",
251
+ "properties": {
252
+ "name": "Dogwood Dell",
253
+ "sprites": [
254
+ "nps:trailhead-white-14",
255
+ "nps:bicycle-trail-white-14",
256
+ "nps:playground-white-14"
257
+ ],
258
+ "order": 10,
259
+ "anchor": "right"
260
+ },
261
+ "geometry": {
262
+ "coordinates": [
263
+ -77.48466698258284,
264
+ 37.53820259060434
265
+ ],
266
+ "type": "Point"
267
+ }
268
+ },
269
+ {
270
+ "type": "Feature",
271
+ "properties": {
272
+ "name": "Grayland Tot Lot",
273
+ "sprites": [
274
+ "nps:playground-white-14"
275
+ ],
276
+ "order": 18
277
+ },
278
+ "geometry": {
279
+ "coordinates": [
280
+ -77.48090347772688,
281
+ 37.55075432612857
282
+ ],
283
+ "type": "Point"
284
+ },
285
+ "id": 7
286
+ },
287
+ {
288
+ "type": "Feature",
289
+ "properties": {
290
+ "name": "Hollywood Cemetery",
291
+ "sprites": [
292
+ "nps:walking-white-14",
293
+ "nps:strollers-white-14"
294
+ ],
295
+ "order": 10
296
+ },
297
+ "geometry": {
298
+ "coordinates": [
299
+ -77.45478428524225,
300
+ 37.53728439484483
301
+ ],
302
+ "type": "Point"
303
+ }
304
+ },
305
+ {
306
+ "type": "Feature",
307
+ "properties": {
308
+ "sprites": [
309
+ "nps:bike-rack-white-14"
310
+ ],
311
+ "order": 50
312
+ },
313
+ "geometry": {
314
+ "coordinates": [
315
+ -77.48585869421697,
316
+ 37.537215365153585
317
+ ],
318
+ "type": "Point"
319
+ }
320
+ },
321
+ {
322
+ "type": "Feature",
323
+ "properties": {
324
+ "name": "Carillon Tot Lot",
325
+ "sprites": [
326
+ "nps:playground-white-14"
327
+ ],
328
+ "order": 30
329
+ },
330
+ "geometry": {
331
+ "coordinates": [
332
+ -77.48497934364882,
333
+ 37.5403340099183
334
+ ],
335
+ "type": "Point"
336
+ }
337
+ },
338
+ {
339
+ "type": "Feature",
340
+ "properties": {
341
+ "name": "Dell Meadow",
342
+ "sprites": [
343
+ "nps:playground-white-14"
344
+ ],
345
+ "order": 20
346
+ },
347
+ "geometry": {
348
+ "coordinates": [
349
+ -77.48297062197632,
350
+ 37.53857531134673
351
+ ],
352
+ "type": "Point"
353
+ }
354
+ },
355
+ {
356
+ "type": "Feature",
357
+ "properties": {
358
+ "name": "Belle Isle Skills Park",
359
+ "sprites": [
360
+ "nps:bicycle-trail-white-14"
361
+ ],
362
+ "order": 30
363
+ },
364
+ "geometry": {
365
+ "coordinates": [
366
+ -77.45096161105506,
367
+ 37.52895591808621
368
+ ],
369
+ "type": "Point"
370
+ }
371
+ },
372
+ {
373
+ "type": "Feature",
374
+ "properties": {
375
+ "sprites": [
376
+ "nps:parking-white-14"
377
+ ],
378
+ "order": 60
379
+ },
380
+ "geometry": {
381
+ "coordinates": [
382
+ -77.47602151745527,
383
+ 37.520948344751815
384
+ ],
385
+ "type": "Point"
386
+ }
387
+ },
388
+ {
389
+ "type": "Feature",
390
+ "properties": {
391
+ "name": "Forest Hill Park",
392
+ "sprites": [
393
+ "nps:walking-white-14",
394
+ "nps:trailhead-white-14",
395
+ "nps:strollers-white-14",
396
+ "nps:bicycle-trail-white-14"
397
+ ],
398
+ "order": 10
399
+ },
400
+ "geometry": {
401
+ "coordinates": [
402
+ -77.47271307703281,
403
+ 37.51998845148631
404
+ ],
405
+ "type": "Point"
406
+ }
407
+ },
408
+ {
409
+ "type": "Feature",
410
+ "properties": {
411
+ "sprites": [
412
+ "nps:parking-white-14"
413
+ ],
414
+ "order": 60
415
+ },
416
+ "geometry": {
417
+ "coordinates": [
418
+ -77.4703325921651,
419
+ 37.523437426165074
420
+ ],
421
+ "type": "Point"
422
+ }
423
+ },
424
+ {
425
+ "type": "Feature",
426
+ "properties": {
427
+ "sprites": [
428
+ "nps:parking-white-14"
429
+ ],
430
+ "order": 60
431
+ },
432
+ "geometry": {
433
+ "coordinates": [
434
+ -77.47419231567358,
435
+ 37.534893246138665
436
+ ],
437
+ "type": "Point"
438
+ }
439
+ },
440
+ {
441
+ "type": "Feature",
442
+ "properties": {
443
+ "sprites": [
444
+ "nps:parking-white-14"
445
+ ],
446
+ "order": 60
447
+ },
448
+ "geometry": {
449
+ "coordinates": [
450
+ -77.47957964567996,
451
+ 37.53840946159383
452
+ ],
453
+ "type": "Point"
454
+ }
455
+ },
456
+ {
457
+ "type": "Feature",
458
+ "properties": {
459
+ "sprites": [
460
+ "nps:parking-white-14"
461
+ ],
462
+ "order": 60
463
+ },
464
+ "geometry": {
465
+ "coordinates": [
466
+ -77.48111236897748,
467
+ 37.53949552487151
468
+ ],
469
+ "type": "Point"
470
+ }
471
+ },
472
+ {
473
+ "type": "Feature",
474
+ "properties": {
475
+ "sprites": [
476
+ "nps:parking-white-14"
477
+ ],
478
+ "order": 60
479
+ },
480
+ "geometry": {
481
+ "coordinates": [
482
+ -77.482971203615,
483
+ 37.53516410683052
484
+ ],
485
+ "type": "Point"
486
+ }
487
+ },
488
+ {
489
+ "type": "Feature",
490
+ "properties": {
491
+ "sprites": [
492
+ "nps:parking-white-14"
493
+ ],
494
+ "order": 60
495
+ },
496
+ "geometry": {
497
+ "coordinates": [
498
+ -77.48579206670578,
499
+ 37.537232875191535
500
+ ],
501
+ "type": "Point"
502
+ }
503
+ },
504
+ {
505
+ "type": "Feature",
506
+ "properties": {
507
+ "sprites": [
508
+ "nps:bike-rack-white-14"
509
+ ],
510
+ "order": 50
511
+ },
512
+ "geometry": {
513
+ "coordinates": [
514
+ -77.45036538800733,
515
+ 37.531390095985685
516
+ ],
517
+ "type": "Point"
518
+ }
519
+ },
520
+ {
521
+ "type": "Feature",
522
+ "properties": {
523
+ "sprites": [
524
+ "nps:bike-rack-white-14"
525
+ ],
526
+ "order": 50
527
+ },
528
+ "geometry": {
529
+ "coordinates": [
530
+ -77.47062405012079,
531
+ 37.52359946524385
532
+ ],
533
+ "type": "Point"
534
+ }
535
+ },
536
+ {
537
+ "type": "Feature",
538
+ "properties": {
539
+ "sprites": [
540
+ "nps:bike-rack-white-14"
541
+ ],
542
+ "order": 50
543
+ },
544
+ "geometry": {
545
+ "coordinates": [
546
+ -77.45492061000064,
547
+ 37.529525005855035
548
+ ],
549
+ "type": "Point"
550
+ }
551
+ },
552
+ {
553
+ "type": "Feature",
554
+ "properties": {
555
+ "sprites": [
556
+ "nps:picnic-shelter-white-14"
557
+ ],
558
+ "order": 40
559
+ },
560
+ "geometry": {
561
+ "coordinates": [
562
+ -77.4570741235513,
563
+ 37.52756109393489
564
+ ],
565
+ "type": "Point"
566
+ }
567
+ },
568
+ {
569
+ "type": "Feature",
570
+ "properties": {
571
+ "sprites": [
572
+ "nps:picnic-shelter-white-14"
573
+ ],
574
+ "order": 40
575
+ },
576
+ "geometry": {
577
+ "coordinates": [
578
+ -77.47208335161108,
579
+ 37.51800876106401
580
+ ],
581
+ "type": "Point"
582
+ }
583
+ },
584
+ {
585
+ "type": "Feature",
586
+ "properties": {
587
+ "sprites": [
588
+ "nps:shelter-white-14"
589
+ ],
590
+ "order": 40
591
+ },
592
+ "geometry": {
593
+ "coordinates": [
594
+ -77.47266471128455,
595
+ 37.518790162979286
596
+ ],
597
+ "type": "Point"
598
+ }
599
+ },
600
+ {
601
+ "type": "Feature",
602
+ "properties": {
603
+ "sprites": [
604
+ "nps:picnic-shelter-white-14"
605
+ ],
606
+ "order": 40
607
+ },
608
+ "geometry": {
609
+ "coordinates": [
610
+ -77.48190851147247,
611
+ 37.537912572204306
612
+ ],
613
+ "type": "Point"
614
+ },
615
+ "id": 27
616
+ },
617
+ {
618
+ "type": "Feature",
619
+ "properties": {
620
+ "sprites": [
621
+ "nps:picnic-shelter-white-14"
622
+ ],
623
+ "order": 40
624
+ },
625
+ "geometry": {
626
+ "coordinates": [
627
+ -77.47539948830153,
628
+ 37.52072140073301
629
+ ],
630
+ "type": "Point"
631
+ },
632
+ "id": 28
633
+ },
634
+ {
635
+ "type": "Feature",
636
+ "properties": {
637
+ "sprites": [
638
+ "nps:parking-white-14"
639
+ ],
640
+ "order": 60
641
+ },
642
+ "geometry": {
643
+ "coordinates": [
644
+ -77.44776218686246,
645
+ 37.53472857768483
646
+ ],
647
+ "type": "Point"
648
+ }
649
+ },
650
+ {
651
+ "type": "Feature",
652
+ "properties": {
653
+ "sprites": [
654
+ "nps:parking-white-14"
655
+ ],
656
+ "order": 60
657
+ },
658
+ "geometry": {
659
+ "coordinates": [
660
+ -77.4573528400114,
661
+ 37.52409481945769
662
+ ],
663
+ "type": "Point"
664
+ }
665
+ },
666
+ {
667
+ "type": "Feature",
668
+ "properties": {
669
+ "sprites": [
670
+ "nps:parking-white-14"
671
+ ],
672
+ "order": 60
673
+ },
674
+ "geometry": {
675
+ "coordinates": [
676
+ -77.47404228868851,
677
+ 37.524082194233316
678
+ ],
679
+ "type": "Point"
680
+ }
681
+ },
682
+ {
683
+ "type": "Feature",
684
+ "properties": {
685
+ "sprites": [
686
+ "nps:parking-white-14"
687
+ ],
688
+ "order": 60
689
+ },
690
+ "geometry": {
691
+ "coordinates": [
692
+ -77.4767346913299,
693
+ 37.52511955799936
694
+ ],
695
+ "type": "Point"
696
+ }
697
+ },
698
+ {
699
+ "type": "Feature",
700
+ "properties": {
701
+ "name": "Dry Rocks",
702
+ "sprites": [
703
+ "nps:climbing-white-14"
704
+ ],
705
+ "order": 30
706
+ },
707
+ "geometry": {
708
+ "coordinates": [
709
+ -77.45638487042123,
710
+ 37.52603849407491
711
+ ],
712
+ "type": "Point"
713
+ }
714
+ },
715
+ {
716
+ "type": "Feature",
717
+ "properties": {
718
+ "sprites": [
719
+ "nps:bike-rack-white-14"
720
+ ],
721
+ "order": 50
722
+ },
723
+ "geometry": {
724
+ "coordinates": [
725
+ -77.44624888600774,
726
+ 37.52960772192816
727
+ ],
728
+ "type": "Point"
729
+ }
730
+ },
731
+ {
732
+ "type": "Feature",
733
+ "properties": {
734
+ "sprites": [
735
+ "nps:bike-rack-white-14"
736
+ ],
737
+ "order": 50
738
+ },
739
+ "geometry": {
740
+ "coordinates": [
741
+ -77.44465285804027,
742
+ 37.53448234156134
743
+ ],
744
+ "type": "Point"
745
+ }
746
+ },
747
+ {
748
+ "type": "Feature",
749
+ "properties": {
750
+ "sprites": [
751
+ "nps:parking-white-14"
752
+ ],
753
+ "order": 60
754
+ },
755
+ "geometry": {
756
+ "coordinates": [
757
+ -77.46971721052016,
758
+ 37.591844051624236
759
+ ],
760
+ "type": "Point"
761
+ }
762
+ },
763
+ {
764
+ "type": "Feature",
765
+ "properties": {
766
+ "sprites": [
767
+ "nps:parking-white-14"
768
+ ],
769
+ "order": 60
770
+ },
771
+ "geometry": {
772
+ "coordinates": [
773
+ -77.4719470453588,
774
+ 37.59599988542615
775
+ ],
776
+ "type": "Point"
777
+ }
778
+ },
779
+ {
780
+ "type": "Feature",
781
+ "properties": {
782
+ "sprites": [
783
+ "nps:picnic-shelter-white-14"
784
+ ],
785
+ "order": 40
786
+ },
787
+ "geometry": {
788
+ "coordinates": [
789
+ -77.47252468168541,
790
+ 37.59630378424865
791
+ ],
792
+ "type": "Point"
793
+ }
794
+ },
795
+ {
796
+ "type": "Feature",
797
+ "properties": {
798
+ "sprites": [
799
+ "nps:parking-white-14"
800
+ ],
801
+ "order": 60
802
+ },
803
+ "geometry": {
804
+ "coordinates": [
805
+ -77.59147383869494,
806
+ 37.62759134301483
807
+ ],
808
+ "type": "Point"
809
+ }
810
+ },
811
+ {
812
+ "type": "Feature",
813
+ "properties": {
814
+ "sprites": [
815
+ "nps:parking-white-14"
816
+ ],
817
+ "order": 60
818
+ },
819
+ "geometry": {
820
+ "coordinates": [
821
+ -77.58873538561534,
822
+ 37.62648328469818
823
+ ],
824
+ "type": "Point"
825
+ }
826
+ },
827
+ {
828
+ "type": "Feature",
829
+ "properties": {
830
+ "sprites": [
831
+ "nps:parking-white-14"
832
+ ],
833
+ "order": 60
834
+ },
835
+ "geometry": {
836
+ "coordinates": [
837
+ -77.58677553776404,
838
+ 37.62567841066857
839
+ ],
840
+ "type": "Point"
841
+ }
842
+ },
843
+ {
844
+ "type": "Feature",
845
+ "properties": {
846
+ "sprites": [
847
+ "nps:parking-white-14"
848
+ ],
849
+ "order": 60
850
+ },
851
+ "geometry": {
852
+ "coordinates": [
853
+ -77.58894901943765,
854
+ 37.623824279445984
855
+ ],
856
+ "type": "Point"
857
+ }
858
+ },
859
+ {
860
+ "type": "Feature",
861
+ "properties": {
862
+ "sprites": [
863
+ "nps:playground-white-14"
864
+ ],
865
+ "order": 30
866
+ },
867
+ "geometry": {
868
+ "coordinates": [
869
+ -77.58755629538237,
870
+ 37.62326202301716
871
+ ],
872
+ "type": "Point"
873
+ }
874
+ },
875
+ {
876
+ "type": "Feature",
877
+ "properties": {
878
+ "sprites": [
879
+ "nps:playground-white-14"
880
+ ],
881
+ "order": 30
882
+ },
883
+ "geometry": {
884
+ "coordinates": [
885
+ -77.59113373020111,
886
+ 37.62695615106436
887
+ ],
888
+ "type": "Point"
889
+ }
890
+ },
891
+ {
892
+ "type": "Feature",
893
+ "properties": {
894
+ "sprites": [
895
+ "nps:playground-white-14"
896
+ ],
897
+ "order": 30
898
+ },
899
+ "geometry": {
900
+ "coordinates": [
901
+ -77.47247255415712,
902
+ 37.59539014450705
903
+ ],
904
+ "type": "Point"
905
+ }
906
+ },
907
+ {
908
+ "type": "Feature",
909
+ "properties": {
910
+ "name": "Lewis G. Larus Park",
911
+ "sprites": [
912
+ "nps:trailhead-white-14",
913
+ "nps:climbing-white-14"
914
+ ],
915
+ "order": 10
916
+ },
917
+ "geometry": {
918
+ "coordinates": [
919
+ -77.56503974424972,
920
+ 37.54468292733333
921
+ ],
922
+ "type": "Point"
923
+ },
924
+ "id": 46
925
+ },
926
+ {
927
+ "type": "Feature",
928
+ "properties": {
929
+ "name": "Powhite Park",
930
+ "sprites": [
931
+ "nps:trailhead-white-14"
932
+ ],
933
+ "order": 10
934
+ },
935
+ "geometry": {
936
+ "coordinates": [
937
+ -77.5239034584741,
938
+ 37.52352044625812
939
+ ],
940
+ "type": "Point"
941
+ },
942
+ "id": 47
943
+ },
944
+ {
945
+ "type": "Feature",
946
+ "properties": {
947
+ "sprites": [
948
+ "nps:parking-white-14"
949
+ ],
950
+ "order": 60
951
+ },
952
+ "geometry": {
953
+ "coordinates": [
954
+ -77.52774598453678,
955
+ 37.518090451874414
956
+ ],
957
+ "type": "Point"
958
+ }
959
+ },
960
+ {
961
+ "type": "Feature",
962
+ "properties": {
963
+ "sprites": [
964
+ "nps:parking-white-14"
965
+ ],
966
+ "order": 60
967
+ },
968
+ "geometry": {
969
+ "coordinates": [
970
+ -77.56780820156143,
971
+ 37.543626275715354
972
+ ],
973
+ "type": "Point"
974
+ }
975
+ },
976
+ {
977
+ "type": "Feature",
978
+ "properties": {
979
+ "sprites": [
980
+ "nps:parking-white-14"
981
+ ],
982
+ "order": 60
983
+ },
984
+ "geometry": {
985
+ "coordinates": [
986
+ -77.56042949379925,
987
+ 37.5396827163662
988
+ ],
989
+ "type": "Point"
990
+ }
991
+ },
992
+ {
993
+ "type": "Feature",
994
+ "properties": {
995
+ "name": "Geometry Park",
996
+ "sprites": [
997
+ "nps:playground-white-14"
998
+ ],
999
+ "order": 17
1000
+ },
1001
+ "geometry": {
1002
+ "coordinates": [
1003
+ -77.46189334142085,
1004
+ 37.549675864272245
1005
+ ],
1006
+ "type": "Point"
1007
+ }
1008
+ },
1009
+ {
1010
+ "type": "Feature",
1011
+ "properties": {
1012
+ "name": "Lombardy Park",
1013
+ "sprites": [
1014
+ "nps:playground-white-14"
1015
+ ],
1016
+ "order": 19
1017
+ },
1018
+ "geometry": {
1019
+ "coordinates": [
1020
+ -77.45863578550944,
1021
+ 37.55088339548517
1022
+ ],
1023
+ "type": "Point"
1024
+ }
1025
+ },
1026
+ {
1027
+ "type": "Feature",
1028
+ "properties": {
1029
+ "name": "Federal Park",
1030
+ "sprites": [
1031
+ "nps:playground-white-14"
1032
+ ],
1033
+ "order": 18
1034
+ },
1035
+ "geometry": {
1036
+ "coordinates": [
1037
+ -77.4673590709783,
1038
+ 37.55036487255619
1039
+ ],
1040
+ "type": "Point"
1041
+ }
1042
+ }
1043
+ ]
1044
+ }
@@ -53,7 +53,7 @@ export const popupTemplate = `
53
53
  {%- endif %}
54
54
  {%- if coordinates %}
55
55
  <h3>Coordinates</h3>
56
- <a href="geo://{{coordinates[1]}},{{coordinates[0]}}">{{coordinates[1] | round: 6 }} / {{coordinates[0] | round: 6 }}</a> <small>(lat/lon)</small>
56
+ <a href="geo:{{coordinates[1]}},{{coordinates[0]}}">{{coordinates[1] | round: 6 }} / {{coordinates[0] | round: 6 }}</a> <small>(lat/lon)</small>
57
57
  {%- endif %}
58
58
  `;
59
59
  export const popupContextBuilder = ({ properties, geometry }) => {
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "publishConfig": {
4
4
  "access": "public"
5
5
  },
6
- "version": "3.1.2",
6
+ "version": "3.2.0",
7
7
  "description": "A web based tool for making MapLibre GL maps with data from sources such as Overpass, GeoJSON, GPX, KML, TCX, etc",
8
8
  "main": "index.js",
9
9
  "scripts": {
@@ -22,19 +22,23 @@
22
22
  "type": "module",
23
23
  "repository": {
24
24
  "type": "git",
25
- "url": "git+https://gitlab.com/trailstash/overpass-ultra.git"
25
+ "url": "git+https://gitlab.com/trailstash/ultra.git"
26
26
  },
27
27
  "keywords": [
28
28
  "maps",
29
29
  "cartography",
30
30
  "osm",
31
31
  "overpass",
32
+ "geojson",
33
+ "gpx",
34
+ "kml",
35
+ "tcx",
32
36
  "mapbox-gl",
33
37
  "mapbox-gl-js"
34
38
  ],
35
39
  "author": "Daniel Schep",
36
40
  "bugs": {
37
- "url": "https://gitlab.com/trailstash/overpass-ultra/issues"
41
+ "url": "https://gitlab.com/trailstash/ultra/issues"
38
42
  },
39
43
  "homepage": "https://overpass-ultra.us/",
40
44
  "devDependencies": {