├── .env.example ├── .eslintrc ├── .github └── workflows │ └── render-video.yml ├── .gitignore ├── .prettierrc ├── .vscode └── settings.json ├── README.md ├── package-lock.json ├── package.json ├── remotion.config.ts ├── src ├── Composition.tsx ├── Root.tsx ├── index.ts └── routes.ts └── tsconfig.json /.env.example: -------------------------------------------------------------------------------- 1 | REMOTION_MAPBOX_TOKEN= 2 | -------------------------------------------------------------------------------- /.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "@remotion" 3 | } 4 | -------------------------------------------------------------------------------- /.github/workflows/render-video.yml: -------------------------------------------------------------------------------- 1 | on: workflow_dispatch 2 | 3 | name: Render video 4 | jobs: 5 | render: 6 | name: Render video 7 | runs-on: ubuntu-latest 8 | steps: 9 | - uses: actions/checkout@main 10 | - uses: actions/setup-node@main 11 | - run: sudo apt update 12 | - run: sudo apt install ffmpeg 13 | - run: npm i 14 | - run: echo $WORKFLOW_INPUT > input-props.json 15 | env: 16 | WORKFLOW_INPUT: ${{ toJson(github.event.inputs) }} 17 | - run: npm run build -- --props="./input-props.json" 18 | - uses: actions/upload-artifact@v2 19 | with: 20 | name: video.mp4 21 | path: out/video.mp4 22 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | dist 3 | .DS_Store 4 | .env 5 | 6 | # Ignore the output video from Git but not videos you import into src/. 7 | out 8 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "singleQuote": true, 3 | "bracketSpacing": false, 4 | "jsxBracketSameLine": false, 5 | "useTabs": true, 6 | "overrides": [ 7 | { 8 | "files": ["*.yml"], 9 | "options": { 10 | "singleQuote": false 11 | } 12 | } 13 | ] 14 | } 15 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "editor.tabSize": 2, 3 | "typescript.tsdk": "node_modules/typescript/lib", 4 | "editor.codeActionsOnSave": { 5 | "source.organizeImports": "never", 6 | "source.fixAll": "explicit" 7 | }, 8 | "typescript.enablePromptUseWorkspaceTsdk": true 9 | } 10 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Remotion Mapbox example 2 | 3 | https://user-images.githubusercontent.com/1629785/233837028-8ce3dd74-f10a-4b2f-8005-4da04ca3ab18.mp4 4 | 5 | This example allows you to animate a route using Mapbox and export it as an MP4 using Remotion. You need a Mapbox API key, which is free though. 6 | 7 | ## Special considerations for using Remotion with Mapbox 8 | 9 | - Since rendering happens on multiple cores, more Mapbox initializations may be charged to your Mapbox account. 10 | - Mapbox has label transitions that cannot be controlled using [`useCurrentFrame()`](https://www.remotion.dev/docs/use-current-frame) - therefore they have been disabled. 11 | - Having no transitions causes certain elements like terrain data and POI markers to not be animated nicely - therefore those have been disabled in the style. 12 | - Since it [uses the GPU](https://www.remotion.dev/docs/gpu), the `angle` rendering mode has been enabled in the config file. 13 | - If you want to render this video on Lambda, it will be slower because Lambda has no GPU. 14 | 15 | ## Mapbox style 16 | 17 | You can copy the mapbox style from here: https://api.mapbox.com/styles/v1/jonnyburger/clgtb8stl002z01o5d15ye0u0.html?title=copy&access_token=pk.eyJ1Ijoiam9ubnlidXJnZXIiLCJhIjoiY2xndDg3Y3lmMjFsazNrbW0zdWEzOTVpbSJ9.S40QeakLmFuEyxi8MBMczg&zoomwheel=true&fresh=true#14.09/42.69864/9.45602 18 | 19 | ## Commands 20 | 21 | **Install Dependencies** 22 | 23 | ```console 24 | npm i 25 | ``` 26 | 27 | **Start Preview** 28 | 29 | Rename `.env.example` to `.env` and add an API key that you get through `https://account.mapbox.com` 30 | 31 | ```console 32 | npm start 33 | ``` 34 | 35 | **Render video** 36 | 37 | ```console 38 | npm run build 39 | ``` 40 | 41 | **Upgrade Remotion** 42 | 43 | ```console 44 | npm run upgrade 45 | ``` 46 | 47 | ## Docs 48 | 49 | Get started with Remotion by reading the [fundamentals page](https://www.remotion.dev/docs/the-fundamentals). 50 | 51 | ## Help 52 | 53 | We provide help [on our Discord server](https://discord.gg/6VzzNDwUwV). 54 | 55 | ## Issues 56 | 57 | Found an issue with Remotion? [File an issue here](https://github.com/remotion-dev/remotion/issues/new). 58 | 59 | ## License 60 | 61 | Notice that for some entities a company license is needed. Read [the terms here](https://github.com/remotion-dev/remotion/blob/main/LICENSE.md). 62 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "mapbox-example", 3 | "version": "1.0.0", 4 | "description": "My Remotion video", 5 | "scripts": { 6 | "start": "remotion studio", 7 | "build": "remotion render MyComp out/video.mp4", 8 | "upgrade": "remotion upgrade", 9 | "test": "eslint src --ext ts,tsx,js,jsx && tsc" 10 | }, 11 | "repository": {}, 12 | "license": "UNLICENSED", 13 | "dependencies": { 14 | "@remotion/cli": "4.0.285", 15 | "@turf/turf": "^6.5.0", 16 | "@types/mapbox-gl": "^2.7.10", 17 | "mapbox-gl": "^2.14.1", 18 | "react": "^18.0.0", 19 | "react-dom": "^18.0.0", 20 | "remotion": "4.0.285" 21 | }, 22 | "devDependencies": { 23 | "@remotion/eslint-config": "4.0.285", 24 | "@types/react": "^18.0.26", 25 | "@types/web": "^0.0.86", 26 | "eslint": "^8.30.0", 27 | "prettier": "^2.8.1", 28 | "typescript": "^4.9.4" 29 | }, 30 | "packageManager": "npm@9.5.1" 31 | } 32 | -------------------------------------------------------------------------------- /remotion.config.ts: -------------------------------------------------------------------------------- 1 | import {Config} from '@remotion/cli/config'; 2 | 3 | Config.setVideoImageFormat('jpeg'); 4 | Config.setOverwriteOutput(true); 5 | // Set this to swiftshader when rendering on Lambda 6 | Config.setChromiumOpenGlRenderer('angle'); 7 | -------------------------------------------------------------------------------- /src/Composition.tsx: -------------------------------------------------------------------------------- 1 | import {useEffect, useRef, useState} from 'react'; 2 | import { 3 | AbsoluteFill, 4 | continueRender, 5 | delayRender, 6 | useCurrentFrame, 7 | useVideoConfig, 8 | } from 'remotion'; 9 | import mapboxgl, {Map, MercatorCoordinate} from 'mapbox-gl'; 10 | import * as turf from '@turf/turf'; 11 | import {routes} from './routes'; 12 | 13 | mapboxgl.accessToken = process.env.REMOTION_MAPBOX_TOKEN as string; 14 | 15 | export const MyComposition = () => { 16 | const ref = useRef(null); 17 | 18 | const targetRoute = routes.target; 19 | // This is the path the camera will move along 20 | const cameraRoute = routes.camera; 21 | 22 | const frame = useCurrentFrame(); 23 | const {fps} = useVideoConfig(); 24 | const [handle] = useState(() => delayRender('Loading map...')); 25 | const [map, setMap] = useState(null); 26 | 27 | useEffect(() => { 28 | const _map = new Map({ 29 | container: 'map', 30 | zoom: 11.53, 31 | center: [6.5615, 46.0598], 32 | pitch: 65, 33 | bearing: -180, 34 | style: 'mapbox://styles/jonnyburger/clgtb8stl002z01o5d15ye0u0', 35 | interactive: false, 36 | fadeDuration: 0, 37 | }); 38 | 39 | _map.on('style.load', () => { 40 | _map.addSource('trace', { 41 | type: 'geojson', 42 | data: { 43 | type: 'Feature', 44 | properties: {}, 45 | geometry: { 46 | type: 'LineString', 47 | coordinates: targetRoute, 48 | }, 49 | }, 50 | }); 51 | _map.addLayer({ 52 | type: 'line', 53 | source: 'trace', 54 | id: 'line', 55 | paint: { 56 | 'line-color': 'black', 57 | 'line-width': 5, 58 | }, 59 | layout: { 60 | 'line-cap': 'round', 61 | 'line-join': 'round', 62 | }, 63 | }); 64 | }); 65 | 66 | _map.on('load', () => { 67 | continueRender(handle); 68 | setMap(_map); 69 | }); 70 | }, [handle, targetRoute]); 71 | 72 | useEffect(() => { 73 | if (!map) { 74 | return; 75 | } 76 | const handle = delayRender('Moving point...'); 77 | 78 | const animationDuration = 80000; 79 | const cameraAltitude = 4000; 80 | // Get the overall distance of each route so we can interpolate along them 81 | const routeDistance = turf.lineDistance(turf.lineString(targetRoute)); 82 | const cameraRouteDistance = turf.lineDistance(turf.lineString(cameraRoute)); 83 | 84 | const start = 0; 85 | 86 | const time = (frame / fps) * 1000; 87 | // Phase determines how far through the animation we are 88 | const phase = (time - start) / animationDuration; 89 | 90 | // Use the phase to get a point that is the appropriate distance along the route 91 | // this approach syncs the camera and route positions ensuring they move 92 | // at roughly equal rates even if they don't contain the same number of points 93 | const alongRoute = turf.along( 94 | turf.lineString(targetRoute), 95 | routeDistance * phase 96 | ).geometry.coordinates; 97 | 98 | const alongCamera = turf.along( 99 | turf.lineString(cameraRoute), 100 | cameraRouteDistance * phase 101 | ).geometry.coordinates; 102 | 103 | const camera = map.getFreeCameraOptions(); 104 | 105 | // Set the position and altitude of the camera 106 | camera.position = MercatorCoordinate.fromLngLat( 107 | { 108 | lng: alongCamera[0], 109 | lat: alongCamera[1], 110 | }, 111 | cameraAltitude 112 | ); 113 | 114 | // Tell the camera to look at a point along the route 115 | camera.lookAtPoint({ 116 | lng: alongRoute[0], 117 | lat: alongRoute[1], 118 | }); 119 | 120 | map.setFreeCameraOptions(camera); 121 | map.once('idle', () => continueRender(handle)); 122 | }, [cameraRoute, fps, frame, handle, map, targetRoute]); 123 | 124 | return ; 125 | }; 126 | -------------------------------------------------------------------------------- /src/Root.tsx: -------------------------------------------------------------------------------- 1 | import {Composition} from 'remotion'; 2 | import {MyComposition} from './Composition'; 3 | 4 | export const RemotionRoot: React.FC = () => { 5 | return ( 6 | <> 7 | 15 | 16 | ); 17 | }; 18 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | import {registerRoot} from 'remotion'; 2 | import {RemotionRoot} from './Root'; 3 | 4 | registerRoot(RemotionRoot); 5 | -------------------------------------------------------------------------------- /src/routes.ts: -------------------------------------------------------------------------------- 1 | export const routes = { 2 | target: [ 3 | [6.56158447265625, 46.059891147620725], 4 | [6.5691375732421875, 46.05679376154153], 5 | [6.5842437744140625, 46.05059898938315], 6 | [6.594886779785156, 46.04702502069337], 7 | [6.601066589355469, 46.0460718554722], 8 | [6.6089630126953125, 46.0365370783104], 9 | [6.6185760498046875, 46.018420689207964], 10 | [6.624412536621094, 46.00053696838315], 11 | [6.626472473144531, 45.982885915835965], 12 | [6.62750244140625, 45.97215142749934], 13 | [6.62750244140625, 45.96833350337328], 14 | [6.630592346191406, 45.96045733860464], 15 | [6.636772155761719, 45.94852293319342], 16 | [6.6391754150390625, 45.939451769364496], 17 | [6.6378021240234375, 45.93324384711787], 18 | [6.63848876953125, 45.92488544547274], 19 | [6.6412353515625, 45.914376564429105], 20 | [6.642608642578125, 45.903148752739945], 21 | [6.642608642578125, 45.89120201040525], 22 | [6.636772155761719, 45.87925269776262], 23 | [6.625099182128906, 45.86730081481204], 24 | [6.619176864624023, 45.86138464547474], 25 | [6.61900520324707, 45.86150418975072], 26 | [6.61625862121582, 45.86000980276357], 27 | [6.610937118530273, 45.8569014845133], 28 | [6.606988906860352, 45.85397234747452], 29 | [6.604413986206055, 45.85122239164721], 30 | [6.6007232666015625, 45.848651670237814], 31 | [6.595916748046874, 45.84626018324633], 32 | [6.5923118591308585, 45.843928388195685], 33 | [6.589908599853516, 45.841656285085875], 34 | [6.591367721557617, 45.83824785204328], 35 | [6.596689224243163, 45.83370308906791], 36 | [6.600637435913085, 45.82927758273395], 37 | [6.603212356567383, 45.824971333041404], 38 | [6.610078811645508, 45.81922892648646], 39 | [6.621236801147461, 45.81205036306912], 40 | [6.62501335144043, 45.80612755201333], 41 | [6.621408462524414, 45.8014604933191], 42 | [6.617460250854492, 45.7978702862262], 43 | [6.613168716430663, 45.795356930734634], 44 | [6.608018875122069, 45.79122742102916], 45 | [6.602010726928711, 45.78548175710981], 46 | [6.596689224243164, 45.7797355009297], 47 | [6.59205436706543, 45.77398865248884], 48 | [6.579866409301758, 45.768959771428094], 49 | [6.560125350952148, 45.76464885774745], 50 | [6.547079086303711, 45.7614754304816], 51 | [6.540727615356445, 45.75943948963056], 52 | [6.538324356079102, 45.757822678368825], 53 | [6.53986930847168, 45.75662499669638], 54 | [6.5430450439453125, 45.7559662703627], 55 | [6.5478515625, 45.75584649936776], 56 | [6.553001403808594, 45.754828410949976], 57 | [6.558494567871094, 45.75291200510935], 58 | [6.562957763671875, 45.75129499950718], 59 | [6.5663909912109375, 45.74997739414348], 60 | [6.571197509765625, 45.74937848389985], 61 | [6.5773773193359375, 45.74949826877629], 62 | [6.581754684448242, 45.74937848312866], 63 | [6.584329605102539, 45.749019126956945], 64 | [6.586904525756836, 45.750037259075754], 65 | [6.589479446411133, 45.75243287948507], 66 | [6.590766906738281, 45.75261255757093], 67 | [6.590766906738281, 45.750576293333324], 68 | [6.589994430541992, 45.748420160930024], 69 | [6.588449478149413, 45.74614416036103], 70 | [6.586732864379882, 45.744347275390595], 71 | [6.584844589233398, 45.7430295060187], 72 | [6.582527160644531, 45.741292379297555], 73 | [6.57978057861328, 45.739135895227136], 74 | [6.577806472778319, 45.737218962914596], 75 | [6.576604843139648, 45.735541582359936], 76 | [6.575403213500977, 45.73416370744056], 77 | [6.574201583862305, 45.73308533815646], 78 | [6.573600769042969, 45.73110822600263], 79 | [6.573600769042969, 45.728232370979086], 80 | [6.5746307373046875, 45.7267345266076], 81 | [6.576690673828125, 45.726614692888205], 82 | [6.577892303466797, 45.72577583345888], 83 | [6.578235626220702, 45.724217948319634], 84 | [6.579179763793944, 45.722420322990324], 85 | [6.580724716186523, 45.72038295747093], 86 | [6.580295562744141, 45.718765014853695], 87 | [6.577892303466797, 45.717566495138634], 88 | [6.577205657958984, 45.71618815903388], 89 | [6.578235626220703, 45.71463000653943], 90 | [6.576862335205078, 45.7129519421753], 91 | [6.573085784912109, 45.71115396594149], 92 | [6.571025848388672, 45.70833694318826], 93 | [6.570682525634766, 45.704500873915585], 94 | [6.569738388061523, 45.70156377630656], 95 | [6.568193435668945, 45.69952565036115], 96 | [6.567592620849609, 45.69694787678283], 97 | [6.567935943603516, 45.693830455571586], 98 | [6.568536758422852, 45.690772820880724], 99 | [6.569395065307617, 45.68777497271026], 100 | [6.570596694946289, 45.68573639662117], 101 | [6.572141647338867, 45.68465709261345], 102 | [6.576261520385742, 45.685136765802106], 103 | [6.582956314086914, 45.687175416187145], 104 | [6.587419509887695, 45.68843457180408], 105 | [6.589651107788086, 45.68891423265294], 106 | [6.592226028442383, 45.68915406307737], 107 | [6.595144271850586, 45.68915406307737], 108 | [6.597461700439453, 45.68915406307737], 109 | [6.599178314208984, 45.68915406307737], 110 | [6.601152420043945, 45.688554479303924], 111 | [6.603384017944336, 45.68735531175702], 112 | [6.605701446533203, 45.68639596537969], 113 | [6.608104705810547, 45.68567644017191], 114 | [6.610422134399414, 45.68483697969969], 115 | [6.612653732299805, 45.68387758396304], 116 | [6.61402702331543, 45.68309806657188], 117 | [6.614542007446289, 45.68249842752623], 118 | [6.615400314331055, 45.682918164060794], 119 | [6.616601943969727, 45.68435727617558], 120 | [6.619777679443359, 45.68615609690748], 121 | [6.624927520751953, 45.68831462625649], 122 | [6.628875732421875, 45.69059297621262], 123 | [6.631622314453124, 45.69299114677586], 124 | [6.635141372680663, 45.69556905300627], 125 | [6.639432907104492, 45.698326694903834], 126 | [6.642780303955078, 45.69970551585262], 127 | [6.645183563232422, 45.69970551585262], 128 | [6.647243499755859, 45.69982540689949], 129 | [6.648960113525391, 45.700065188993236], 130 | [6.651191711425781, 45.69982540381456], 131 | [6.653938293457031, 45.69910605136346], 132 | [6.655483245849609, 45.69808694468768], 133 | [6.655826568603516, 45.69676808378724], 134 | [6.655483245849609, 45.695209379865645], 135 | [6.65445327758789, 45.693410832922886], 136 | [6.654968261718749, 45.69263146592304], 137 | [6.6570281982421875, 45.69287127886611], 138 | [6.658916473388672, 45.69359070227061], 139 | [6.660633087158203, 45.694789736136556], 140 | [6.662349700927734, 45.695149449381276], 141 | [6.664066314697266, 45.69466984200477], 142 | [6.666126251220703, 45.69401037196457], 143 | [6.668529510498047, 45.693171039260676], 144 | [6.671104431152344, 45.692391648866725], 145 | [6.673851013183594, 45.691672200782705], 146 | [6.67668342590332, 45.69197196374806], 147 | [6.679601669311523, 45.6932909377628], 148 | [6.680631637573242, 45.69317102769216], 149 | [6.679773330688477, 45.69161223353616], 150 | [6.6803741455078125, 45.691012701178494], 151 | [6.68243408203125, 45.69137243061915], 152 | [6.684107780456543, 45.69128249739134], 153 | [6.6853952407836905, 45.69074290149506], 154 | [6.6867685317993155, 45.69059301438878], 155 | [6.688227653503417, 45.69083283607253], 156 | [6.689772605895995, 45.69104267937097], 157 | [6.691403388977051, 45.691222544284116], 158 | [6.6927337646484375, 45.691912011669146], 159 | [6.693763732910156, 45.69311108152605], 160 | [6.694836616516113, 45.69368064031863], 161 | [6.695952415466309, 45.693620688046906], 162 | [6.697282791137695, 45.693410853746215], 163 | [6.698827743530273, 45.693051137416546], 164 | [6.70015811920166, 45.69263146476619], 165 | [6.7012739181518555, 45.69215183579513], 166 | [6.702775955200195, 45.692301717759825], 167 | [6.70466423034668, 45.693081110660295], 168 | [6.707067489624023, 45.693500783310654], 169 | [6.709985733032226, 45.69356073571091], 170 | [6.7125606536865225, 45.69386049482009], 171 | [6.714792251586914, 45.694400060638195], 172 | [6.715908050537109, 45.69496959622947], 173 | [6.715908050537109, 45.695569101593925], 174 | [6.716251373291016, 45.695868854276156], 175 | [6.716938018798827, 45.695868854276156], 176 | [6.718010902404784, 45.696168600531436], 177 | [6.719470024108886, 45.696768093042024], 178 | [6.720671653747558, 45.697217710014854], 179 | [6.721615791320801, 45.69751745144994], 180 | [6.722688674926758, 45.69781719127829], 181 | [6.72389030456543, 45.6981169294999], 182 | [6.724491119384766, 45.69793708444604], 183 | [6.724491119384766, 45.6972776561167], 184 | [6.724104881286621, 45.69679806930641], 185 | [6.723332405090332, 45.69649832401518], 186 | [6.723718643188477, 45.69637842602722], 187 | [6.725263595581054, 45.69643837534255], 188 | [6.726036071777343, 45.69616860053145], 189 | [6.726036071777343, 45.695569101593925], 190 | [6.725478172302245, 45.695299327361255], 191 | [6.724362373352051, 45.69535927783344], 192 | [6.723418235778809, 45.695299327168456], 193 | [6.7226457595825195, 45.69511947536629], 194 | [6.722688674926758, 45.6947897442345], 195 | [6.723546981811523, 45.69431013377307], 196 | [6.724963188171387, 45.69395042438453], 197 | [6.726937294006348, 45.69371061606887], 198 | [6.72886848449707, 45.69356073571091], 199 | [6.730756759643555, 45.693500783310654], 200 | [6.732172966003418, 45.69155219662118], 201 | [6.73311710357666, 45.687714975642486], 202 | [6.7342329025268555, 45.68567644325687], 203 | [6.735520362854004, 45.6854365994643], 204 | [6.736550331115723, 45.68477701630928], 205 | [6.737322807312011, 45.683697693791814], 206 | [6.738438606262206, 45.68270829891062], 207 | [6.739897727966308, 45.68180883166569], 208 | [6.740756034851073, 45.68099930073348], 209 | [6.741013526916503, 45.68027970611398], 210 | [6.741957664489745, 45.67932022605483], 211 | [6.743588447570801, 45.67812086055603], 212 | [6.745090484619141, 45.67722132679136], 213 | [6.746463775634766, 45.67662162476083], 214 | [6.747708320617676, 45.67614186005142], 215 | [6.74882411956787, 45.67578203266314], 216 | [6.749811172485351, 45.67518231135147], 217 | [6.750669479370117, 45.67434269611642], 218 | [6.751656532287598, 45.673922888498886], 219 | [6.752772331237792, 45.673922888498886], 220 | [6.754274368286132, 45.6734730806441], 221 | [6.756162643432617, 45.672573464934516], 222 | [6.7572784423828125, 45.67179378879551], 223 | [6.757621765136719, 45.671134052227075], 224 | [6.758050918579102, 45.67053428592594], 225 | [6.758565902709961, 45.669994489892126], 226 | [6.759166717529297, 45.67008445474089], 227 | [6.759853363037109, 45.67080418047223], 228 | [6.761870384216309, 45.67113405511926], 229 | [6.7652177810668945, 45.67107407868196], 230 | [6.767449378967285, 45.671014102180386], 231 | [6.7685651779174805, 45.67095412561454], 232 | [6.769294738769531, 45.67086416057297], 233 | [6.7696380615234375, 45.670744207055655], 234 | [6.770153045654297, 45.67062425328127], 235 | [6.770839691162109, 45.6705042992498], 236 | [6.772127151489258, 45.670324367431334], 237 | [6.774015426635742, 45.670084457825894], 238 | [6.774015426635742, 45.66996450302317], 239 | [6.772127151489258, 45.66996450302317], 240 | [6.771955490112305, 45.66978456889096], 241 | [6.773500442504882, 45.66942470062655], 242 | [6.773715019226073, 45.66924476649434], 243 | [6.772599220275879, 45.66924476649434], 244 | [6.773114204406738, 45.66909481961671], 245 | [6.775259971618652, 45.668794925861455], 246 | [6.775174140930176, 45.66849503049943], 247 | [6.772856712341309, 45.66819513353063], 248 | [6.772556304931641, 45.66804518504624], 249 | [6.774272918701172, 45.66804518504624], 250 | [6.774358749389648, 45.6678352544687], 251 | [6.77281379699707, 45.66741539331363], 252 | [6.772599220275879, 45.66711549152453], 253 | [6.773715019226073, 45.66693554910137], 254 | [6.774702072143554, 45.66672561537457], 255 | [6.77556037902832, 45.6664856903441], 256 | [6.775646209716797, 45.66621577323874], 257 | [6.774959564208984, 45.66591586405846], 258 | [6.775345802307129, 45.66537602001425], 259 | [6.7768049240112305, 45.66459624110612], 260 | [6.778478622436523, 45.66345653371158], 261 | [6.780366897583008, 45.661956897830656], 262 | [6.781654357910156, 45.66060719661576], 263 | [6.782341003417969, 45.65940743006689], 264 | [6.783499717712402, 45.65790767367725], 265 | [6.785130500793456, 45.65610792744681], 266 | [6.786375045776366, 45.65412813023869], 267 | [6.787233352661133, 45.65196828205288], 268 | [6.787405014038086, 45.65025836377245], 269 | [6.786890029907227, 45.64899837539742], 270 | [6.786460876464844, 45.64770835689855], 271 | [6.786117553710937, 45.646388308275824], 272 | [6.7859458923339835, 45.644948215127094], 273 | [6.7859458923339835, 45.643388077452364], 274 | [6.7856454849243155, 45.64197792129724], 275 | [6.7850446701049805, 45.64071774666172], 276 | [6.7847442626953125, 45.63930751196587], 277 | [6.7847442626953125, 45.63774721720968], 278 | [6.784915924072266, 45.636486957541806], 279 | [6.785259246826172, 45.63552673296226], 280 | [6.785216331481934, 45.634296412280015], 281 | [6.784787178039551, 45.63279599549506], 282 | [6.784486770629883, 45.631505612186444], 283 | [6.78431510925293, 45.63042526235416], 284 | [6.783843040466309, 45.62961499217081], 285 | [6.7830705642700195, 45.629074801636385], 286 | [6.782126426696777, 45.628504594410785], 287 | [6.781010627746582, 45.62790437049401], 288 | [6.779894828796387, 45.62709405345571], 289 | [6.778779029846191, 45.626073643295896], 290 | [6.77830696105957, 45.62511324183759], 291 | [6.778478622436523, 45.624212849080784], 292 | [6.779379844665527, 45.623522542054104], 293 | [6.781010627746582, 45.62304232075755], 294 | [6.782641410827637, 45.6236725916381], 295 | [6.784272193908691, 45.625413354695766], 296 | [6.785774230957031, 45.62628373622459], 297 | [6.787147521972656, 45.62628373622459], 298 | [6.78980827331543, 45.625863558786946], 299 | [6.793756484985351, 45.62502320391164], 300 | [6.796374320983886, 45.62424286435796], 301 | [6.797661781311035, 45.62352254012592], 302 | [6.799807548522949, 45.622381995007544], 303 | [6.802811622619629, 45.62082122900286], 304 | [6.805686950683594, 45.619560588710925], 305 | [6.808433532714843, 45.61860007413175], 306 | [6.812295913696288, 45.61763954309858], 307 | [6.81727409362793, 45.61667899561142], 308 | [6.821565628051758, 45.61529816424987], 309 | [6.825170516967773, 45.613497049013944], 310 | [6.827831268310547, 45.61157578949916], 311 | [6.829547882080078, 45.609534385705544], 312 | [6.832122802734375, 45.6078531900475], 313 | [6.8355560302734375, 45.60653220252504], 314 | [6.8389892578125, 45.605631521501394], 315 | [6.8424224853515625, 45.60515114697656], 316 | [6.846714019775391, 45.603770014042084], 317 | [6.851863861083984, 45.60148812269796], 318 | [6.856069564819336, 45.59944636488295], 319 | [6.859331130981444, 45.59764474059707], 320 | [6.864137649536132, 45.59536257081649], 321 | [6.8704891204833975, 45.5925998555412], 322 | [6.875467300415038, 45.58947659224702], 323 | [6.879072189331055, 45.58599278093392], 324 | [6.881904602050781, 45.585392148235414], 325 | [6.883964538574219, 45.58767469415148], 326 | [6.8849945068359375, 45.58677362362409], 327 | [6.8849945068359375, 45.58268893665325], 328 | [6.884222030639648, 45.579925695095596], 329 | [6.88267707824707, 45.57848389895115], 330 | [6.883363723754883, 45.5757803402824], 331 | [6.886281967163086, 45.57181501908935], 332 | [6.889028549194336, 45.56766913670228], 333 | [6.891603469848633, 45.563342693121186], 334 | [6.894264221191406, 45.56045832335454], 335 | [6.897010803222656, 45.559016027402336], 336 | [6.898984909057617, 45.557393392392385], 337 | [6.900186538696289, 45.555590418324684], 338 | [6.901044845581055, 45.55354696466958], 339 | [6.901559829711914, 45.551263031427084], 340 | [6.902933120727539, 45.54945988381313], 341 | [6.905164718627929, 45.54813752182771], 342 | [6.906967163085937, 45.54597354106264], 343 | [6.9083404541015625, 45.54296794151787], 344 | [6.909799575805664, 45.54020266575374], 345 | [6.911344528198242, 45.537677713770236], 346 | [6.912546157836914, 45.536355117045915], 347 | [6.91340446472168, 45.53623487558079], 348 | [6.914520263671875, 45.53515266305706], 349 | [6.915893554687499, 45.53310847947476], 350 | [6.915721893310546, 45.53100409185651], 351 | [6.914005279541015, 45.528839500202295], 352 | [6.913146972656249, 45.5264342852359], 353 | [6.913146972656249, 45.523788446957305], 354 | [6.913747787475585, 45.521383046871435], 355 | [6.914949417114257, 45.519218084978306], 356 | [6.915464401245116, 45.5174139037873], 357 | [6.915292739868164, 45.51597050329842], 358 | [6.915979385375977, 45.51410603528079], 359 | [6.917524337768555, 45.51182049973442], 360 | [6.918683052062988, 45.51016646369687], 361 | [6.919455528259277, 45.50914392716814], 362 | [6.919970512390137, 45.508211600502406], 363 | [6.920228004455566, 45.50736948369964], 364 | [6.920871734619141, 45.50613634851753], 365 | [6.9219017028808585, 45.50451219495609], 366 | [6.921944618225097, 45.5038505062997], 367 | [6.9210004806518555, 45.504151282548364], 368 | [6.920528411865234, 45.504151282548364], 369 | [6.920528411865234, 45.5038505062997], 370 | [6.921086311340332, 45.50324894416059], 371 | [6.922202110290527, 45.50234659613102], 372 | [6.922760009765625, 45.50159463140491], 373 | [6.922760009765625, 45.50099304998224], 374 | [6.921558380126953, 45.50117352132368], 375 | [6.919155120849609, 45.50213604542921], 376 | [6.919112205505371, 45.50177508809083], 377 | [6.921429634094238, 45.50009064930855], 378 | [6.922802925109863, 45.49915818913655], 379 | [6.923232078552246, 45.49897770757483], 380 | [6.923360824584961, 45.49864682188341], 381 | [6.923189163208008, 45.4981655320623], 382 | [6.923789978027344, 45.49726309243573], 383 | [6.925163269042968, 45.49593950300371], 384 | [6.92610740661621, 45.49521754358901], 385 | [6.92662239074707, 45.49509721419162], 386 | [6.926836967468262, 45.49437522083771], 387 | [6.926751136779785, 45.49305156352729], 388 | [6.926321983337402, 45.492540153207386], 389 | [6.925549507141113, 45.492840989878005], 390 | [6.926021575927734, 45.491186282129306], 391 | [6.927738189697266, 45.48757602996128], 392 | [6.92812442779541, 45.4851089663334], 393 | [6.927180290222168, 45.48378509124565], 394 | [6.926107406616211, 45.482581545298075], 395 | [6.924905776977539, 45.48149832849069], 396 | [6.924347877502441, 45.480565545509805], 397 | [6.924433708190918, 45.47978319635544], 398 | [6.92413330078125, 45.47909111086522], 399 | [6.9234466552734375, 45.47848928903914], 400 | [6.922287940979004, 45.47794764476755], 401 | [6.920657157897949, 45.47746617805046], 402 | [6.919369697570801, 45.47707498425373], 403 | [6.918425559997559, 45.47677406337738], 404 | [6.917910575866699, 45.476503233431636], 405 | [6.917824745178223, 45.4762624944165], 406 | [6.917095184326172, 45.47605184710332], 407 | [6.915721893310547, 45.47587129149208], 408 | [6.9141340255737305, 45.475149052848735], 409 | [6.912331581115723, 45.47388513117326], 410 | [6.910872459411621, 45.47271146705532], 411 | [6.909756660461426, 45.471628060494915], 412 | [6.908726692199707, 45.47057472943796], 413 | [6.907782554626464, 45.46955147388448], 414 | [6.907310485839843, 45.469039846107734], 415 | ], 416 | camera: [ 417 | [6.559867858886718, 46.05965291336496], 418 | [6.566820144653319, 46.05607892925637], 419 | [6.5807247161865225, 46.048930961039204], 420 | [6.59076690673828, 46.040947789076256], 421 | [6.596946716308594, 46.03212941336754], 422 | [6.600122451782227, 46.02581311383427], 423 | [6.60029411315918, 46.021998890476425], 424 | [6.599607467651367, 46.01842284020647], 425 | [6.598062515258789, 46.0150849630244], 426 | [6.597375869750977, 46.01019678816739], 427 | [6.59754753112793, 46.003758315635444], 428 | [6.598749160766602, 45.9970209089724], 429 | [6.600980758666992, 45.989984568178265], 430 | [6.602354049682617, 45.98235079239879], 431 | [6.602869033813477, 45.97411958163397], 432 | [6.605186462402344, 45.96779655343573], 433 | [6.609306335449219, 45.963381707804075], 434 | [6.614198684692383, 45.958847161133036], 435 | [6.619863510131835, 45.954192913422624], 436 | [6.6287899017333975, 45.94625521779012], 437 | [6.640977859497069, 45.93503407423551], 438 | [6.649303436279296, 45.92667707590821], 439 | [6.653766632080078, 45.92118422280822], 440 | [6.658658981323242, 45.91598943593573], 441 | [6.663980484008789, 45.911092715290735], 442 | [6.6680145263671875, 45.90368659556627], 443 | [6.6707611083984375, 45.893771076762334], 444 | [6.67119026184082, 45.886303896938024], 445 | [6.669301986694336, 45.88128505609335], 446 | [6.664924621582031, 45.87632552601306], 447 | [6.658058166503906, 45.87142530669717], 448 | [6.648960113525391, 45.8658671193758], 449 | [6.6376304626464835, 45.85965096404896], 450 | [6.628875732421874, 45.85403200857125], 451 | [6.6226959228515625, 45.84901025294267], 452 | [6.615400314331055, 45.84458602102845], 453 | [6.606988906860351, 45.84075931282859], 454 | [6.599435806274413, 45.839324321929716], 455 | [6.592741012573242, 45.840281048331846], 456 | [6.591796875, 45.83836743101954], 457 | [6.5966033935546875, 45.833583469992796], 458 | [6.600551605224609, 45.82897854134357], 459 | [6.603641510009765, 45.82455264507184], 460 | [6.61050796508789, 45.81869055466542], 461 | [6.621150970458984, 45.81139227012433], 462 | [6.624670028686523, 45.80523004766626], 463 | [6.621065139770508, 45.80020388729121], 464 | [6.614284515380859, 45.79481816022415], 465 | [6.604328155517577, 45.78907286646508], 466 | [6.598062515258788, 45.784105207861344], 467 | [6.595487594604492, 45.77991518441295], 468 | [6.592912673950195, 45.77620380562916], 469 | [6.590337753295898, 45.77297107150998], 470 | [6.579523086547852, 45.76913937856457], 471 | [6.560468673706055, 45.76470872679294], 472 | [6.547679901123047, 45.76141554755477], 473 | [6.541156768798828, 45.75925984085004], 474 | [6.537723541259766, 45.75728371274751], 475 | [6.537380218505859, 45.75548716324716], 476 | [6.539182662963867, 45.75387022705243], 477 | [6.543130874633789, 45.75243290416333], 478 | [6.548452377319336, 45.7510554372092], 479 | [6.555147171020508, 45.74973782619005], 480 | [6.561498641967773, 45.7481207025949], 481 | [6.567506790161133, 45.74620406642376], 482 | [6.573858261108398, 45.74716231870053], 483 | [6.58055305480957, 45.75099545942522], 484 | [6.585788726806641, 45.75398998493712], 485 | [6.589565277099609, 45.75614589523623], 486 | [6.59205436706543, 45.75536732027412], 487 | [6.593255996704102, 45.75165426005081], 488 | [6.593255996704102, 45.748240449682626], 489 | [6.59205436706543, 45.74512588916956], 490 | [6.587419509887695, 45.742071060170815], 491 | [6.579351425170898, 45.73907596268637], 492 | [6.573858261108398, 45.73578114337202], 493 | [6.570940017700195, 45.732186602227785], 494 | [6.569995880126953, 45.72925094062734], 495 | [6.571025848388671, 45.72697415857067], 496 | [6.572742462158202, 45.724277818906415], 497 | [6.575145721435547, 45.72116192163456], 498 | [6.575918197631836, 45.71810578158041], 499 | [6.57505989074707, 45.715109398743984], 500 | [6.572742462158203, 45.712292665970615], 501 | [6.568965911865234, 45.70965558326032], 502 | [6.566734313964844, 45.70593937521336], 503 | [6.56604766845703, 45.70114404182972], 504 | [6.565790176391601, 45.69520906597291], 505 | [6.565961837768555, 45.68813444764293], 506 | [6.569309234619141, 45.68435728851545], 507 | [6.575832366943359, 45.68387758859047], 508 | [6.580982208251953, 45.68441723596688], 509 | [6.584758758544921, 45.68597623064468], 510 | [6.588449478149413, 45.68729535453653], 511 | [6.59205436706543, 45.688374607642466], 512 | [6.595916748046875, 45.68921401772707], 513 | [6.60003662109375, 45.68981358479036], 514 | [6.605100631713867, 45.69125248712831], 515 | [6.611108779907227, 45.69353072474093], 516 | [6.617546081542969, 45.695389239187335], 517 | [6.624412536621094, 45.69682803046751], 518 | [6.6309356689453125, 45.69850656270907], 519 | [6.637115478515625, 45.70042483591203], 520 | [6.642007827758789, 45.701383972513504], 521 | [6.645612716674805, 45.701383972513504], 522 | [6.649560928344727, 45.70120413941373], 523 | [6.653852462768555, 45.700844473214175], 524 | [6.65797233581543, 45.699825388389954], 525 | [6.661920547485352, 45.69814688494105], 526 | [6.6652679443359375, 45.69682803817983], 527 | [6.6680145263671875, 45.6958688481063], 528 | [6.670503616333008, 45.69538925306953], 529 | [6.672735214233398, 45.69538925306953], 530 | [6.675052642822266, 45.6955691031364], 531 | [6.677455902099609, 45.69592880327014], 532 | [6.686124801635742, 45.696348449827084], 533 | [6.701059341430663, 45.69682804280723], 534 | [6.712388992309569, 45.697787204088115], 535 | [6.720113754272461, 45.69922593366971], 536 | [6.724491119384766, 45.69922593366971], 537 | [6.7255210876464835, 45.697787204088115], 538 | [6.725435256958007, 45.696588242203916], 539 | [6.724233627319335, 45.695629048017125], 540 | [6.725692749023437, 45.69460988452721], 541 | [6.729812622070312, 45.693530751734166], 542 | [6.732730865478515, 45.69101259706147], 543 | [6.734447479248046, 45.68705542050914], 544 | [6.738309860229491, 45.68279811105327], 545 | [6.744318008422852, 45.67824066869385], 546 | [6.7504119873046875, 45.67458254119413], 547 | [6.756591796874999, 45.67182372855409], 548 | [6.762943267822265, 45.67014443329913], 549 | [6.769466400146484, 45.66954465542927], 550 | [6.77332878112793, 45.66834506112699], 551 | [6.774530410766602, 45.666545650392294], 552 | [6.777534484863281, 45.66390635062825], 553 | [6.782341003417969, 45.66042716183486], 554 | [6.785259246826172, 45.657127747266344], 555 | [6.786289215087891, 45.65400810692269], 556 | [6.7861175537109375, 45.646807486922654], 557 | [6.7847442626953125, 45.635525887266226], 558 | [6.782426834106445, 45.62916482182298], 559 | [6.779165267944336, 45.62772429059292], 560 | [6.7765045166015625, 45.62622369545082], 561 | [6.774444580078125, 45.62466303639669], 562 | [6.774444580078125, 45.62304230340381], 563 | [6.7765045166015625, 45.621361496472176], 564 | [6.7792510986328125, 45.62088127209051], 565 | [6.782684326171875, 45.6216016302588], 566 | [6.785087585449219, 45.62268213974522], 567 | [6.786460876464844, 45.62412280054977], 568 | [6.7888641357421875, 45.62526330659004], 569 | [6.79229736328125, 45.62610365786605], 570 | [6.795473098754883, 45.62628373468203], 571 | [6.798391342163086, 45.625803537038], 572 | [6.801824569702148, 45.62466303099773], 573 | [6.80577278137207, 45.62286221656121], 574 | [6.812124252319336, 45.620641107452634], 575 | [6.820878982543945, 45.617999703672005], 576 | [6.827402114868164, 45.615178053136304], 577 | [6.831693649291992, 45.61217615584553], 578 | [6.837530136108398, 45.60899395395269], 579 | [6.844911575317383, 45.60563144745778], 580 | [6.85272216796875, 45.602088571571635], 581 | [6.8609619140625, 45.59836532629423], 582 | [6.868686676025391, 45.59554276949589], 583 | [6.875896453857421, 45.59362090117663], 584 | [6.88216209411621, 45.59193922320471], 585 | [6.887483596801758, 45.59049773558016], 586 | [6.890316009521484, 45.58785482727053], 587 | [6.890659332275391, 45.58401049827583], 588 | [6.891689300537109, 45.57944492772232], 589 | [6.893405914306641, 45.57415811560999], 590 | [6.895895004272461, 45.56953182836331], 591 | [6.89915657043457, 45.56556606598229], 592 | [6.903018951416016, 45.56147982303008], 593 | [6.907482147216796, 45.557273099506716], 594 | [6.911087036132812, 45.55264528789161], 595 | [6.9138336181640625, 45.54759638818477], 596 | [6.916494369506836, 45.54218629743325], 597 | [6.919069290161133, 45.53641501563702], 598 | [6.920270919799805, 45.53052286888634], 599 | [6.920099258422852, 45.52450985718119], 600 | [6.919240951538086, 45.51903753688923], 601 | [6.917695999145508, 45.51410590801048], 602 | [6.916751861572266, 45.51055740436378], 603 | [6.916408538818359, 45.50839202594914], 604 | [6.916666030883789, 45.506286720443725], 605 | [6.917524337768555, 45.50424148784753], 606 | [6.918468475341797, 45.502376661157285], 607 | [6.919498443603516, 45.500692240373006], 608 | [6.920957565307617, 45.4983459575087], 609 | [6.922845840454102, 45.49533781256436], 610 | [6.924047470092773, 45.492269334253635], 611 | [6.924562454223632, 45.48914052257654], 612 | [6.924476623535155, 45.4861920743804], 613 | [6.923789978027344, 45.48342398966521], 614 | [6.922588348388672, 45.48107705501224], 615 | [6.920871734619141, 45.479151270421475], 616 | [6.918468475341797, 45.47752635149105], 617 | [6.915378570556641, 45.47620229822097], 618 | [6.912202835083008, 45.47397535768372], 619 | [6.9089412689208975, 45.47084552987931], 620 | [6.907310485839843, 45.469280615977105], 621 | ], 622 | }; 623 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ES2018", 4 | "module": "commonjs", 5 | "jsx": "react-jsx", 6 | "outDir": "./dist", 7 | "strict": true, 8 | "noEmit": true, 9 | "lib": ["es2015"], 10 | "esModuleInterop": true, 11 | "skipLibCheck": true, 12 | "forceConsistentCasingInFileNames": true, 13 | "noUnusedLocals": true 14 | } 15 | } 16 | --------------------------------------------------------------------------------