@tileflow/maps 0.1.0-alpha.0 → 0.1.0-alpha.10

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 (524) hide show
  1. package/README.md +315 -156
  2. package/THIRD_PARTY_NOTICES.md +122 -47
  3. package/assets/README.md +77 -43
  4. package/assets/baedeker/README.md +31 -0
  5. package/assets/baedeker/fonts/CormorantGaramond-Italic.ttf +0 -0
  6. package/assets/baedeker/fonts/CormorantGaramond-Regular.ttf +0 -0
  7. package/assets/baedeker/fonts/CormorantGaramond-SemiBold.ttf +0 -0
  8. package/assets/{matrix → baedeker}/fonts/LICENSE.txt +1 -1
  9. package/assets/baedeker/icons/baedeker-hachures.pattern.svg +14 -0
  10. package/assets/baedeker/icons/baedeker-orchard.pattern.svg +36 -0
  11. package/assets/baedeker/icons/baedeker-paper-grain.pattern.svg +20 -0
  12. package/assets/baedeker/icons/baedeker-park-stipple.pattern.svg +36 -0
  13. package/assets/baedeker/icons/baedeker-residential.pattern.svg +5 -0
  14. package/assets/baedeker/icons/baedeker-sand.pattern.svg +21 -0
  15. package/assets/baedeker/icons/baedeker-water-lines.pattern.svg +9 -0
  16. package/assets/baedeker/icons/baedeker-wetland.pattern.svg +8 -0
  17. package/assets/blueprint/icons/blueprint-building-hatch.pattern.svg +4 -0
  18. package/assets/blueprint/icons/blueprint-grid.pattern.svg +6 -0
  19. package/assets/blueprint/icons/blueprint-landscape-hatch.pattern.svg +4 -0
  20. package/assets/blueprint/icons/blueprint-poi-node.svg +8 -0
  21. package/assets/blueprint/icons/blueprint-water-hatch.pattern.svg +4 -0
  22. package/assets/civica/README.md +35 -0
  23. package/assets/civica/fonts/BarlowSemiCondensed-Regular.ttf +0 -0
  24. package/assets/civica/fonts/BarlowSemiCondensed-SemiBold.ttf +0 -0
  25. package/assets/civica/fonts/DMSerifText-Italic.ttf +0 -0
  26. package/assets/civica/fonts/DMSerifText-Regular.ttf +0 -0
  27. package/assets/civica/fonts/LICENSE-BarlowSemiCondensed.txt +93 -0
  28. package/assets/civica/fonts/LICENSE-NotoSans.txt +94 -0
  29. package/assets/civica/fonts/LICENSE.txt +293 -0
  30. package/assets/civica/fonts/NotoSans-Regular.ttf +0 -0
  31. package/assets/civica/fonts/OFL.txt +93 -0
  32. package/assets/civica/fonts/README.md +42 -0
  33. package/assets/civica/icons/civica-industrial-hatch.pattern.svg +5 -0
  34. package/assets/civica/icons/civica-orchard.pattern.svg +16 -0
  35. package/assets/civica/icons/civica-paper-grain.pattern.svg +26 -0
  36. package/assets/civica/icons/civica-park-groves.pattern.svg +13 -0
  37. package/assets/civica/icons/civica-poi-airport.svg +6 -0
  38. package/assets/civica/icons/civica-poi-civic-star.svg +5 -0
  39. package/assets/civica/icons/civica-poi-dot.svg +5 -0
  40. package/assets/civica/icons/civica-poi-food.svg +7 -0
  41. package/assets/civica/icons/civica-poi-garden.svg +16 -0
  42. package/assets/civica/icons/civica-poi-hospital.svg +5 -0
  43. package/assets/civica/icons/civica-poi-lodging.svg +8 -0
  44. package/assets/civica/icons/civica-poi-monument.svg +7 -0
  45. package/assets/civica/icons/civica-poi-museum.svg +7 -0
  46. package/assets/civica/icons/civica-poi-shopping.svg +8 -0
  47. package/assets/civica/icons/civica-poi-transit.svg +10 -0
  48. package/assets/civica/icons/civica-water-lines.pattern.svg +7 -0
  49. package/assets/map-1777/fonts/CormorantGaramond-Italic.ttf +0 -0
  50. package/assets/map-1777/fonts/CormorantGaramond-Regular.ttf +0 -0
  51. package/assets/map-1777/fonts/CormorantGaramond-SemiBold.ttf +0 -0
  52. package/assets/{cyberpunk → map-1777}/fonts/LICENSE.txt +1 -1
  53. package/assets/map-1777/icons/map-1777-crop-cross.pattern.svg +52 -0
  54. package/assets/map-1777/icons/map-1777-crop-hatch.pattern.svg +49 -0
  55. package/assets/map-1777/icons/map-1777-crop-lines.pattern.svg +52 -0
  56. package/assets/map-1777/icons/map-1777-dawn-crop-cross.pattern.svg +52 -0
  57. package/assets/map-1777/icons/map-1777-dawn-crop-hatch.pattern.svg +49 -0
  58. package/assets/map-1777/icons/map-1777-dawn-crop-lines.pattern.svg +52 -0
  59. package/assets/map-1777/icons/map-1777-dawn-heath.pattern.svg +9 -0
  60. package/assets/map-1777/icons/map-1777-dawn-orchard.pattern.svg +89 -0
  61. package/assets/map-1777/icons/map-1777-dawn-paper-grain.pattern.svg +20 -0
  62. package/assets/map-1777/icons/map-1777-dawn-residential.pattern.svg +5 -0
  63. package/assets/map-1777/icons/map-1777-dawn-sand.pattern.svg +15 -0
  64. package/assets/map-1777/icons/map-1777-dawn-water-ripples.pattern.svg +9 -0
  65. package/assets/map-1777/icons/map-1777-dawn-wetland.pattern.svg +8 -0
  66. package/assets/map-1777/icons/map-1777-dawn-woodland.pattern.svg +121 -0
  67. package/assets/map-1777/icons/map-1777-dusk-crop-cross.pattern.svg +52 -0
  68. package/assets/map-1777/icons/map-1777-dusk-crop-hatch.pattern.svg +49 -0
  69. package/assets/map-1777/icons/map-1777-dusk-crop-lines.pattern.svg +52 -0
  70. package/assets/map-1777/icons/map-1777-dusk-heath.pattern.svg +9 -0
  71. package/assets/map-1777/icons/map-1777-dusk-orchard.pattern.svg +89 -0
  72. package/assets/map-1777/icons/map-1777-dusk-paper-grain.pattern.svg +20 -0
  73. package/assets/map-1777/icons/map-1777-dusk-residential.pattern.svg +5 -0
  74. package/assets/map-1777/icons/map-1777-dusk-sand.pattern.svg +15 -0
  75. package/assets/map-1777/icons/map-1777-dusk-water-ripples.pattern.svg +9 -0
  76. package/assets/map-1777/icons/map-1777-dusk-wetland.pattern.svg +8 -0
  77. package/assets/map-1777/icons/map-1777-dusk-woodland.pattern.svg +121 -0
  78. package/assets/map-1777/icons/map-1777-heath.pattern.svg +9 -0
  79. package/assets/map-1777/icons/map-1777-night-crop-cross.pattern.svg +52 -0
  80. package/assets/map-1777/icons/map-1777-night-crop-hatch.pattern.svg +49 -0
  81. package/assets/map-1777/icons/map-1777-night-crop-lines.pattern.svg +52 -0
  82. package/assets/map-1777/icons/map-1777-night-heath.pattern.svg +9 -0
  83. package/assets/map-1777/icons/map-1777-night-orchard.pattern.svg +89 -0
  84. package/assets/map-1777/icons/map-1777-night-paper-grain.pattern.svg +20 -0
  85. package/assets/map-1777/icons/map-1777-night-residential.pattern.svg +5 -0
  86. package/assets/map-1777/icons/map-1777-night-sand.pattern.svg +15 -0
  87. package/assets/map-1777/icons/map-1777-night-water-ripples.pattern.svg +9 -0
  88. package/assets/map-1777/icons/map-1777-night-wetland.pattern.svg +8 -0
  89. package/assets/map-1777/icons/map-1777-night-woodland.pattern.svg +121 -0
  90. package/assets/map-1777/icons/map-1777-orchard.pattern.svg +89 -0
  91. package/assets/{ferraris/icons/ferraris-paper-grain.pattern.svg → map-1777/icons/map-1777-paper-grain.pattern.svg} +1 -1
  92. package/assets/map-1777/icons/map-1777-residential.pattern.svg +5 -0
  93. package/assets/map-1777/icons/map-1777-water-ripples.pattern.svg +9 -0
  94. package/assets/map-1777/icons/map-1777-wetland.pattern.svg +8 -0
  95. package/assets/map-1777/icons/map-1777-woodland.pattern.svg +121 -0
  96. package/assets/streets/build-trees.mjs +425 -0
  97. package/assets/streets/icons/aerialway-dark.svg +11 -0
  98. package/assets/streets/icons/aerialway-monochrome-dark.svg +11 -0
  99. package/assets/streets/icons/aerialway-monochrome.svg +11 -0
  100. package/assets/streets/icons/aerialway.svg +11 -0
  101. package/assets/streets/icons/airport-dark.svg +11 -0
  102. package/assets/streets/icons/airport-monochrome-dark.svg +11 -0
  103. package/assets/streets/icons/airport-monochrome.svg +11 -0
  104. package/assets/streets/icons/airport.svg +11 -0
  105. package/assets/streets/icons/amusement-park-dark.svg +11 -0
  106. package/assets/streets/icons/amusement-park-monochrome-dark.svg +11 -0
  107. package/assets/streets/icons/amusement-park-monochrome.svg +11 -0
  108. package/assets/streets/icons/amusement-park.svg +11 -0
  109. package/assets/streets/icons/aquarium-dark.svg +11 -0
  110. package/assets/streets/icons/aquarium-monochrome-dark.svg +11 -0
  111. package/assets/streets/icons/aquarium-monochrome.svg +11 -0
  112. package/assets/streets/icons/aquarium.svg +11 -0
  113. package/assets/streets/icons/art-gallery-dark.svg +11 -0
  114. package/assets/streets/icons/art-gallery-monochrome-dark.svg +11 -0
  115. package/assets/streets/icons/art-gallery-monochrome.svg +11 -0
  116. package/assets/streets/icons/art-gallery.svg +11 -0
  117. package/assets/streets/icons/bank-dark.svg +11 -0
  118. package/assets/streets/icons/bank-monochrome-dark.svg +11 -0
  119. package/assets/streets/icons/bank-monochrome.svg +11 -0
  120. package/assets/streets/icons/bank.svg +11 -0
  121. package/assets/streets/icons/bar-dark.svg +11 -0
  122. package/assets/streets/icons/bar-monochrome-dark.svg +11 -0
  123. package/assets/streets/icons/bar-monochrome.svg +11 -0
  124. package/assets/streets/icons/bar.svg +11 -0
  125. package/assets/streets/icons/beach-dark.svg +11 -0
  126. package/assets/streets/icons/beach-monochrome-dark.svg +11 -0
  127. package/assets/streets/icons/beach-monochrome.svg +11 -0
  128. package/assets/streets/icons/beach.svg +11 -0
  129. package/assets/streets/icons/beauty-dark.svg +11 -0
  130. package/assets/streets/icons/beauty-monochrome-dark.svg +11 -0
  131. package/assets/streets/icons/beauty-monochrome.svg +11 -0
  132. package/assets/streets/icons/beauty.svg +11 -0
  133. package/assets/streets/icons/bookstore-dark.svg +11 -0
  134. package/assets/streets/icons/bookstore-monochrome-dark.svg +11 -0
  135. package/assets/streets/icons/bookstore-monochrome.svg +11 -0
  136. package/assets/streets/icons/bookstore.svg +11 -0
  137. package/assets/streets/icons/buddhist-dark.svg +11 -0
  138. package/assets/streets/icons/buddhist-monochrome-dark.svg +11 -0
  139. package/assets/streets/icons/buddhist-monochrome.svg +11 -0
  140. package/assets/streets/icons/buddhist.svg +11 -0
  141. package/assets/streets/icons/bus-dark.svg +11 -0
  142. package/assets/streets/icons/bus-monochrome-dark.svg +11 -0
  143. package/assets/streets/icons/bus-monochrome.svg +11 -0
  144. package/assets/streets/icons/bus.svg +11 -0
  145. package/assets/streets/icons/campsite-dark.svg +11 -0
  146. package/assets/streets/icons/campsite-monochrome-dark.svg +11 -0
  147. package/assets/streets/icons/campsite-monochrome.svg +11 -0
  148. package/assets/streets/icons/campsite.svg +11 -0
  149. package/assets/streets/icons/car-dark.svg +11 -0
  150. package/assets/streets/icons/car-monochrome-dark.svg +11 -0
  151. package/assets/streets/icons/car-monochrome.svg +11 -0
  152. package/assets/streets/icons/car-repair-dark.svg +11 -0
  153. package/assets/streets/icons/car-repair-monochrome-dark.svg +11 -0
  154. package/assets/streets/icons/car-repair-monochrome.svg +11 -0
  155. package/assets/streets/icons/car-repair.svg +11 -0
  156. package/assets/streets/icons/car.svg +11 -0
  157. package/assets/streets/icons/casino-dark.svg +11 -0
  158. package/assets/streets/icons/casino-monochrome-dark.svg +11 -0
  159. package/assets/streets/icons/casino-monochrome.svg +11 -0
  160. package/assets/streets/icons/casino.svg +11 -0
  161. package/assets/streets/icons/castle-dark.svg +11 -0
  162. package/assets/streets/icons/castle-monochrome-dark.svg +11 -0
  163. package/assets/streets/icons/castle-monochrome.svg +11 -0
  164. package/assets/streets/icons/castle.svg +11 -0
  165. package/assets/streets/icons/cemetery-dark.svg +11 -0
  166. package/assets/streets/icons/cemetery-monochrome-dark.svg +11 -0
  167. package/assets/streets/icons/cemetery-monochrome.svg +11 -0
  168. package/assets/streets/icons/cemetery.svg +11 -0
  169. package/assets/streets/icons/charging-station-dark.svg +11 -0
  170. package/assets/streets/icons/charging-station-monochrome-dark.svg +11 -0
  171. package/assets/streets/icons/charging-station-monochrome.svg +11 -0
  172. package/assets/streets/icons/charging-station.svg +11 -0
  173. package/assets/streets/icons/christian-dark.svg +11 -0
  174. package/assets/streets/icons/christian-monochrome-dark.svg +11 -0
  175. package/assets/streets/icons/christian-monochrome.svg +11 -0
  176. package/assets/streets/icons/christian.svg +11 -0
  177. package/assets/streets/icons/cinema-dark.svg +11 -0
  178. package/assets/streets/icons/cinema-monochrome-dark.svg +11 -0
  179. package/assets/streets/icons/cinema-monochrome.svg +11 -0
  180. package/assets/streets/icons/cinema.svg +11 -0
  181. package/assets/streets/icons/clothing-dark.svg +11 -0
  182. package/assets/streets/icons/clothing-monochrome-dark.svg +11 -0
  183. package/assets/streets/icons/clothing-monochrome.svg +11 -0
  184. package/assets/streets/icons/clothing.svg +11 -0
  185. package/assets/streets/icons/coffee-dark.svg +11 -0
  186. package/assets/streets/icons/coffee-monochrome-dark.svg +11 -0
  187. package/assets/streets/icons/coffee-monochrome.svg +11 -0
  188. package/assets/streets/icons/coffee.svg +4 -5
  189. package/assets/streets/icons/college-dark.svg +11 -0
  190. package/assets/streets/icons/college-monochrome-dark.svg +11 -0
  191. package/assets/streets/icons/college-monochrome.svg +11 -0
  192. package/assets/streets/icons/college.svg +11 -0
  193. package/assets/streets/icons/community-dark.svg +11 -0
  194. package/assets/streets/icons/community-monochrome-dark.svg +11 -0
  195. package/assets/streets/icons/community-monochrome.svg +11 -0
  196. package/assets/streets/icons/community.svg +11 -0
  197. package/assets/streets/icons/convenience-dark.svg +11 -0
  198. package/assets/streets/icons/convenience-monochrome-dark.svg +11 -0
  199. package/assets/streets/icons/convenience-monochrome.svg +11 -0
  200. package/assets/streets/icons/convenience.svg +11 -0
  201. package/assets/streets/icons/culture-dark.svg +11 -0
  202. package/assets/streets/icons/culture-monochrome-dark.svg +11 -0
  203. package/assets/streets/icons/culture-monochrome.svg +11 -0
  204. package/assets/streets/icons/culture.svg +4 -5
  205. package/assets/streets/icons/dentist-dark.svg +11 -0
  206. package/assets/streets/icons/dentist-monochrome-dark.svg +11 -0
  207. package/assets/streets/icons/dentist-monochrome.svg +11 -0
  208. package/assets/streets/icons/dentist.svg +11 -0
  209. package/assets/streets/icons/doctor-dark.svg +11 -0
  210. package/assets/streets/icons/doctor-monochrome-dark.svg +11 -0
  211. package/assets/streets/icons/doctor-monochrome.svg +11 -0
  212. package/assets/streets/icons/doctor.svg +11 -0
  213. package/assets/streets/icons/dog-park-dark.svg +11 -0
  214. package/assets/streets/icons/dog-park-monochrome-dark.svg +11 -0
  215. package/assets/streets/icons/dog-park-monochrome.svg +11 -0
  216. package/assets/streets/icons/dog-park.svg +11 -0
  217. package/assets/streets/icons/drinking-water-dark.svg +11 -0
  218. package/assets/streets/icons/drinking-water-monochrome-dark.svg +11 -0
  219. package/assets/streets/icons/drinking-water-monochrome.svg +11 -0
  220. package/assets/streets/icons/drinking-water.svg +11 -0
  221. package/assets/streets/icons/education-dark.svg +11 -0
  222. package/assets/streets/icons/education-monochrome-dark.svg +11 -0
  223. package/assets/streets/icons/education-monochrome.svg +11 -0
  224. package/assets/streets/icons/education.svg +5 -6
  225. package/assets/streets/icons/electronics-dark.svg +11 -0
  226. package/assets/streets/icons/electronics-monochrome-dark.svg +11 -0
  227. package/assets/streets/icons/electronics-monochrome.svg +11 -0
  228. package/assets/streets/icons/electronics.svg +11 -0
  229. package/assets/streets/icons/embassy-dark.svg +11 -0
  230. package/assets/streets/icons/embassy-monochrome-dark.svg +11 -0
  231. package/assets/streets/icons/embassy-monochrome.svg +11 -0
  232. package/assets/streets/icons/embassy.svg +11 -0
  233. package/assets/streets/icons/entertainment-dark.svg +11 -0
  234. package/assets/streets/icons/entertainment-monochrome-dark.svg +11 -0
  235. package/assets/streets/icons/entertainment-monochrome.svg +11 -0
  236. package/assets/streets/icons/entertainment.svg +11 -0
  237. package/assets/streets/icons/fast-food-dark.svg +11 -0
  238. package/assets/streets/icons/fast-food-monochrome-dark.svg +11 -0
  239. package/assets/streets/icons/fast-food-monochrome.svg +11 -0
  240. package/assets/streets/icons/fast-food.svg +11 -0
  241. package/assets/streets/icons/ferry-dark.svg +11 -0
  242. package/assets/streets/icons/ferry-monochrome-dark.svg +11 -0
  243. package/assets/streets/icons/ferry-monochrome.svg +11 -0
  244. package/assets/streets/icons/ferry.svg +11 -0
  245. package/assets/streets/icons/fire-station-dark.svg +11 -0
  246. package/assets/streets/icons/fire-station-monochrome-dark.svg +11 -0
  247. package/assets/streets/icons/fire-station-monochrome.svg +11 -0
  248. package/assets/streets/icons/fire-station.svg +11 -0
  249. package/assets/streets/icons/fitness-dark.svg +11 -0
  250. package/assets/streets/icons/fitness-monochrome-dark.svg +11 -0
  251. package/assets/streets/icons/fitness-monochrome.svg +11 -0
  252. package/assets/streets/icons/fitness.svg +11 -0
  253. package/assets/streets/icons/florist-dark.svg +11 -0
  254. package/assets/streets/icons/florist-monochrome-dark.svg +11 -0
  255. package/assets/streets/icons/florist-monochrome.svg +11 -0
  256. package/assets/streets/icons/florist.svg +11 -0
  257. package/assets/streets/icons/food-dark.svg +11 -0
  258. package/assets/streets/icons/food-monochrome-dark.svg +11 -0
  259. package/assets/streets/icons/food-monochrome.svg +11 -0
  260. package/assets/streets/icons/food.svg +4 -5
  261. package/assets/streets/icons/fuel-dark.svg +11 -0
  262. package/assets/streets/icons/fuel-monochrome-dark.svg +11 -0
  263. package/assets/streets/icons/fuel-monochrome.svg +11 -0
  264. package/assets/streets/icons/fuel.svg +11 -0
  265. package/assets/streets/icons/garden-dark.svg +11 -0
  266. package/assets/streets/icons/garden-monochrome-dark.svg +11 -0
  267. package/assets/streets/icons/garden-monochrome.svg +11 -0
  268. package/assets/streets/icons/garden.svg +11 -0
  269. package/assets/streets/icons/golf-dark.svg +11 -0
  270. package/assets/streets/icons/golf-monochrome-dark.svg +11 -0
  271. package/assets/streets/icons/golf-monochrome.svg +11 -0
  272. package/assets/streets/icons/golf.svg +11 -0
  273. package/assets/streets/icons/grocery-dark.svg +11 -0
  274. package/assets/streets/icons/grocery-monochrome-dark.svg +11 -0
  275. package/assets/streets/icons/grocery-monochrome.svg +11 -0
  276. package/assets/streets/icons/grocery.svg +11 -0
  277. package/assets/streets/icons/harbor-dark.svg +11 -0
  278. package/assets/streets/icons/harbor-monochrome-dark.svg +11 -0
  279. package/assets/streets/icons/harbor-monochrome.svg +11 -0
  280. package/assets/streets/icons/harbor.svg +11 -0
  281. package/assets/streets/icons/hardware-dark.svg +11 -0
  282. package/assets/streets/icons/hardware-monochrome-dark.svg +11 -0
  283. package/assets/streets/icons/hardware-monochrome.svg +11 -0
  284. package/assets/streets/icons/hardware.svg +11 -0
  285. package/assets/streets/icons/health-dark.svg +11 -0
  286. package/assets/streets/icons/health-monochrome-dark.svg +11 -0
  287. package/assets/streets/icons/health-monochrome.svg +11 -0
  288. package/assets/streets/icons/health.svg +4 -5
  289. package/assets/streets/icons/historic-dark.svg +11 -0
  290. package/assets/streets/icons/historic-monochrome-dark.svg +11 -0
  291. package/assets/streets/icons/historic-monochrome.svg +11 -0
  292. package/assets/streets/icons/historic.svg +11 -0
  293. package/assets/streets/icons/jewish-dark.svg +11 -0
  294. package/assets/streets/icons/jewish-monochrome-dark.svg +11 -0
  295. package/assets/streets/icons/jewish-monochrome.svg +11 -0
  296. package/assets/streets/icons/jewish.svg +11 -0
  297. package/assets/streets/icons/landmark-dark.svg +11 -0
  298. package/assets/streets/icons/landmark-monochrome-dark.svg +11 -0
  299. package/assets/streets/icons/landmark-monochrome.svg +11 -0
  300. package/assets/streets/icons/landmark.svg +11 -0
  301. package/assets/streets/icons/laundry-dark.svg +11 -0
  302. package/assets/streets/icons/laundry-monochrome-dark.svg +11 -0
  303. package/assets/streets/icons/laundry-monochrome.svg +11 -0
  304. package/assets/streets/icons/laundry.svg +11 -0
  305. package/assets/streets/icons/library-dark.svg +11 -0
  306. package/assets/streets/icons/library-monochrome-dark.svg +11 -0
  307. package/assets/streets/icons/library-monochrome.svg +11 -0
  308. package/assets/streets/icons/library.svg +11 -0
  309. package/assets/streets/icons/lodging-dark.svg +11 -0
  310. package/assets/streets/icons/lodging-monochrome-dark.svg +11 -0
  311. package/assets/streets/icons/lodging-monochrome.svg +11 -0
  312. package/assets/streets/icons/lodging.svg +3 -4
  313. package/assets/streets/icons/major-transit-dark.svg +11 -0
  314. package/assets/streets/icons/major-transit-monochrome-dark.svg +11 -0
  315. package/assets/streets/icons/major-transit-monochrome.svg +11 -0
  316. package/assets/streets/icons/major-transit.svg +4 -5
  317. package/assets/streets/icons/monument-dark.svg +11 -0
  318. package/assets/streets/icons/monument-monochrome-dark.svg +11 -0
  319. package/assets/streets/icons/monument-monochrome.svg +11 -0
  320. package/assets/streets/icons/monument.svg +11 -0
  321. package/assets/streets/icons/mountain-dark.svg +11 -0
  322. package/assets/streets/icons/mountain-monochrome-dark.svg +11 -0
  323. package/assets/streets/icons/mountain-monochrome.svg +11 -0
  324. package/assets/streets/icons/mountain.svg +11 -0
  325. package/assets/streets/icons/music-dark.svg +11 -0
  326. package/assets/streets/icons/music-monochrome-dark.svg +11 -0
  327. package/assets/streets/icons/music-monochrome.svg +11 -0
  328. package/assets/streets/icons/music.svg +11 -0
  329. package/assets/streets/icons/muslim-dark.svg +11 -0
  330. package/assets/streets/icons/muslim-monochrome-dark.svg +11 -0
  331. package/assets/streets/icons/muslim-monochrome.svg +11 -0
  332. package/assets/streets/icons/muslim.svg +11 -0
  333. package/assets/streets/icons/natural-dark.svg +11 -0
  334. package/assets/streets/icons/natural-monochrome-dark.svg +11 -0
  335. package/assets/streets/icons/natural-monochrome.svg +11 -0
  336. package/assets/streets/icons/natural.svg +11 -0
  337. package/assets/streets/icons/nature-dark.svg +11 -0
  338. package/assets/streets/icons/nature-monochrome-dark.svg +11 -0
  339. package/assets/streets/icons/nature-monochrome.svg +11 -0
  340. package/assets/streets/icons/nature.svg +11 -0
  341. package/assets/streets/icons/nightclub-dark.svg +11 -0
  342. package/assets/streets/icons/nightclub-monochrome-dark.svg +11 -0
  343. package/assets/streets/icons/nightclub-monochrome.svg +11 -0
  344. package/assets/streets/icons/nightclub.svg +11 -0
  345. package/assets/streets/icons/parking-dark.svg +11 -0
  346. package/assets/streets/icons/parking-garage-dark.svg +11 -0
  347. package/assets/streets/icons/parking-garage-monochrome-dark.svg +11 -0
  348. package/assets/streets/icons/parking-garage-monochrome.svg +11 -0
  349. package/assets/streets/icons/parking-garage.svg +11 -0
  350. package/assets/streets/icons/parking-monochrome-dark.svg +11 -0
  351. package/assets/streets/icons/parking-monochrome.svg +11 -0
  352. package/assets/streets/icons/parking.svg +3 -4
  353. package/assets/streets/icons/pharmacy-dark.svg +11 -0
  354. package/assets/streets/icons/pharmacy-monochrome-dark.svg +11 -0
  355. package/assets/streets/icons/pharmacy-monochrome.svg +11 -0
  356. package/assets/streets/icons/pharmacy.svg +11 -0
  357. package/assets/streets/icons/playground-dark.svg +11 -0
  358. package/assets/streets/icons/playground-monochrome-dark.svg +11 -0
  359. package/assets/streets/icons/playground-monochrome.svg +11 -0
  360. package/assets/streets/icons/playground.svg +11 -0
  361. package/assets/streets/icons/plaza-dark.svg +11 -0
  362. package/assets/streets/icons/plaza-monochrome-dark.svg +11 -0
  363. package/assets/streets/icons/plaza-monochrome.svg +11 -0
  364. package/assets/streets/icons/plaza.svg +11 -0
  365. package/assets/streets/icons/police-dark.svg +11 -0
  366. package/assets/streets/icons/police-monochrome-dark.svg +11 -0
  367. package/assets/streets/icons/police-monochrome.svg +11 -0
  368. package/assets/streets/icons/police.svg +11 -0
  369. package/assets/streets/icons/post-dark.svg +11 -0
  370. package/assets/streets/icons/post-monochrome-dark.svg +11 -0
  371. package/assets/streets/icons/post-monochrome.svg +11 -0
  372. package/assets/streets/icons/post.svg +11 -0
  373. package/assets/streets/icons/prison-dark.svg +11 -0
  374. package/assets/streets/icons/prison-monochrome-dark.svg +11 -0
  375. package/assets/streets/icons/prison-monochrome.svg +11 -0
  376. package/assets/streets/icons/prison.svg +11 -0
  377. package/assets/streets/icons/rail-dark.svg +11 -0
  378. package/assets/streets/icons/rail-light-dark.svg +11 -0
  379. package/assets/streets/icons/rail-light-monochrome-dark.svg +11 -0
  380. package/assets/streets/icons/rail-light-monochrome.svg +11 -0
  381. package/assets/streets/icons/rail-light.svg +11 -0
  382. package/assets/streets/icons/rail-monochrome-dark.svg +11 -0
  383. package/assets/streets/icons/rail-monochrome.svg +11 -0
  384. package/assets/streets/icons/rail.svg +11 -0
  385. package/assets/streets/icons/services-dark.svg +11 -0
  386. package/assets/streets/icons/services-monochrome-dark.svg +11 -0
  387. package/assets/streets/icons/services-monochrome.svg +11 -0
  388. package/assets/streets/icons/services.svg +4 -5
  389. package/assets/streets/icons/shopping-dark.svg +11 -0
  390. package/assets/streets/icons/shopping-monochrome-dark.svg +11 -0
  391. package/assets/streets/icons/shopping-monochrome.svg +11 -0
  392. package/assets/streets/icons/shopping.svg +4 -5
  393. package/assets/streets/icons/sidewalk-dot-dark.svg +1 -1
  394. package/assets/streets/icons/sidewalk-dot.svg +1 -1
  395. package/assets/streets/icons/sport-dark.svg +11 -0
  396. package/assets/streets/icons/sport-monochrome-dark.svg +11 -0
  397. package/assets/streets/icons/sport-monochrome.svg +11 -0
  398. package/assets/streets/icons/sport.svg +11 -0
  399. package/assets/streets/icons/stadium-dark.svg +11 -0
  400. package/assets/streets/icons/stadium-monochrome-dark.svg +11 -0
  401. package/assets/streets/icons/stadium-monochrome.svg +11 -0
  402. package/assets/streets/icons/stadium.svg +11 -0
  403. package/assets/streets/icons/street-art-dark.svg +11 -0
  404. package/assets/streets/icons/street-art-monochrome-dark.svg +11 -0
  405. package/assets/streets/icons/street-art-monochrome.svg +11 -0
  406. package/assets/streets/icons/street-art.svg +11 -0
  407. package/assets/streets/icons/streets-tree-columnar-dark.pattern.svg +108 -0
  408. package/assets/streets/icons/streets-tree-columnar.pattern.svg +108 -0
  409. package/assets/streets/icons/streets-tree-conifer-dark.pattern.svg +57 -0
  410. package/assets/streets/icons/streets-tree-conifer.pattern.svg +57 -0
  411. package/assets/streets/icons/streets-tree-open-dark.pattern.svg +108 -0
  412. package/assets/streets/icons/streets-tree-open.pattern.svg +108 -0
  413. package/assets/streets/icons/streets-tree-palm-fan-dark.pattern.svg +108 -0
  414. package/assets/streets/icons/streets-tree-palm-fan.pattern.svg +108 -0
  415. package/assets/streets/icons/streets-tree-palm-feather-dark.pattern.svg +305 -0
  416. package/assets/streets/icons/streets-tree-palm-feather.pattern.svg +305 -0
  417. package/assets/streets/icons/streets-tree-round-dark.pattern.svg +108 -0
  418. package/assets/streets/icons/streets-tree-round.pattern.svg +108 -0
  419. package/assets/streets/icons/streets-tree-tall-dark.pattern.svg +108 -0
  420. package/assets/streets/icons/streets-tree-tall.pattern.svg +108 -0
  421. package/assets/streets/icons/swimming-dark.svg +11 -0
  422. package/assets/streets/icons/swimming-monochrome-dark.svg +11 -0
  423. package/assets/streets/icons/swimming-monochrome.svg +11 -0
  424. package/assets/streets/icons/swimming.svg +11 -0
  425. package/assets/streets/icons/theatre-dark.svg +11 -0
  426. package/assets/streets/icons/theatre-monochrome-dark.svg +11 -0
  427. package/assets/streets/icons/theatre-monochrome.svg +11 -0
  428. package/assets/streets/icons/theatre.svg +11 -0
  429. package/assets/streets/icons/toilet-dark.svg +11 -0
  430. package/assets/streets/icons/toilet-monochrome-dark.svg +11 -0
  431. package/assets/streets/icons/toilet-monochrome.svg +11 -0
  432. package/assets/streets/icons/toilet.svg +11 -0
  433. package/assets/streets/icons/town-hall-dark.svg +11 -0
  434. package/assets/streets/icons/town-hall-monochrome-dark.svg +11 -0
  435. package/assets/streets/icons/town-hall-monochrome.svg +11 -0
  436. package/assets/streets/icons/town-hall.svg +11 -0
  437. package/assets/streets/icons/viewpoint-dark.svg +11 -0
  438. package/assets/streets/icons/viewpoint-monochrome-dark.svg +11 -0
  439. package/assets/streets/icons/viewpoint-monochrome.svg +11 -0
  440. package/assets/streets/icons/viewpoint.svg +11 -0
  441. package/assets/streets/icons/waterfall-dark.svg +11 -0
  442. package/assets/streets/icons/waterfall-monochrome-dark.svg +11 -0
  443. package/assets/streets/icons/waterfall-monochrome.svg +11 -0
  444. package/assets/streets/icons/waterfall.svg +11 -0
  445. package/assets/streets/icons/worship-dark.svg +11 -0
  446. package/assets/streets/icons/worship-monochrome-dark.svg +11 -0
  447. package/assets/streets/icons/worship-monochrome.svg +11 -0
  448. package/assets/streets/icons/worship.svg +11 -0
  449. package/assets/streets/icons/zoo-dark.svg +11 -0
  450. package/assets/streets/icons/zoo-monochrome-dark.svg +11 -0
  451. package/assets/streets/icons/zoo-monochrome.svg +11 -0
  452. package/assets/streets/icons/zoo.svg +11 -0
  453. package/assets/streets/models/streets-tree-columnar.far.glb +0 -0
  454. package/assets/streets/models/streets-tree-columnar.glb +0 -0
  455. package/assets/streets/models/streets-tree-conifer.far.glb +0 -0
  456. package/assets/streets/models/streets-tree-conifer.glb +0 -0
  457. package/assets/streets/models/streets-tree-open.far.glb +0 -0
  458. package/assets/streets/models/streets-tree-open.glb +0 -0
  459. package/assets/streets/models/streets-tree-palm-fan.far.glb +0 -0
  460. package/assets/streets/models/streets-tree-palm-fan.glb +0 -0
  461. package/assets/streets/models/streets-tree-palm-feather.far.glb +0 -0
  462. package/assets/streets/models/streets-tree-palm-feather.glb +0 -0
  463. package/assets/streets/models/streets-tree-round.far.glb +0 -0
  464. package/assets/streets/models/streets-tree-round.glb +0 -0
  465. package/assets/streets/models/streets-tree-tall.far.glb +0 -0
  466. package/assets/streets/models/streets-tree-tall.glb +0 -0
  467. package/dist/index.d.ts +527 -262
  468. package/dist/index.js +12511 -11511
  469. package/docs/design-and-assets.md +216 -0
  470. package/docs/map-1777.md +91 -0
  471. package/package.json +11 -14
  472. package/GENERATED_OUTPUT_LICENSE.md +0 -21
  473. package/NOTICE +0 -9
  474. package/TRADEMARKS.md +0 -10
  475. package/assets/cyberpunk/fonts/Oxanium-Medium.ttf +0 -0
  476. package/assets/cyberpunk/fonts/Oxanium-SemiBold.ttf +0 -0
  477. package/assets/cyberpunk/fonts/README.md +0 -22
  478. package/assets/cyberpunk/icons/cyber-circuit.pattern.svg +0 -10
  479. package/assets/cyberpunk/icons/cyber-data-grid.pattern.svg +0 -11
  480. package/assets/cyberpunk/icons/cyber-target-brackets.svg +0 -15
  481. package/assets/ferraris/icons/ferraris-crop-hatch.pattern.svg +0 -10
  482. package/assets/ferraris/icons/ferraris-heath.pattern.svg +0 -10
  483. package/assets/ferraris/icons/ferraris-orchard.pattern.svg +0 -20
  484. package/assets/ferraris/icons/ferraris-residential.pattern.svg +0 -13
  485. package/assets/ferraris/icons/ferraris-water-ripples.pattern.svg +0 -12
  486. package/assets/ferraris/icons/ferraris-wetland.pattern.svg +0 -9
  487. package/assets/ferraris/icons/ferraris-woodland.pattern.svg +0 -21
  488. package/assets/harad/README.md +0 -31
  489. package/assets/harad/icons/harad-arable.pattern.svg +0 -10
  490. package/assets/harad/icons/harad-conifer.pattern.svg +0 -22
  491. package/assets/harad/icons/harad-deciduous.pattern.svg +0 -16
  492. package/assets/harad/icons/harad-orchard.pattern.svg +0 -17
  493. package/assets/harad/icons/harad-paper-grain.pattern.svg +0 -20
  494. package/assets/harad/icons/harad-sand.pattern.svg +0 -21
  495. package/assets/harad/icons/harad-settlement.pattern.svg +0 -12
  496. package/assets/harad/icons/harad-water-lines.pattern.svg +0 -7
  497. package/assets/harad/icons/harad-wetland.pattern.svg +0 -14
  498. package/assets/matrix/fonts/Oxanium-Medium.ttf +0 -0
  499. package/assets/matrix/fonts/Oxanium-SemiBold.ttf +0 -0
  500. package/assets/matrix/fonts/README.md +0 -22
  501. package/assets/matrix/icons/matrix-crt-scanlines.pattern.svg +0 -13
  502. package/assets/matrix/icons/matrix-data-grid.pattern.svg +0 -11
  503. package/assets/matrix/icons/matrix-poi-node.svg +0 -10
  504. package/assets/verdant/icons/coffee.svg +0 -9
  505. package/assets/verdant/icons/crosswalk.svg +0 -10
  506. package/assets/verdant/icons/culture.svg +0 -7
  507. package/assets/verdant/icons/education.svg +0 -6
  508. package/assets/verdant/icons/food.svg +0 -6
  509. package/assets/verdant/icons/health.svg +0 -6
  510. package/assets/verdant/icons/lodging.svg +0 -6
  511. package/assets/verdant/icons/major-transit.svg +0 -7
  512. package/assets/verdant/icons/services.svg +0 -6
  513. package/assets/verdant/icons/shopping.svg +0 -6
  514. package/assets/verdant/icons/verdant-field-hatch.pattern.svg +0 -13
  515. package/assets/verdant/icons/verdant-forest-canopy.pattern.svg +0 -14
  516. package/assets/verdant/icons/verdant-heath-tufts.pattern.svg +0 -9
  517. package/assets/verdant/icons/verdant-meadow-tufts.pattern.svg +0 -8
  518. package/assets/verdant/icons/verdant-orchard.pattern.svg +0 -11
  519. package/assets/verdant/icons/verdant-paper-fiber.pattern.svg +0 -11
  520. package/assets/verdant/icons/verdant-residential-hatch.pattern.svg +0 -8
  521. package/assets/verdant/icons/verdant-scree.pattern.svg +0 -10
  522. package/assets/verdant/icons/verdant-water-lines.pattern.svg +0 -7
  523. package/assets/verdant/icons/verdant-wetland-reeds.pattern.svg +0 -8
  524. /package/assets/{ferraris/icons/ferraris-sand.pattern.svg → map-1777/icons/map-1777-sand.pattern.svg} +0 -0
@@ -0,0 +1,121 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="64" height="64" viewBox="0 0 64 64">
2
+ <g fill="none" stroke="#4D5A3C" stroke-width=".45" opacity="0.21" stroke-linecap="round">
3
+ <path d="m50.70 23.40 0.50 -0.30"/>
4
+ <path d="m20.43 42.57 1.69 -0.13"/>
5
+ <path d="m52.16 61.74 0.78 0.04"/>
6
+ <path d="m21.89 18.91 1.97 0.21"/>
7
+ <path d="m53.62 38.08 1.06 -0.22"/>
8
+ <path d="m23.35 57.25 2.25 -0.05"/>
9
+ <path d="m55.08 14.42 1.34 0.12"/>
10
+ <path d="m24.81 33.59 2.53 0.29"/>
11
+ <path d="m56.54 52.76 1.62 -0.14"/>
12
+ <path d="m26.27 9.93 0.71 0.03"/>
13
+ <path d="m58.00 29.10 1.90 0.20"/>
14
+ <path d="m27.73 48.27 0.99 -0.23"/>
15
+ <path d="m59.46 5.44 2.18 -0.06"/>
16
+ <path d="m29.19 24.61 1.27 0.11"/>
17
+ <path d="m60.92 43.78 2.46 0.28"/>
18
+ <path d="m30.65 62.95 1.55 -0.15"/>
19
+ <path d="m62.38 20.12 0.64 0.02"/>
20
+ <path d="m32.11 39.29 1.83 0.19"/>
21
+ <path d="m1.84 58.46 0.92 -0.24"/>
22
+ <path d="m33.57 15.63 2.11 -0.07"/>
23
+ <path d="m3.30 34.80 1.20 0.10"/>
24
+ <path d="m35.03 53.97 2.39 0.27"/>
25
+ <path d="m4.76 11.14 1.48 -0.16"/>
26
+ <path d="m36.49 30.31 0.57 0.01"/>
27
+ <path d="m6.22 49.48 1.76 0.18"/>
28
+ <path d="m37.95 6.65 0.85 -0.25"/>
29
+ <path d="m7.68 25.82 2.04 -0.08"/>
30
+ <path d="m39.41 44.99 1.13 0.09"/>
31
+ <path d="m9.14 2.16 2.32 0.26"/>
32
+ <path d="m40.87 21.33 1.41 -0.17"/>
33
+ <path d="m10.60 40.50 2.60 0.00"/>
34
+ <path d="m42.33 59.67 1.69 0.17"/>
35
+ <path d="m12.06 16.84 0.78 -0.26"/>
36
+ <path d="m43.79 36.01 1.97 -0.09"/>
37
+ <path d="m13.52 55.18 1.06 0.08"/>
38
+ <path d="m45.25 12.35 2.25 0.25"/>
39
+ <path d="m14.98 31.52 1.34 -0.18"/>
40
+ <path d="m46.71 50.69 2.53 -0.01"/>
41
+ <path d="m16.44 7.86 1.62 0.16"/>
42
+ <path d="m48.17 27.03 0.71 -0.27"/>
43
+ <path d="m17.90 46.20 1.90 -0.10"/>
44
+ <path d="m49.63 3.37 0.99 0.07"/>
45
+ <path d="m19.36 22.54 2.18 0.24"/>
46
+ <path d="m51.09 41.71 1.27 -0.19"/>
47
+ <path d="m20.82 60.88 2.46 -0.02"/>
48
+ <path d="m52.55 18.05 1.55 0.15"/>
49
+ <path d="m22.28 37.22 0.64 -0.28"/>
50
+ <path d="m54.01 56.39 1.83 -0.11"/>
51
+ <path d="m23.74 13.56 0.92 0.06"/>
52
+ <path d="m55.47 32.73 2.11 0.23"/>
53
+ <path d="m25.20 51.90 1.20 -0.20"/>
54
+ <path d="m56.93 9.07 2.39 -0.03"/>
55
+ <path d="m26.66 28.24 1.48 0.14"/>
56
+ <path d="m58.39 47.41 0.57 -0.29"/>
57
+ <path d="m28.12 4.58 1.76 -0.12"/>
58
+ <path d="m59.85 23.75 0.85 0.05"/>
59
+ <path d="m29.58 42.92 2.04 0.22"/>
60
+ <path d="m61.31 62.09 1.13 -0.21"/>
61
+ <path d="m31.04 19.26 2.32 -0.04"/>
62
+ <path d="m62.77 38.43 1.41 0.13"/>
63
+ <path d="m32.50 57.60 2.60 -0.30"/>
64
+ <path d="m2.23 14.77 1.69 -0.13"/>
65
+ <path d="m33.96 33.94 0.78 0.04"/>
66
+ <path d="m3.69 53.11 1.97 0.21"/>
67
+ <path d="m35.42 10.28 1.06 -0.22"/>
68
+ <path d="m5.15 29.45 2.25 -0.05"/>
69
+ <path d="m36.88 48.62 1.34 0.12"/>
70
+ <path d="m6.61 5.79 2.53 0.29"/>
71
+ <path d="m38.34 24.96 1.62 -0.14"/>
72
+ <path d="m8.07 44.13 0.71 0.03"/>
73
+ <path d="m39.80 1.30 1.90 0.20"/>
74
+ <path d="m9.53 20.47 0.99 -0.23"/>
75
+ <path d="m41.26 39.64 2.18 -0.06"/>
76
+ <path d="m10.99 58.81 1.27 0.11"/>
77
+ <path d="m42.72 15.98 2.46 0.28"/>
78
+ <path d="m12.45 35.15 1.55 -0.15"/>
79
+ <path d="m44.18 54.32 0.64 0.02"/>
80
+ <path d="m13.91 11.49 1.83 0.19"/>
81
+ <path d="m45.64 30.66 0.92 -0.24"/>
82
+ <path d="m15.37 49.83 2.11 -0.07"/>
83
+ <path d="m47.10 7.00 1.20 0.10"/>
84
+ <path d="m16.83 26.17 2.39 0.27"/>
85
+ <path d="m48.56 45.34 1.48 -0.16"/>
86
+ <path d="m18.29 2.51 0.57 0.01"/>
87
+ <path d="m50.02 21.68 1.76 0.18"/>
88
+ <path d="m19.75 40.85 0.85 -0.25"/>
89
+ <path d="m51.48 60.02 2.04 -0.08"/>
90
+ <path d="m21.21 17.19 1.13 0.09"/>
91
+ <path d="m52.94 36.36 2.32 0.26"/>
92
+ <path d="m22.67 55.53 1.41 -0.17"/>
93
+ <path d="m54.40 12.70 2.60 0.00"/>
94
+ <path d="m24.13 31.87 1.69 0.17"/>
95
+ <path d="m55.86 51.04 0.78 -0.26"/>
96
+ <path d="m25.59 8.21 1.97 -0.09"/>
97
+ <path d="m57.32 27.38 1.06 0.08"/>
98
+ <path d="m27.05 46.55 2.25 0.25"/>
99
+ <path d="m58.78 3.72 1.34 -0.18"/>
100
+ <path d="m28.51 22.89 2.53 -0.01"/>
101
+ <path d="m60.24 42.06 1.62 0.16"/>
102
+ <path d="m29.97 61.23 0.71 -0.27"/>
103
+ <path d="m61.70 18.40 1.90 -0.10"/>
104
+ <path d="m31.43 37.57 0.99 0.07"/>
105
+ <path d="m1.16 56.74 2.18 0.24"/>
106
+ <path d="m32.89 13.91 1.27 -0.19"/>
107
+ <path d="m2.62 33.08 2.46 -0.02"/>
108
+ <path d="m34.35 52.25 1.55 0.15"/>
109
+ <path d="m4.08 9.42 0.64 -0.28"/>
110
+ <path d="m35.81 28.59 1.83 -0.11"/>
111
+ <path d="m5.54 47.76 0.92 0.06"/>
112
+ <path d="m37.27 4.93 2.11 0.23"/>
113
+ <path d="m7.00 24.10 1.20 -0.20"/>
114
+ <path d="m38.73 43.27 2.39 -0.03"/>
115
+ <path d="m8.46 62.44 1.48 0.14"/>
116
+ <path d="m40.19 19.61 0.57 -0.29"/>
117
+ </g>
118
+ <g fill="none" stroke="#EEE5CE" stroke-width=".5" opacity=".24" stroke-linecap="round">
119
+ <path d="m5 10 6-.4m22 8 4 .3m-20 19 5-.5m22 12 7 .2m-40 7 5-.2m37-53 4 .3m-11 25 6-.4"/>
120
+ </g>
121
+ </svg>
@@ -0,0 +1,425 @@
1
+ // Original Streets tree artwork. Near/far glTF meshes and their top-down SVG crowns share
2
+ // one geometry description. Run `node packages/maps/assets/streets/build-trees.mjs [--check]`.
3
+ import {mkdir, readFile, writeFile} from 'node:fs/promises';
4
+ import {dirname, join} from 'node:path';
5
+ import {fileURLToPath} from 'node:url';
6
+
7
+ const here = dirname(fileURLToPath(import.meta.url));
8
+ const tau = Math.PI * 2;
9
+ const golden = Math.PI * (3 - Math.sqrt(5));
10
+ const add = (a, b) => a.map((n, i) => n + b[i]);
11
+ const mul = (v, n) => v.map((x) => x * n);
12
+ const sub = (a, b) => a.map((n, i) => n - b[i]);
13
+ const cross = (a, b) => [
14
+ a[1] * b[2] - a[2] * b[1],
15
+ a[2] * b[0] - a[0] * b[2],
16
+ a[0] * b[1] - a[1] * b[0],
17
+ ];
18
+ const unit = (v) => mul(v, 1 / (Math.hypot(...v) || 1));
19
+ const dot = (a, b) => a.reduce((n, v, i) => n + v * b[i], 0);
20
+ const mesh = (material) => ({material, positions: [], normals: [], shades: [], indices: []});
21
+ function vertex(m, p, n, shade = 1) {
22
+ m.positions.push(...p);
23
+ m.normals.push(...unit(n));
24
+ m.shades.push(shade);
25
+ return m.shades.length - 1;
26
+ }
27
+ function face(m, a, b, c, outward) {
28
+ const point = (i) => m.positions.slice(i * 3, i * 3 + 3);
29
+ const normal = cross(sub(point(b), point(a)), sub(point(c), point(a)));
30
+ if (dot(normal, outward) < 0) m.indices.push(a, c, b);
31
+ else m.indices.push(a, b, c);
32
+ }
33
+
34
+ // Small irregular lobes, with a continuous normal field and a faceted silhouette. The
35
+ // variation is in the authored mesh, so it never shimmers or changes while the camera moves.
36
+ function crown(m, centre, radii, seed, far, farSides = 6) {
37
+ const sides = far ? farSides : 7;
38
+ const rings = far ? 2 : 4;
39
+ const top = vertex(m, add(centre, [0, radii[1], 0]), [0, 1, 0], 1.07);
40
+ const rows = [];
41
+ for (let r = 1; r < rings; r++) {
42
+ const latitude = (r / rings) * Math.PI;
43
+ const row = [];
44
+ for (let s = 0; s < sides; s++) {
45
+ const angle = (s / sides) * tau + seed * 0.7 + (r % 2) * 0.1;
46
+ const ripple = 1 + 0.065 * Math.sin(angle * 3 + seed) + 0.035 * Math.cos(angle * 5 - seed);
47
+ const n = [
48
+ Math.sin(latitude) * Math.cos(angle),
49
+ Math.cos(latitude),
50
+ Math.sin(latitude) * Math.sin(angle),
51
+ ];
52
+ row.push(
53
+ vertex(
54
+ m,
55
+ add(
56
+ centre,
57
+ n.map((v, i) => v * radii[i] * (i === 1 ? 1 : ripple)),
58
+ ),
59
+ n.map((v, i) => v / radii[i]),
60
+ 0.94 + 0.07 * n[1] + 0.025 * Math.sin(s * 2 + seed),
61
+ ),
62
+ );
63
+ }
64
+ rows.push(row);
65
+ }
66
+ const bottom = vertex(m, add(centre, [0, -radii[1], 0]), [0, -1, 0], 0.86);
67
+ for (let s = 0; s < sides; s++) {
68
+ const n = (s + 1) % sides;
69
+ face(m, top, rows[0][s], rows[0][n], [0, 1, 0]);
70
+ for (let r = 0; r + 1 < rows.length; r++) {
71
+ const out = sub(m.positions.slice(rows[r][s] * 3, rows[r][s] * 3 + 3), centre);
72
+ face(m, rows[r][s], rows[r + 1][s], rows[r + 1][n], out);
73
+ face(m, rows[r][s], rows[r + 1][n], rows[r][n], out);
74
+ }
75
+ face(m, bottom, rows.at(-1)[n], rows.at(-1)[s], [0, -1, 0]);
76
+ }
77
+ }
78
+
79
+ function branch(m, from, to, base, tip, sides) {
80
+ const axis = unit(sub(to, from));
81
+ const u = unit(cross(axis, Math.abs(axis[1]) > 0.9 ? [1, 0, 0] : [0, 1, 0]));
82
+ const v = cross(axis, u);
83
+ const rows = [from, to].map((p, r) =>
84
+ Array.from({length: sides}, (_, s) => {
85
+ const n = add(mul(u, Math.cos((s * tau) / sides)), mul(v, Math.sin((s * tau) / sides)));
86
+ return vertex(
87
+ m,
88
+ add(p, mul(n, r ? tip : base)),
89
+ n,
90
+ 0.94 + 0.06 * Math.cos((s * tau) / sides),
91
+ );
92
+ }),
93
+ );
94
+ for (let s = 0; s < sides; s++) {
95
+ const n = (s + 1) % sides;
96
+ const outward = sub(m.positions.slice(rows[0][s] * 3, rows[0][s] * 3 + 3), from);
97
+ face(m, rows[0][s], rows[1][s], rows[1][n], outward);
98
+ face(m, rows[0][s], rows[1][n], rows[0][n], outward);
99
+ }
100
+ }
101
+
102
+ const broadleaf = {
103
+ round: [
104
+ [-1.95, 7.4, 0.75, 1.85, 1.8, 1.8],
105
+ [1.75, 7.7, 1.1, 1.8, 1.85, 1.75],
106
+ [0.35, 7.05, -2, 1.9, 1.6, 1.7],
107
+ [-0.65, 8.65, -0.65, 1.65, 1.65, 1.7],
108
+ [0.1, 6.85, 2.35, 1.5, 1.35, 1.4],
109
+ ],
110
+ open: [
111
+ [-2.65, 6.6, 0.8, 1.95, 1.15, 1.8],
112
+ [2.55, 7.05, 0.95, 1.9, 1.25, 1.8],
113
+ [0.45, 6.5, -2.5, 2, 1.1, 1.65],
114
+ [-0.9, 7.85, -0.8, 1.8, 1.25, 1.6],
115
+ [-0.15, 6.8, 2.65, 1.75, 1.05, 1.55],
116
+ ],
117
+ tall: [
118
+ [-1.55, 9, 0.55, 1.45, 2, 1.35],
119
+ [1.5, 9.5, 0.8, 1.4, 1.95, 1.4],
120
+ [0.25, 8.75, -1.6, 1.45, 1.8, 1.35],
121
+ [-0.45, 11.15, -0.35, 1.45, 2.05, 1.45],
122
+ [0, 9.35, 1.85, 1.2, 1.6, 1.1],
123
+ ],
124
+ };
125
+
126
+ function deciduous(form, far) {
127
+ const bark = mesh('bark');
128
+ const leaves = mesh('leaves');
129
+ const tall = form === 'tall';
130
+ const foot = [0, 0, 0];
131
+ const waist = [0.04, 0.85, -0.02];
132
+ const fork = [0.12, tall ? 5.1 : 3.65, -0.08];
133
+ // A flared foot and a substantial fork read at street scale. Branches enter the
134
+ // individual leaf clusters, leaving the space between them open to the sky.
135
+ branch(bark, foot, waist, tall ? 0.43 : 0.46, 0.29, far ? 4 : 7);
136
+ branch(bark, waist, fork, 0.29, 0.24, far ? 4 : 7);
137
+ for (const [i, lobe] of broadleaf[form].entries()) {
138
+ const centre = lobe.slice(0, 3);
139
+ if (far) {
140
+ branch(bark, fork, centre, 0.19, 0.055, 3);
141
+ } else {
142
+ const elbow = add(fork, mul(sub(centre, fork), 0.52));
143
+ elbow[1] -= 0.25;
144
+ branch(bark, fork, elbow, i < 3 ? 0.22 : 0.16, 0.14, 5);
145
+ branch(bark, elbow, centre, 0.14, 0.045, 4);
146
+ }
147
+ // Both LODs retain every cluster and branch. Only tessellation changes, so
148
+ // switching to the distant mesh does not close holes or remove crown limbs.
149
+ crown(leaves, centre, lobe.slice(3), i + form.length, far, 5);
150
+ }
151
+ return [bark, leaves];
152
+ }
153
+
154
+ function evergreen(form, far) {
155
+ const bark = mesh('bark');
156
+ const leaves = mesh('leaves');
157
+ const column = form === 'columnar';
158
+ branch(bark, [0, 0, 0], [0, 8, 0], column ? 0.17 : 0.23, 0.06, far ? 4 : 6);
159
+ const tiers = far ? 3 : column ? 5 : 6;
160
+ for (let i = 0; i < tiers; i++) {
161
+ const t = i / (tiers - 1);
162
+ const radius = column ? 1.35 - t * 0.65 : 3.2 - t * 2.4;
163
+ const y = (column ? 3.5 : 3) + t * (column ? 7.4 : 7);
164
+ if (column)
165
+ crown(
166
+ leaves,
167
+ [0.12 * Math.sin(i * 2), y, 0.1 * Math.cos(i)],
168
+ [radius, 2.1 - t * 0.7, radius],
169
+ i + 2,
170
+ far,
171
+ );
172
+ else {
173
+ const sides = far ? 6 : 9;
174
+ const top = vertex(leaves, [0, y + 2.6, 0], [0, 1, 0], 1.06);
175
+ const bottom = vertex(leaves, [0, y - 0.25, 0], [0, -1, 0], 0.86);
176
+ const ring = Array.from({length: sides}, (_, s) => {
177
+ const a = (s * tau) / sides + i * golden;
178
+ const r = radius * (1 + 0.07 * Math.sin(s * 3 + i));
179
+ return vertex(
180
+ leaves,
181
+ [Math.cos(a) * r, y + 0.12 * Math.sin(s * 2), Math.sin(a) * r],
182
+ [Math.cos(a), 0.45, Math.sin(a)],
183
+ 0.94 + 0.03 * Math.sin(s),
184
+ );
185
+ });
186
+ for (let s = 0; s < sides; s++) {
187
+ const n = (s + 1) % sides;
188
+ face(leaves, top, ring[s], ring[n], [
189
+ Math.cos((s * tau) / sides + i * golden),
190
+ 1,
191
+ Math.sin((s * tau) / sides + i * golden),
192
+ ]);
193
+ face(leaves, bottom, ring[n], ring[s], [0, -1, 0]);
194
+ }
195
+ }
196
+ }
197
+ return [bark, leaves];
198
+ }
199
+
200
+ function palm(form, far) {
201
+ const fan = form === 'palm-fan';
202
+ const stem = mesh('stem');
203
+ const leaves = mesh('leaves');
204
+ const fronds = mesh('fronds');
205
+ const height = fan ? 8.2 : 12;
206
+ const sections = far ? 2 : 6;
207
+ const centre = (t) => [0.36 * t * t, height * t, 0.14 * t * t];
208
+ for (let r = 0; r < sections; r++)
209
+ branch(
210
+ stem,
211
+ centre(r / sections),
212
+ centre((r + 1) / sections),
213
+ 0.24 - (r / sections) * 0.06,
214
+ 0.24 - ((r + 1) / sections) * 0.06,
215
+ far ? 4 : 7,
216
+ );
217
+ const top = centre(1);
218
+ if (!fan) branch(leaves, top, add(top, [0, 1.05, 0]), 0.21, 0.1, far ? 4 : 7);
219
+ const origin = add(top, [0, fan ? 0 : 1.05, 0]);
220
+ const count = far ? 6 : fan ? 15 : 12;
221
+ for (let f = 0; f < count; f++) {
222
+ const a = f * golden;
223
+ const age = f / (count - 1);
224
+ const direction = [Math.cos(a), 0, Math.sin(a)];
225
+ const side = [-Math.sin(a), 0, Math.cos(a)];
226
+ const shade = 1.04 - age * 0.16;
227
+ if (fan) {
228
+ const end = add(origin, add(mul(direction, 1 + age * 0.8), [0, 1.15 - age * 1.8, 0]));
229
+ branch(leaves, origin, end, 0.035, 0.015, 3);
230
+ const mid = vertex(fronds, end, [0, 1, 0], shade);
231
+ const folds = far ? 3 : 5;
232
+ const rim = Array.from({length: folds + 1}, (_, i) => {
233
+ const t = -1.35 + (i * 2.7) / folds;
234
+ const p = add(end, add(mul(direction, Math.cos(t) * 1.05), mul(side, Math.sin(t) * 1.2)));
235
+ p[1] += (i % 2 ? 0.12 : -0.12) - age * 0.4;
236
+ return vertex(
237
+ fronds,
238
+ p,
239
+ add([0, 1, 0], mul(side, i % 2 ? 0.3 : -0.3)),
240
+ shade * (i % 2 ? 1.03 : 0.95),
241
+ );
242
+ });
243
+ for (let i = 0; i < folds; i++) face(fronds, mid, rim[i], rim[i + 1], [0, 1, 0]);
244
+ } else {
245
+ const segments = far ? 2 : 6;
246
+ const rows = [];
247
+ for (let s = 0; s <= segments; s++) {
248
+ const t = s / segments;
249
+ const width = s === segments ? 0.015 : 0.52 * Math.sin(Math.PI * (0.13 + t * 0.82));
250
+ const p = add(
251
+ origin,
252
+ add(mul(direction, t * (3.4 + 0.3 * Math.sin(f))), [
253
+ 0,
254
+ Math.sin(t * Math.PI * 0.8) * (1.7 - age) - t * t * (0.7 + age * 1.4),
255
+ 0,
256
+ ]),
257
+ );
258
+ rows.push(
259
+ [-1, 0, 1].map((flank) =>
260
+ vertex(
261
+ fronds,
262
+ add(p, add(mul(side, width * flank), [0, -Math.abs(flank) * width * 0.55, 0])),
263
+ add([0, 1, 0], mul(side, flank * 0.4)),
264
+ shade * (flank ? 0.95 : 1.04),
265
+ ),
266
+ ),
267
+ );
268
+ }
269
+ for (let s = 0; s < segments; s++)
270
+ for (let side = 0; side < 2; side++) {
271
+ face(fronds, rows[s][side], rows[s + 1][side], rows[s + 1][side + 1], [0, 1, 0]);
272
+ face(fronds, rows[s][side], rows[s + 1][side + 1], rows[s][side + 1], [0, 1, 0]);
273
+ }
274
+ }
275
+ }
276
+ return [stem, leaves, fronds].filter((m) => m.indices.length);
277
+ }
278
+
279
+ function glb(parts, name) {
280
+ const blocks = [],
281
+ views = [],
282
+ accessors = [];
283
+ let offset = 0;
284
+ const accessor = (array, type, componentType, target, bounds) => {
285
+ const bytes = new Uint8Array(array.buffer);
286
+ const block = new Uint8Array(Math.ceil(bytes.length / 4) * 4);
287
+ block.set(bytes);
288
+ blocks.push(block);
289
+ views.push({buffer: 0, byteOffset: offset, byteLength: bytes.length, target});
290
+ offset += block.length;
291
+ accessors.push({
292
+ bufferView: views.length - 1,
293
+ componentType,
294
+ count: array.length / (type === 'VEC3' ? 3 : 1),
295
+ type,
296
+ ...bounds,
297
+ });
298
+ return accessors.length - 1;
299
+ };
300
+ const primitives = parts.map((m, material) => ({
301
+ attributes: {
302
+ POSITION: accessor(new Float32Array(m.positions), 'VEC3', 5126, 34962, {
303
+ min: [0, 1, 2].map((axis) => Math.min(...m.positions.filter((_, i) => i % 3 === axis))),
304
+ max: [0, 1, 2].map((axis) => Math.max(...m.positions.filter((_, i) => i % 3 === axis))),
305
+ }),
306
+ NORMAL: accessor(new Float32Array(m.normals), 'VEC3', 5126, 34962),
307
+ COLOR_0: accessor(
308
+ new Float32Array(m.shades.flatMap((s) => [s * 0.8, s * 0.8, s * 0.8])),
309
+ 'VEC3',
310
+ 5126,
311
+ 34962,
312
+ ),
313
+ },
314
+ indices: accessor(new Uint16Array(m.indices), 'SCALAR', 5123, 34963),
315
+ material,
316
+ }));
317
+ const json = {
318
+ asset: {version: '2.0', generator: 'Tileflow Streets tree artwork'},
319
+ scene: 0,
320
+ scenes: [{nodes: [0]}],
321
+ nodes: [{mesh: 0}],
322
+ meshes: [{name, primitives}],
323
+ materials: parts.map((m) => ({
324
+ name: m.material,
325
+ doubleSided: m.material === 'fronds',
326
+ pbrMetallicRoughness: {baseColorFactor: [1, 1, 1, 1], metallicFactor: 0, roughnessFactor: 1},
327
+ })),
328
+ accessors,
329
+ bufferViews: views,
330
+ buffers: [{byteLength: offset}],
331
+ };
332
+ const text = Buffer.from(JSON.stringify(json));
333
+ const padded = Buffer.alloc(Math.ceil(text.length / 4) * 4, 32);
334
+ text.copy(padded);
335
+ const header = Buffer.alloc(20);
336
+ header.writeUInt32LE(0x46546c67, 0);
337
+ header.writeUInt32LE(2, 4);
338
+ header.writeUInt32LE(28 + padded.length + offset, 8);
339
+ header.writeUInt32LE(padded.length, 12);
340
+ header.writeUInt32LE(0x4e4f534a, 16);
341
+ const bin = Buffer.alloc(8);
342
+ bin.writeUInt32LE(offset, 0);
343
+ bin.writeUInt32LE(0x004e4942, 4);
344
+ return Buffer.concat([header, padded, bin, ...blocks]);
345
+ }
346
+
347
+ function topView(parts, dark) {
348
+ const foliage = parts.filter((m) => m.material === 'leaves' || m.material === 'fronds');
349
+ const reach = Math.max(
350
+ ...foliage.flatMap((m) => m.positions.filter((_, i) => i % 3 !== 1).map(Math.abs)),
351
+ );
352
+ const scale = 26 / reach;
353
+ const light = unit([-0.6, 1, -0.7]);
354
+ const base = dark ? [67, 91, 77] : [146, 186, 136];
355
+ const triangles = [];
356
+ for (const m of foliage)
357
+ for (let i = 0; i < m.indices.length; i += 3) {
358
+ const ids = m.indices.slice(i, i + 3);
359
+ const points = ids.map((id) => m.positions.slice(id * 3, id * 3 + 3));
360
+ const normal = unit(cross(sub(points[1], points[0]), sub(points[2], points[0])));
361
+ if (normal[1] < 0.01) continue;
362
+ const luminance = 0.87 + 0.22 * Math.max(0, dot(normal, light));
363
+ const fill =
364
+ '#' +
365
+ base
366
+ .map((v) =>
367
+ Math.round(Math.min(255, v * luminance))
368
+ .toString(16)
369
+ .padStart(2, '0'),
370
+ )
371
+ .join('');
372
+ triangles.push({
373
+ height: points.reduce((n, p) => n + p[1], 0) / 3,
374
+ path: `<path d="M${points.map((p) => `${(32 + p[0] * scale).toFixed(2)},${(32 + p[2] * scale).toFixed(2)}`).join('L')}Z" fill="${fill}" stroke="${fill}" stroke-width="0.35"/>`,
375
+ });
376
+ }
377
+ triangles.sort((a, b) => a.height - b.height);
378
+ return `<svg xmlns="http://www.w3.org/2000/svg" width="64" height="64" viewBox="0 0 64 64">\n<!-- Generated by build-trees.mjs. Original Tileflow crown artwork. -->\n${triangles.map((t) => t.path).join('\n')}\n</svg>\n`;
379
+ }
380
+
381
+ export function buildStreetsTrees() {
382
+ const files = new Map();
383
+ const catalogue = [];
384
+ for (const form of ['round', 'open', 'tall', 'conifer', 'columnar', 'palm-feather', 'palm-fan']) {
385
+ const build = (far) =>
386
+ form.startsWith('palm')
387
+ ? palm(form, far)
388
+ : form in broadleaf
389
+ ? deciduous(form, far)
390
+ : evergreen(form, far);
391
+ const near = build(false),
392
+ far = build(true);
393
+ const id = `streets-tree-${form}`;
394
+ for (const [level, parts] of [
395
+ ['near', near],
396
+ ['far', far],
397
+ ]) {
398
+ const triangles = parts.reduce((n, m) => n + m.indices.length / 3, 0);
399
+ if (triangles > (level === 'near' ? 700 : 100))
400
+ throw new Error(`${id} ${level}: ${triangles} triangles exceeds the Streets budget`);
401
+ files.set(`models/${id}${level === 'far' ? '.far' : ''}.glb`, glb(parts, id));
402
+ catalogue.push({id, level, triangles});
403
+ }
404
+ files.set(`icons/${id}.pattern.svg`, topView(near, false));
405
+ files.set(`icons/${id}-dark.pattern.svg`, topView(near, true));
406
+ }
407
+ return {files, catalogue};
408
+ }
409
+
410
+ if (process.argv[1] && fileURLToPath(import.meta.url) === process.argv[1]) {
411
+ const {files, catalogue} = buildStreetsTrees();
412
+ const check = process.argv.includes('--check');
413
+ for (const [path, content] of files) {
414
+ const expected = Buffer.from(content);
415
+ const target = join(here, path);
416
+ if (check) {
417
+ const actual = await readFile(target).catch(() => undefined);
418
+ if (!actual?.equals(expected)) throw new Error(`Regenerate Streets tree artwork: ${path}`);
419
+ } else {
420
+ await mkdir(dirname(target), {recursive: true});
421
+ await writeFile(target, expected);
422
+ }
423
+ }
424
+ console.log(JSON.stringify({files: files.size, catalogue}, null, 2));
425
+ }
@@ -0,0 +1,11 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
2
+ <title>Night Aerial cableway</title>
3
+ <desc>Tileflow POI disc with a Maki aerialway pictogram, CC0-1.0.</desc>
4
+ <circle cx="12" cy="12" r="10" fill="#0C0C0C" />
5
+ <circle cx="12" cy="12" r="8.5" fill="#8296E6" />
6
+ <path
7
+ fill="#0C0C0C"
8
+ transform="translate(6 6) scale(.8)"
9
+ d="M13,5H8V2.6c0.1854-0.1047,0.3325-0.2659,0.42-0.46L13.5,1.5C13.7761,1.5,14,1.2761,14,1s-0.2239-0.5-0.5-0.5L8.28,1.15 C8.0954,0.9037,7.8077,0.7562,7.5,0.75C7.0963,0.752,6.7334,0.9966,6.58,1.37L1.5,2C1.2239,2,1,2.2239,1,2.5S1.2239,3,1.5,3 l5.22-0.65C6.7967,2.4503,6.8917,2.5351,7,2.6V5H2C1.4477,5,1,5.4477,1,6v7c0,0.5523,0.4477,1,1,1h11c0.5523,0,1-0.4477,1-1V6 C14,5.4477,13.5523,5,13,5z M7,11H3V7h4V11z M12,11H8V7h4V11z"
10
+ />
11
+ </svg>
@@ -0,0 +1,11 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
2
+ <title>monochrome Night Aerial cableway</title>
3
+ <desc>Tileflow POI disc with a Maki aerialway pictogram, CC0-1.0.</desc>
4
+ <circle cx="12" cy="12" r="10" fill="#272727" />
5
+ <circle cx="12" cy="12" r="8.5" fill="#989898" />
6
+ <path
7
+ fill="#272727"
8
+ transform="translate(6 6) scale(.8)"
9
+ d="M13,5H8V2.6c0.1854-0.1047,0.3325-0.2659,0.42-0.46L13.5,1.5C13.7761,1.5,14,1.2761,14,1s-0.2239-0.5-0.5-0.5L8.28,1.15 C8.0954,0.9037,7.8077,0.7562,7.5,0.75C7.0963,0.752,6.7334,0.9966,6.58,1.37L1.5,2C1.2239,2,1,2.2239,1,2.5S1.2239,3,1.5,3 l5.22-0.65C6.7967,2.4503,6.8917,2.5351,7,2.6V5H2C1.4477,5,1,5.4477,1,6v7c0,0.5523,0.4477,1,1,1h11c0.5523,0,1-0.4477,1-1V6 C14,5.4477,13.5523,5,13,5z M7,11H3V7h4V11z M12,11H8V7h4V11z"
10
+ />
11
+ </svg>
@@ -0,0 +1,11 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
2
+ <title>monochrome Aerial cableway</title>
3
+ <desc>Tileflow POI disc with a Maki aerialway pictogram, CC0-1.0.</desc>
4
+ <circle cx="12" cy="12" r="10" fill="#ffffff" />
5
+ <circle cx="12" cy="12" r="8.5" fill="#606060" />
6
+ <path
7
+ fill="#ffffff"
8
+ transform="translate(6 6) scale(.8)"
9
+ d="M13,5H8V2.6c0.1854-0.1047,0.3325-0.2659,0.42-0.46L13.5,1.5C13.7761,1.5,14,1.2761,14,1s-0.2239-0.5-0.5-0.5L8.28,1.15 C8.0954,0.9037,7.8077,0.7562,7.5,0.75C7.0963,0.752,6.7334,0.9966,6.58,1.37L1.5,2C1.2239,2,1,2.2239,1,2.5S1.2239,3,1.5,3 l5.22-0.65C6.7967,2.4503,6.8917,2.5351,7,2.6V5H2C1.4477,5,1,5.4477,1,6v7c0,0.5523,0.4477,1,1,1h11c0.5523,0,1-0.4477,1-1V6 C14,5.4477,13.5523,5,13,5z M7,11H3V7h4V11z M12,11H8V7h4V11z"
10
+ />
11
+ </svg>
@@ -0,0 +1,11 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
2
+ <title>Aerial cableway</title>
3
+ <desc>Tileflow POI disc with a Maki aerialway pictogram, CC0-1.0.</desc>
4
+ <circle cx="12" cy="12" r="10" fill="#FFFFFF" />
5
+ <circle cx="12" cy="12" r="8.5" fill="#465DCD" />
6
+ <path
7
+ fill="#FFFFFF"
8
+ transform="translate(6 6) scale(.8)"
9
+ d="M13,5H8V2.6c0.1854-0.1047,0.3325-0.2659,0.42-0.46L13.5,1.5C13.7761,1.5,14,1.2761,14,1s-0.2239-0.5-0.5-0.5L8.28,1.15 C8.0954,0.9037,7.8077,0.7562,7.5,0.75C7.0963,0.752,6.7334,0.9966,6.58,1.37L1.5,2C1.2239,2,1,2.2239,1,2.5S1.2239,3,1.5,3 l5.22-0.65C6.7967,2.4503,6.8917,2.5351,7,2.6V5H2C1.4477,5,1,5.4477,1,6v7c0,0.5523,0.4477,1,1,1h11c0.5523,0,1-0.4477,1-1V6 C14,5.4477,13.5523,5,13,5z M7,11H3V7h4V11z M12,11H8V7h4V11z"
10
+ />
11
+ </svg>
@@ -0,0 +1,11 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
2
+ <title>Night Airport</title>
3
+ <desc>Tileflow POI disc with a Maki airport pictogram, CC0-1.0.</desc>
4
+ <circle cx="12" cy="12" r="10" fill="#0C0C0C" />
5
+ <circle cx="12" cy="12" r="8.5" fill="#8296E6" />
6
+ <path
7
+ fill="#0C0C0C"
8
+ transform="translate(6 6) scale(.8)"
9
+ d="M15,6.8182L15,8.5l-6.5-1 l-0.3182,4.7727L11,14v1l-3.5-0.6818L4,15v-1l2.8182-1.7273L6.5,7.5L0,8.5V6.8182L6.5,4.5v-3c0,0,0-1.5,1-1.5s1,1.5,1,1.5v2.8182 L15,6.8182z"
10
+ />
11
+ </svg>
@@ -0,0 +1,11 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
2
+ <title>monochrome Night Airport</title>
3
+ <desc>Tileflow POI disc with a Maki airport pictogram, CC0-1.0.</desc>
4
+ <circle cx="12" cy="12" r="10" fill="#272727" />
5
+ <circle cx="12" cy="12" r="8.5" fill="#989898" />
6
+ <path
7
+ fill="#272727"
8
+ transform="translate(6 6) scale(.8)"
9
+ d="M15,6.8182L15,8.5l-6.5-1 l-0.3182,4.7727L11,14v1l-3.5-0.6818L4,15v-1l2.8182-1.7273L6.5,7.5L0,8.5V6.8182L6.5,4.5v-3c0,0,0-1.5,1-1.5s1,1.5,1,1.5v2.8182 L15,6.8182z"
10
+ />
11
+ </svg>
@@ -0,0 +1,11 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
2
+ <title>monochrome Airport</title>
3
+ <desc>Tileflow POI disc with a Maki airport pictogram, CC0-1.0.</desc>
4
+ <circle cx="12" cy="12" r="10" fill="#ffffff" />
5
+ <circle cx="12" cy="12" r="8.5" fill="#606060" />
6
+ <path
7
+ fill="#ffffff"
8
+ transform="translate(6 6) scale(.8)"
9
+ d="M15,6.8182L15,8.5l-6.5-1 l-0.3182,4.7727L11,14v1l-3.5-0.6818L4,15v-1l2.8182-1.7273L6.5,7.5L0,8.5V6.8182L6.5,4.5v-3c0,0,0-1.5,1-1.5s1,1.5,1,1.5v2.8182 L15,6.8182z"
10
+ />
11
+ </svg>
@@ -0,0 +1,11 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
2
+ <title>Airport</title>
3
+ <desc>Tileflow POI disc with a Maki airport pictogram, CC0-1.0.</desc>
4
+ <circle cx="12" cy="12" r="10" fill="#FFFFFF" />
5
+ <circle cx="12" cy="12" r="8.5" fill="#465DCD" />
6
+ <path
7
+ fill="#FFFFFF"
8
+ transform="translate(6 6) scale(.8)"
9
+ d="M15,6.8182L15,8.5l-6.5-1 l-0.3182,4.7727L11,14v1l-3.5-0.6818L4,15v-1l2.8182-1.7273L6.5,7.5L0,8.5V6.8182L6.5,4.5v-3c0,0,0-1.5,1-1.5s1,1.5,1,1.5v2.8182 L15,6.8182z"
10
+ />
11
+ </svg>
@@ -0,0 +1,11 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
2
+ <title>Night Amusement park</title>
3
+ <desc>Tileflow POI disc with a Maki amusement-park pictogram, CC0-1.0.</desc>
4
+ <circle cx="12" cy="12" r="10" fill="#0C0C0C" />
5
+ <circle cx="12" cy="12" r="8.5" fill="#C786BC" />
6
+ <path
7
+ fill="#0C0C0C"
8
+ transform="translate(6 6) scale(.8)"
9
+ d="M13.5 7C13.5 9.02798 12.4939 10.821 10.9535 11.907L12 13.9999H3L4.04645 11.907C2.50613 10.821 1.5 9.02798 1.5 7C1.5 3.68629 4.18629 1 7.5 1C10.8137 1 13.5 3.68629 13.5 7ZM12.2984 7.125H8.99487C8.96844 7.4453 8.84138 7.73706 8.64538 7.96861L10.9814 10.3046C11.7719 9.47202 12.2669 8.35614 12.2984 7.125ZM10.8046 10.4814L8.46861 8.14538C8.33136 8.26156 8.17296 8.35351 8 8.41465V11.7743C9.08206 11.6623 10.0574 11.1908 10.8046 10.4814ZM6.00513 7.125H2.7016C2.73307 8.35614 3.2281 9.47202 4.01864 10.3046L6.35462 7.96861C6.15862 7.73706 6.03156 7.4453 6.00513 7.125ZM4.19542 10.4814C4.94259 11.1908 5.91794 11.6623 7 11.7743V8.41465C6.82704 8.35351 6.66864 8.26156 6.53139 8.14538L4.19542 10.4814ZM12.2984 6.875C12.2669 5.64386 11.7719 4.52798 10.9814 3.69542L8.64538 6.03139C8.84138 6.26294 8.96844 6.5547 8.99487 6.875H12.2984ZM10.8046 3.51864C9.97202 2.7281 8.85614 2.23307 7.625 2.2016V5.50513C7.9453 5.53156 8.23706 5.65862 8.46861 5.85462L10.8046 3.51864ZM7.375 5.50513V2.2016C6.14386 2.23307 5.02798 2.7281 4.19542 3.51864L6.53139 5.85462C6.76294 5.65862 7.0547 5.53156 7.375 5.50513ZM6.35462 6.03139L4.01864 3.69542C3.2281 4.52798 2.73307 5.64386 2.7016 6.875H6.00513C6.03156 6.5547 6.15862 6.26294 6.35462 6.03139Z"
10
+ />
11
+ </svg>