styled-map-package 1.0.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.
Files changed (60) hide show
  1. package/.github/workflows/node.yml +30 -0
  2. package/.github/workflows/release.yml +47 -0
  3. package/.husky/pre-commit +1 -0
  4. package/.nvmrc +1 -0
  5. package/LICENSE.md +7 -0
  6. package/README.md +28 -0
  7. package/bin/smp-download.js +83 -0
  8. package/bin/smp-view.js +52 -0
  9. package/bin/smp.js +11 -0
  10. package/eslint.config.js +17 -0
  11. package/lib/download.js +114 -0
  12. package/lib/index.js +6 -0
  13. package/lib/reader.js +150 -0
  14. package/lib/reporters.js +92 -0
  15. package/lib/server.js +64 -0
  16. package/lib/style-downloader.js +363 -0
  17. package/lib/tile-downloader.js +188 -0
  18. package/lib/types.ts +104 -0
  19. package/lib/utils/fetch.js +100 -0
  20. package/lib/utils/file-formats.js +85 -0
  21. package/lib/utils/geo.js +87 -0
  22. package/lib/utils/mapbox.js +155 -0
  23. package/lib/utils/misc.js +26 -0
  24. package/lib/utils/streams.js +162 -0
  25. package/lib/utils/style.js +174 -0
  26. package/lib/utils/templates.js +136 -0
  27. package/lib/writer.js +478 -0
  28. package/map-viewer/index.html +89 -0
  29. package/package.json +103 -0
  30. package/test/download-write-read.js +43 -0
  31. package/test/fixtures/invalid-styles/empty.json +1 -0
  32. package/test/fixtures/invalid-styles/missing-source.json +10 -0
  33. package/test/fixtures/invalid-styles/no-layers.json +4 -0
  34. package/test/fixtures/invalid-styles/no-sources.json +4 -0
  35. package/test/fixtures/invalid-styles/null.json +1 -0
  36. package/test/fixtures/invalid-styles/unsupported-version.json +5 -0
  37. package/test/fixtures/valid-styles/external-geojson.input.json +66 -0
  38. package/test/fixtures/valid-styles/external-geojson.output.json +93 -0
  39. package/test/fixtures/valid-styles/inline-geojson.input.json +421 -0
  40. package/test/fixtures/valid-styles/inline-geojson.output.json +1573 -0
  41. package/test/fixtures/valid-styles/maplibre-demotiles.input.json +831 -0
  42. package/test/fixtures/valid-styles/maplibre-unlabelled.input.json +496 -0
  43. package/test/fixtures/valid-styles/maplibre-unlabelled.output.json +1573 -0
  44. package/test/fixtures/valid-styles/minimal-labelled.input.json +37 -0
  45. package/test/fixtures/valid-styles/minimal-labelled.output.json +72 -0
  46. package/test/fixtures/valid-styles/minimal-sprites.input.json +37 -0
  47. package/test/fixtures/valid-styles/minimal-sprites.output.json +58 -0
  48. package/test/fixtures/valid-styles/minimal.input.json +54 -0
  49. package/test/fixtures/valid-styles/minimal.output.json +92 -0
  50. package/test/fixtures/valid-styles/multiple-sprites.input.json +46 -0
  51. package/test/fixtures/valid-styles/multiple-sprites.output.json +128 -0
  52. package/test/fixtures/valid-styles/raster-sources.input.json +33 -0
  53. package/test/fixtures/valid-styles/raster-sources.output.json +69 -0
  54. package/test/utils/assert-bbox-equal.js +19 -0
  55. package/test/utils/digest-stream.js +36 -0
  56. package/test/utils/image-streams.js +30 -0
  57. package/test/utils/reader-helper.js +72 -0
  58. package/test/write-read.js +620 -0
  59. package/tsconfig.json +18 -0
  60. package/types/buffer-peek-stream.d.ts +12 -0
@@ -0,0 +1,43 @@
1
+ import { validateStyleMin } from '@maplibre/maplibre-gl-style-spec'
2
+ import tempDir from 'temp-dir'
3
+
4
+ import assert from 'node:assert'
5
+ import { randomBytes } from 'node:crypto'
6
+ import fs from 'node:fs'
7
+ import fsPromises from 'node:fs/promises'
8
+ import path from 'node:path'
9
+ import { pipeline } from 'node:stream/promises'
10
+ import test from 'node:test'
11
+
12
+ import { download, Reader } from '../lib/index.js'
13
+
14
+ const TEST_MAP_STYLE = 'https://demotiles.maplibre.org/style.json'
15
+ const TEST_MAP_AREA = /** @type {const} */ ([5.956, 45.818, 10.492, 47.808]) // Switzerland
16
+
17
+ /** @param {import('node:test').TestContext} t */
18
+ function tempFile(t) {
19
+ const temporaryPath = path.join(tempDir, randomBytes(16).toString('hex'))
20
+ t.after(async () => {
21
+ await fsPromises.rm(temporaryPath, {
22
+ recursive: true,
23
+ force: true,
24
+ maxRetries: 2,
25
+ })
26
+ })
27
+ return temporaryPath
28
+ }
29
+
30
+ test('Everything written can be read', async (t) => {
31
+ const smpFilePath = tempFile(t)
32
+ const smpReadStream = download({
33
+ styleUrl: TEST_MAP_STYLE,
34
+ bbox: [...TEST_MAP_AREA],
35
+ maxzoom: 5,
36
+ })
37
+ await pipeline(smpReadStream, fs.createWriteStream(smpFilePath))
38
+
39
+ const reader = new Reader(smpFilePath)
40
+
41
+ const smpStyle = await reader.getStyle()
42
+ assert.deepEqual(validateStyleMin(smpStyle), [], 'Style is valid')
43
+ })
@@ -0,0 +1,10 @@
1
+ {
2
+ "version": 8,
3
+ "layers": [
4
+ {
5
+ "id": "vector-source-missing",
6
+ "type": "line",
7
+ "source": "vector-source-id"
8
+ }
9
+ ]
10
+ }
@@ -0,0 +1,4 @@
1
+ {
2
+ "version": 8,
3
+ "sources": {}
4
+ }
@@ -0,0 +1,4 @@
1
+ {
2
+ "version": 8,
3
+ "layers": []
4
+ }
@@ -0,0 +1 @@
1
+ null
@@ -0,0 +1,5 @@
1
+ {
2
+ "version": 6,
3
+ "layers": [],
4
+ "sources": {}
5
+ }
@@ -0,0 +1,66 @@
1
+ {
2
+ "name": "MapLibre",
3
+ "zoom": 0.8619833357855968,
4
+ "pitch": 0,
5
+ "center": [17.65431710431244, 32.954120326746775],
6
+ "layers": [
7
+ {
8
+ "id": "background",
9
+ "type": "background",
10
+ "paint": {
11
+ "background-color": "#D8F2FF"
12
+ },
13
+ "filter": ["all"],
14
+ "layout": {
15
+ "visibility": "visible"
16
+ },
17
+ "maxzoom": 24
18
+ },
19
+ {
20
+ "id": "coastline",
21
+ "type": "line",
22
+ "paint": {
23
+ "line-blur": 0.5,
24
+ "line-color": "#198EC8",
25
+ "line-width": {
26
+ "stops": [
27
+ [0, 2],
28
+ [6, 6],
29
+ [14, 9],
30
+ [22, 18]
31
+ ]
32
+ }
33
+ },
34
+ "filter": ["all"],
35
+ "layout": {
36
+ "line-cap": "round",
37
+ "line-join": "round",
38
+ "visibility": "visible"
39
+ },
40
+ "source": "maplibre",
41
+ "maxzoom": 24,
42
+ "minzoom": 0,
43
+ "source-layer": "countries"
44
+ },
45
+ {
46
+ "id": "crimea-fill",
47
+ "type": "fill",
48
+ "source": "crimea",
49
+ "paint": {
50
+ "fill-color": "#D6C7FF"
51
+ }
52
+ }
53
+ ],
54
+ "bearing": 0,
55
+ "sources": {
56
+ "crimea": {
57
+ "type": "geojson",
58
+ "data": "https://example.com/something.json"
59
+ },
60
+ "maplibre": {
61
+ "url": "https://demotiles.maplibre.org/tiles/tiles.json",
62
+ "type": "vector"
63
+ }
64
+ },
65
+ "version": 8
66
+ }
@@ -0,0 +1,93 @@
1
+ {
2
+ "name": "MapLibre",
3
+ "zoom": 14,
4
+ "pitch": 0,
5
+ "center": [
6
+ 0,
7
+ 0
8
+ ],
9
+ "layers": [
10
+ {
11
+ "id": "background",
12
+ "type": "background",
13
+ "paint": {
14
+ "background-color": "#D8F2FF"
15
+ },
16
+ "filter": [
17
+ "all"
18
+ ],
19
+ "layout": {
20
+ "visibility": "visible"
21
+ },
22
+ "maxzoom": 24
23
+ },
24
+ {
25
+ "id": "coastline",
26
+ "type": "line",
27
+ "paint": {
28
+ "line-blur": 0.5,
29
+ "line-color": "#198EC8",
30
+ "line-width": [
31
+ "interpolate",
32
+ [
33
+ "linear"
34
+ ],
35
+ [
36
+ "zoom"
37
+ ],
38
+ 0,
39
+ 2,
40
+ 6,
41
+ 6,
42
+ 14,
43
+ 9,
44
+ 22,
45
+ 18
46
+ ]
47
+ },
48
+ "filter": [
49
+ "all"
50
+ ],
51
+ "layout": {
52
+ "line-cap": "round",
53
+ "line-join": "round",
54
+ "visibility": "visible"
55
+ },
56
+ "source": "maplibre",
57
+ "maxzoom": 24,
58
+ "minzoom": 0,
59
+ "source-layer": "countries"
60
+ }
61
+ ],
62
+ "bearing": 0,
63
+ "sources": {
64
+ "maplibre": {
65
+ "type": "vector",
66
+ "minzoom": 0,
67
+ "maxzoom": 0,
68
+ "bounds": [
69
+ -180,
70
+ -85.051129,
71
+ 180,
72
+ 85.051129
73
+ ],
74
+ "tiles": [
75
+ "smp://maps.v1/s/1/{z}/{x}/{y}.mvt.gz"
76
+ ]
77
+ }
78
+ },
79
+ "version": 8,
80
+ "metadata": {
81
+ "smp:bounds": [
82
+ -180,
83
+ -85.051129,
84
+ 180,
85
+ 85.051129
86
+ ],
87
+ "smp:maxzoom": 16,
88
+ "smp:sourceFolders": {
89
+ "crimea": "0",
90
+ "maplibre": "1"
91
+ }
92
+ }
93
+ }
@@ -0,0 +1,421 @@
1
+ {
2
+ "name": "MapLibre",
3
+ "zoom": 0.8619833357855968,
4
+ "pitch": 0,
5
+ "center": [17.65431710431244, 32.954120326746775],
6
+ "layers": [
7
+ {
8
+ "id": "background",
9
+ "type": "background",
10
+ "paint": {
11
+ "background-color": "#D8F2FF"
12
+ },
13
+ "filter": ["all"],
14
+ "layout": {
15
+ "visibility": "visible"
16
+ },
17
+ "maxzoom": 24
18
+ },
19
+ {
20
+ "id": "crimea-fill",
21
+ "type": "fill",
22
+ "source": "crimea",
23
+ "paint": {
24
+ "fill-color": "#D6C7FF"
25
+ }
26
+ }
27
+ ],
28
+ "bearing": 0,
29
+ "sources": {
30
+ "crimea": {
31
+ "type": "geojson",
32
+ "data": {
33
+ "type": "Feature",
34
+ "geometry": {
35
+ "type": "Polygon",
36
+ "coordinates": [
37
+ [
38
+ [34.00905273547181, 46.55925987559425],
39
+ [33.64325260204026, 46.34533545368038],
40
+ [33.628682598560204, 46.12569762665683],
41
+ [33.64292861730951, 46.10476396128129],
42
+ [33.648473474905984, 46.09033047763651],
43
+ [33.63876482059936, 46.077976784785335],
44
+ [33.62782672238245, 46.06747935719011],
45
+ [33.62911357645072, 46.05708111413949],
46
+ [33.642686868727424, 46.02192963417187],
47
+ [33.6429723910654, 46.01521185644708],
48
+ [33.636224138774026, 46.006705833212465],
49
+ [33.63052626465907, 45.99692992186792],
50
+ [33.63193836679693, 45.988472992911284],
51
+ [33.64276684834442, 45.984575360297384],
52
+ [33.646928693041986, 45.97981936210982],
53
+ [33.638745893564305, 45.96829769147004],
54
+ [33.61958133326394, 45.951176418494185],
55
+ [33.63181380398527, 45.9445404758078],
56
+ [33.638921676216, 45.94737012930554],
57
+ [33.64561542516918, 45.95403251372139],
58
+ [33.65666403976448, 45.95687114427736],
59
+ [33.6825817382811, 45.95878100879199],
60
+ [33.738791807037614, 45.94836945227263],
61
+ [33.758180142697, 45.94072970008301],
62
+ [33.77735917288169, 45.92923970233858],
63
+ [33.75927796793485, 45.92241179584471],
64
+ [33.72529865009221, 45.91587363154565],
65
+ [33.70875012326826, 45.91008760988058],
66
+ [33.69378857293381, 45.91480850795665],
67
+ [33.69092650243843, 45.89657370898402],
68
+ [33.693592356906805, 45.87271465766318],
69
+ [33.69226765972388, 45.86041392418218],
70
+ [33.6704813511748, 45.8584273836251],
71
+ [33.65936345808916, 45.85944682601249],
72
+ [33.653870582376726, 45.86425922279372],
73
+ [33.65107345584843, 45.87089907254003],
74
+ [33.63067378180233, 45.88040685247182],
75
+ [33.61945300059696, 45.88147266102649],
76
+ [33.60987421595539, 45.88048951126686],
77
+ [33.59906957603934, 45.877610457390375],
78
+ [33.57828877687868, 45.86810261756233],
79
+ [33.55357394560386, 45.84700625141778],
80
+ [33.530220674480375, 45.84221983655459],
81
+ [33.5192297395441, 45.84121682367507],
82
+ [33.50832088442496, 45.84313067048083],
83
+ [33.48901101848409, 45.85268298292175],
84
+ [33.482152996405716, 45.854578171799005],
85
+ [33.46719955896293, 45.849912739405056],
86
+ [33.42447496599681, 45.83075886348303],
87
+ [33.40940172404095, 45.82691953557702],
88
+ [33.37918350072067, 45.802867525073566],
89
+ [33.37362145339398, 45.79619281922518],
90
+ [33.33805543634864, 45.78577808972071],
91
+ [33.26498872665803, 45.75410774187094],
92
+ [33.22887541283427, 45.75131270772724],
93
+ [33.19548267281132, 45.7644887297206],
94
+ [33.1789202379222, 45.78010311364778],
95
+ [33.1688456078636, 45.78470227904205],
96
+ [33.161012432811674, 45.77921593899549],
97
+ [33.15951585299757, 45.76864464913777],
98
+ [33.165962301438725, 45.762685940125465],
99
+ [33.1750888126426, 45.759218220695715],
100
+ [33.181464829753, 45.75490447884948],
101
+ [33.17613930782352, 45.7437961960276],
102
+ [33.16369168844906, 45.735912015025065],
103
+ [32.93692665480876, 45.662114646778264],
104
+ [32.86839112407645, 45.63044340698664],
105
+ [32.83803944575723, 45.60834075026611],
106
+ [32.82702772424804, 45.59576101516498],
107
+ [32.82433467080986, 45.58705137380335],
108
+ [32.82563941622885, 45.579605763895614],
109
+ [32.82993674258438, 45.56978311819469],
110
+ [32.82851940940563, 45.56227808675749],
111
+ [32.813310142795274, 45.55930933158257],
112
+ [32.80213583657516, 45.560145780074464],
113
+ [32.78258622159436, 45.565158335073846],
114
+ [32.77333922465823, 45.56689313356526],
115
+ [32.758306734735356, 45.565030173463356],
116
+ [32.750177256846115, 45.55943726334968],
117
+ [32.74340732630185, 45.55261895849793],
118
+ [32.73524549539499, 45.54598788110354],
119
+ [32.72031700779701, 45.53735927760957],
120
+ [32.70536040418847, 45.53169142131733],
121
+ [32.68589438933773, 45.52663379187257],
122
+ [32.66370583186284, 45.52563107058867],
123
+ [32.64312077736798, 45.52188979044979],
124
+ [32.525284074162556, 45.45838108691365],
125
+ [32.49490411219156, 45.43524910229854],
126
+ [32.48107654411925, 45.408986638827514],
127
+ [32.48514589713025, 45.39458067125969],
128
+ [32.51256939517424, 45.34060655033625],
129
+ [32.535915460470335, 45.33777248012882],
130
+ [32.57027153843481, 45.32510892683359],
131
+ [32.590830644991826, 45.32038723212662],
132
+ [32.66380378113439, 45.320421746458976],
133
+ [32.67760722618917, 45.32609231279554],
134
+ [32.71316246802607, 45.353283572618125],
135
+ [32.72817188836078, 45.36074681043402],
136
+ [32.750518060251466, 45.36371725645313],
137
+ [32.89973931692998, 45.35412322462227],
138
+ [32.941197846443885, 45.34245505845169],
139
+ [32.97701667405008, 45.32596743563991],
140
+ [33.04296090827762, 45.2853982930032],
141
+ [33.05274355585479, 45.28154273654923],
142
+ [33.06850284417635, 45.27703461892352],
143
+ [33.07825272648239, 45.272210805127315],
144
+ [33.089426322403455, 45.25656353201492],
145
+ [33.09897492343546, 45.247820101667884],
146
+ [33.12384611720435, 45.238235755071685],
147
+ [33.15767197859745, 45.20755227709648],
148
+ [33.172959979330074, 45.19681657531794],
149
+ [33.21837666514142, 45.187878368659824],
150
+ [33.24017433636709, 45.180191106261134],
151
+ [33.248571989896675, 45.16588271012458],
152
+ [33.259649216030766, 45.155918961282026],
153
+ [33.28309785485047, 45.16064860772312],
154
+ [33.31767999550894, 45.17535522412791],
155
+ [33.35458473323109, 45.18598673360148],
156
+ [33.39725661527919, 45.18973663076909],
157
+ [33.41344561756824, 45.18490731877088],
158
+ [33.468468576977216, 45.149132412229676],
159
+ [33.537128652906205, 45.11719769268973],
160
+ [33.56161328289443, 45.094099022711475],
161
+ [33.57837628774928, 45.053145935448015],
162
+ [33.58247744978442, 45.027377243150454],
163
+ [33.5851414316958, 45.01816461606674],
164
+ [33.6031021265521, 44.993103583251695],
165
+ [33.605922209331794, 44.986905272229734],
166
+ [33.60843524291815, 44.97039962759274],
167
+ [33.61943161357851, 44.93184946652454],
168
+ [33.619484500808824, 44.90819321920554],
169
+ [33.61549738593425, 44.88894092276257],
170
+ [33.608561183117274, 44.871288478948514],
171
+ [33.59889474705494, 44.859790298912856],
172
+ [33.55904244709464, 44.850057575124595],
173
+ [33.54667558363471, 44.83724531175508],
174
+ [33.53701832136994, 44.81871953508235],
175
+ [33.5303157846202, 44.798338017069625],
176
+ [33.5249116915937, 44.78918633101301],
177
+ [33.51669091675143, 44.784809980590666],
178
+ [33.524785531609865, 44.77183212449111],
179
+ [33.5302902535075, 44.75724515985675],
180
+ [33.53710734694323, 44.73034290771247],
181
+ [33.54650992495621, 44.70989226909535],
182
+ [33.5481286806762, 44.699106546699085],
183
+ [33.543995566510915, 44.68230506537358],
184
+ [33.53580273994743, 44.6726082589706],
185
+ [33.52337411931097, 44.661863083605255],
186
+ [33.515320778874354, 44.6491266698327],
187
+ [33.516377841582795, 44.63464990118433],
188
+ [33.52466971637648, 44.62863961572572],
189
+ [33.557474298027785, 44.62473000923737],
190
+ [33.5710648827386, 44.620853511273225],
191
+ [33.55105839203679, 44.61506440493406],
192
+ [33.499905706797676, 44.61452599304897],
193
+ [33.48451102966331, 44.60992438254493],
194
+ [33.47658499621011, 44.60714391514574],
195
+ [33.46705078205747, 44.60616254193252],
196
+ [33.44476599234898, 44.607062134677875],
197
+ [33.4353466482458, 44.60509936890821],
198
+ [33.413591053005575, 44.593500212748125],
199
+ [33.40543527945235, 44.59055535193136],
200
+ [33.37510958624222, 44.58564691897425],
201
+ [33.37074452434078, 44.58851022190515],
202
+ [33.372237834990756, 44.576810695127364],
203
+ [33.37913003799301, 44.56412673079859],
204
+ [33.48759131590526, 44.51024086451031],
205
+ [33.50011215135888, 44.50041002882833],
206
+ [33.517917009115365, 44.49074142372788],
207
+ [33.53836387802215, 44.49164280212756],
208
+ [33.56041892763031, 44.4966411022441],
209
+ [33.57822378538677, 44.497542389459795],
210
+ [33.59062975079095, 44.48975808594983],
211
+ [33.619577003408466, 44.46229988129974],
212
+ [33.62635433636015, 44.45336293328907],
213
+ [33.63175322871038, 44.434828756313124],
214
+ [33.645537634715026, 44.42498521035591],
215
+ [33.721007257593925, 44.39946630464436],
216
+ [33.74168386660085, 44.39560878121904],
217
+ [33.80727466517129, 44.39454176175843],
218
+ [33.81841706002561, 44.39552670349164],
219
+ [33.83909366903248, 44.40143600575672],
220
+ [33.85149963444792, 44.40143600575945],
221
+ [33.91467816197718, 44.38387049706651],
222
+ [33.938111652185, 44.38083293528811],
223
+ [33.957065210440874, 44.38272116790142],
224
+ [34.06614966692763, 44.42019923628979],
225
+ [34.088893936836286, 44.42200415824283],
226
+ [34.10279321289039, 44.42487551014821],
227
+ [34.135933345669, 44.44163597968952],
228
+ [34.14696087047267, 44.44959070749778],
229
+ [34.16058918507403, 44.466287285335795],
230
+ [34.170123399227776, 44.48186111741296],
231
+ [34.182759104731986, 44.49267838558103],
232
+ [34.22923417224524, 44.49949719774551],
233
+ [34.24301857824986, 44.50744404277697],
234
+ [34.263903954150294, 44.53186886058606],
235
+ [34.26631622520165, 44.53555362837611],
236
+ [34.26631622520165, 44.54153064468656],
237
+ [34.27033667695244, 44.545378535987936],
238
+ [34.2757355693048, 44.54644280144541],
239
+ [34.285384653508004, 44.54562413743594],
240
+ [34.299973149863405, 44.54554227040174],
241
+ [34.32260254971496, 44.543577427039224],
242
+ [34.3308731933177, 44.54546040325087],
243
+ [34.340292537420794, 44.55798473830754],
244
+ [34.38042135640006, 44.631830317636684],
245
+ [34.41495238900856, 44.673669777529994],
246
+ [34.424193090575585, 44.68239452736094],
247
+ [34.42959198292681, 44.68884644523774],
248
+ [34.469399167794535, 44.730194532749294],
249
+ [34.47376422969597, 44.73011292571252],
250
+ [34.47376422969597, 44.72635887754967],
251
+ [34.475142670296464, 44.723502373339585],
252
+ [34.499724861011515, 44.74292382044041],
253
+ [34.532800295801195, 44.752620844929055],
254
+ [34.61217550038418, 44.76534519537847],
255
+ [34.65065696715081, 44.777088262503725],
256
+ [34.72084256772871, 44.811080759265764],
257
+ [34.756796893391225, 44.82094054159748],
258
+ [34.82646979041766, 44.81208604604609],
259
+ [34.84289620758207, 44.816893835303176],
260
+ [34.856910353686715, 44.82373813182468],
261
+ [34.889648317948144, 44.817871641692506],
262
+ [34.90733830566026, 44.820886440346584],
263
+ [34.922960632465504, 44.83050015059965],
264
+ [34.92950822531711, 44.83652826953224],
265
+ [34.94179932067178, 44.84019370922482],
266
+ [34.95282684547897, 44.841415470643284],
267
+ [34.98567967978991, 44.840275160795755],
268
+ [35.0053224583441, 44.83538786296728],
269
+ [35.017958163849414, 44.82219008824552],
270
+ [35.02703289780189, 44.80890779582285],
271
+ [35.037933245998005, 44.79869792240089],
272
+ [35.08073333784134, 44.793525442788905],
273
+ [35.1080207326404, 44.824553365795765],
274
+ [35.130368105574235, 44.86879838545747],
275
+ [35.15485200090768, 44.90071251697748],
276
+ [35.17111229780758, 44.90746386008772],
277
+ [35.21522068940149, 44.91421441031795],
278
+ [35.233163085981715, 44.925728224907715],
279
+ [35.25636688416236, 44.95896657181197],
280
+ [35.27300098099195, 44.96690119386028],
281
+ [35.29748487632534, 44.95605693543271],
282
+ [35.30496087491386, 44.96121482614441],
283
+ [35.315240372954605, 44.965711070514175],
284
+ [35.31935217217088, 44.96941359539801],
285
+ [35.36757236298112, 44.94362319076086],
286
+ [35.36103086422793, 44.97364475976596],
287
+ [35.362152264014156, 44.98593980935419],
288
+ [35.374674561627444, 44.997835734117416],
289
+ [35.389439658813274, 45.00180049366759],
290
+ [35.42270785247763, 45.00087540764923],
291
+ [35.43504325012745, 45.00470780964241],
292
+ [35.43504325012745, 45.011446929213974],
293
+ [35.40631957913584, 45.02015821022701],
294
+ [35.40089948016896, 45.025046135473445],
295
+ [35.39790908073891, 45.03482073400548],
296
+ [35.40052568024015, 45.042216617888045],
297
+ [35.40631957913584, 45.051328088783805],
298
+ [35.40744097892215, 45.06294640963205],
299
+ [35.41734667704213, 45.0708666385693],
300
+ [35.469304867139925, 45.10068964922732],
301
+ [35.5070260597534, 45.113341616151644],
302
+ [35.54758335202416, 45.12019982412133],
303
+ [35.59019654390909, 45.11993606213795],
304
+ [35.63411803553862, 45.11439677872579],
305
+ [35.70669729572677, 45.09480210570922],
306
+ [35.771782422456766, 45.06572995732262],
307
+ [35.78430472007, 45.057941041321754],
308
+ [35.81250040352472, 45.031852200991295],
309
+ [35.81941570220667, 45.021152336906454],
310
+ [35.82763930064016, 44.99895365027004],
311
+ [35.848198296721705, 44.99208088455586],
312
+ [35.916977483614176, 45.00172895661731],
313
+ [35.99360646900681, 44.997896355361604],
314
+ [36.00893226608571, 45.00926125333629],
315
+ [36.02539976723364, 45.03288661039673],
316
+ [36.047827762958946, 45.048074065419456],
317
+ [36.078666257082034, 45.03883000769565],
318
+ [36.079137312377895, 45.046610970582435],
319
+ [36.135020401727616, 45.02125162210126],
320
+ [36.2241716847341, 45.00751061631556],
321
+ [36.24398308095806, 45.011474706353084],
322
+ [36.24828178013877, 45.01649549321965],
323
+ [36.25332807917695, 45.03247980324494],
324
+ [36.25743987839326, 45.03842324279259],
325
+ [36.267158676549116, 45.043573724415154],
326
+ [36.2783726744118, 45.04555455542638],
327
+ [36.36740852558336, 45.04833265291825],
328
+ [36.44029951169139, 45.06787222615526],
329
+ [36.45375630913995, 45.07631970334319],
330
+ [36.455251508854985, 45.09202341204062],
331
+ [36.44142091149291, 45.10709638287736],
332
+ [36.41432041665814, 45.12872568311289],
333
+ [36.40852651776157, 45.149160473330085],
334
+ [36.409997342308856, 45.171615955386955],
335
+ [36.418312796420764, 45.23001671705953],
336
+ [36.42672329481775, 45.25186253492981],
337
+ [36.43756477765089, 45.27227491599612],
338
+ [36.4497132753354, 45.28542626329343],
339
+ [36.45905827355429, 45.28753019598713],
340
+ [36.4814862692796, 45.28845064200263],
341
+ [36.4909554290368, 45.29213135137758],
342
+ [36.49637552800283, 45.300940007322055],
343
+ [36.49394582846682, 45.305015191082816],
344
+ [36.48871262946426, 45.30935296803605],
345
+ [36.48460083024801, 45.315924724862185],
346
+ [36.489647129296515, 45.336413860372005],
347
+ [36.502169426909745, 45.34731734941451],
348
+ [36.52104632331191, 45.35033842661815],
349
+ [36.544281237819945, 45.34731734942025],
350
+ [36.57455903204905, 45.33601971904315],
351
+ [36.585399229982954, 45.333917585593355],
352
+ [36.59810088537549, 45.334837278577254],
353
+ [36.630808379142394, 45.34048649352954],
354
+ [36.637536777859964, 45.3511265071989],
355
+ [36.63099527910589, 45.3741073632589],
356
+ [36.61359545390113, 45.40895280985421],
357
+ [36.59845655678569, 45.421547717459106],
358
+ [36.58331765967199, 45.42731944465129],
359
+ [36.566309762912795, 45.42548305000767],
360
+ [36.54836736633254, 45.41210180010589],
361
+ [36.53285466928139, 45.4090840212946],
362
+ [36.51565987255873, 45.41957994832251],
363
+ [36.49117597722616, 45.44279525429408],
364
+ [36.47043008117939, 45.4458112314303],
365
+ [36.411182792482634, 45.43610707766504],
366
+ [36.391371396258705, 45.43991025572652],
367
+ [36.35959840231365, 45.45407156049933],
368
+ [36.33960010612526, 45.45695583486963],
369
+ [36.33025510790637, 45.454464879327446],
370
+ [36.32053630976225, 45.44856480887407],
371
+ [36.31156511147125, 45.4438443081136],
372
+ [36.29885591389362, 45.442795254299995],
373
+ [36.3072664122906, 45.46115087970253],
374
+ [36.30016421364425, 45.47320989503609],
375
+ [36.283717016779036, 45.476355300848866],
376
+ [36.267082919949445, 45.46704963343626],
377
+ [36.25213092279836, 45.46115087970253],
378
+ [36.13681364478941, 45.46219959214511],
379
+ [36.11700224855986, 45.45721803432335],
380
+ [36.097003952371466, 45.441483909606006],
381
+ [36.06952965760803, 45.43046741078453],
382
+ [36.0655449627526, 45.42553028973455],
383
+ [36.05134056545904, 45.39535242162091],
384
+ [36.022557970944945, 45.368441166003805],
385
+ [35.986486277818386, 45.362926059418186],
386
+ [35.94723728529826, 45.372380198658874],
387
+ [35.87220216002379, 45.404075760536614],
388
+ [35.85388596351393, 45.413916621802144],
389
+ [35.84715756479628, 45.426379251448395],
390
+ [35.8524047739447, 45.44386497541683],
391
+ [35.85950697259193, 45.45933624762881],
392
+ [35.857824872912545, 45.469953901705],
393
+ [35.83278027768503, 45.47087138287168],
394
+ [35.8167068807486, 45.46392436820739],
395
+ [35.80362388324218, 45.44963442058864],
396
+ [35.79469305616038, 45.42980210462429],
397
+ [35.791889556694684, 45.41209230278156],
398
+ [35.772265060435046, 45.39214572935421],
399
+ [35.767405661361295, 45.38873311015669],
400
+ [35.75189296431793, 45.386632934388984],
401
+ [35.7481549650407, 45.379938103368545],
402
+ [35.746846665290036, 45.369960021421576],
403
+ [35.74423006578874, 45.36076812520648],
404
+ [35.71619507113218, 45.34040932557082],
405
+ [35.69451467527287, 45.32989869277279],
406
+ [35.51720627467216, 45.29506847418358],
407
+ [35.48038698168983, 45.2979608697527],
408
+ [35.33194061536096, 45.371562726652314],
409
+ [35.04491375777232, 45.669545248704424],
410
+ [35.00230056589345, 45.7290693869553],
411
+ [34.70631294999043, 46.024929846739866],
412
+ [34.35868883309806, 46.106725558140795],
413
+ [34.00905273547181, 46.55925987559425]
414
+ ]
415
+ ]
416
+ }
417
+ }
418
+ }
419
+ },
420
+ "version": 8
421
+ }