├── .babelrc ├── .gitignore ├── .storybook ├── cesium.config.js └── main.js ├── API.md ├── CHANGELOG.md ├── LICENSE ├── jest.config.js ├── package.json ├── public ├── index.html ├── plane.glb └── us-states.topojson ├── readme.md ├── rollup.config.js ├── src ├── context.tsx ├── generated-mapping.ts ├── hooks.tsx ├── index.ts ├── reconciler │ ├── append-child.ts │ ├── commit-update.ts │ ├── create-instance.ts │ ├── finalize-initial-children.ts │ ├── get-child-host-context.ts │ ├── get-public-instance.ts │ ├── get-root-host-context.ts │ ├── index.ts │ ├── insert-before.ts │ ├── prepare-update.ts │ ├── remove-child.ts │ ├── should-set-text-content.ts │ └── types.ts ├── stories │ ├── data-source.stories.tsx │ ├── entity.stories.tsx │ ├── model.stories.tsx │ ├── remove-child.stories.tsx │ ├── tileset.stories.tsx │ └── viewer.stories.tsx ├── types.ts ├── utils │ ├── __tests__ │ │ ├── generate-types.ts │ │ └── update-cesium-object.ts │ ├── errors.ts │ ├── generate-types.ts │ └── update-cesium-object.ts └── viewer.tsx ├── tsconfig.json └── yarn.lock /.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": ["@babel/react", "@babel/preset-typescript"] 3 | } 4 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .env 3 | lib 4 | storybook-static 5 | coverage 6 | -------------------------------------------------------------------------------- /.storybook/cesium.config.js: -------------------------------------------------------------------------------- 1 | const path = require("path"); 2 | const webpackModule = require("webpack"); 3 | const CopyWebpackPlugin = require("copy-webpack-plugin"); 4 | 5 | function webpack( 6 | webpackConfig = {}, 7 | { loadPartially, loadCSSinHTML, packageName } = { 8 | loadPartially: false, 9 | loadCSSinHTML: false, 10 | packageName: undefined, 11 | } 12 | ) { 13 | const prod = process.env.NODE_ENV === "production"; 14 | 15 | let pnp; 16 | 17 | try { 18 | // @ts-ignore 19 | pnp = require("pnpapi"); 20 | } catch (error) { 21 | // not in PnP; not a problem 22 | } 23 | 24 | let cesiumSource; 25 | 26 | if (pnp) { 27 | const topLevelLocation = packageName 28 | ? packageName 29 | : pnp.getPackageInformation(pnp.topLevel).packageLocation; 30 | 31 | cesiumSource = path.resolve( 32 | pnp.resolveToUnqualified("cesium", topLevelLocation, { 33 | considerBuiltins: false, 34 | }), 35 | "Source" 36 | ); 37 | } else { 38 | cesiumSource = "node_modules/cesium/Source"; 39 | } 40 | 41 | const { module = {}, resolve = {}, resolveLoader = {} } = webpackConfig; 42 | 43 | // if (loadPartially) { 44 | // https://cesium.com/docs/tutorials/cesium-and-webpack/ 45 | 46 | // FIXME: throws error at build time 47 | // if (prod) { 48 | // // Strip cesium pragmas 49 | // webpackConfig.module = { ...webpackConfig.module } || {}; 50 | // webpackConfig.module.rules = webpackConfig.module.rules || []; 51 | // webpackConfig.module.rules.push({ 52 | // test: /.js$/, 53 | // enforce: "pre", 54 | // include: cesiumSource, 55 | // use: [ 56 | // { 57 | // loader: "strip-pragma-loader", 58 | // options: { 59 | // pragmas: { 60 | // debug: false, 61 | // }, 62 | // }, 63 | // }, 64 | // ], 65 | // }); 66 | // } 67 | 68 | webpackConfig.resolve.alias = { 69 | ...webpackConfig.resolve.alias, 70 | cesium$: "cesium/Cesium", 71 | cesium: "cesium/Source", 72 | }; 73 | 74 | webpackConfig.plugins.push( 75 | new CopyWebpackPlugin({ 76 | patterns: [ 77 | { 78 | from: path.join(cesiumSource, "../Build/Cesium/Workers"), 79 | to: "cesium/Workers", 80 | }, 81 | { 82 | from: path.join(cesiumSource, "Assets"), 83 | to: "cesium/Assets", 84 | }, 85 | { 86 | from: path.join(cesiumSource, "Widgets"), 87 | to: "cesium/Widgets", 88 | }, 89 | { 90 | from: path.join(cesiumSource, "ThirdParty"), 91 | to: "cesium/ThirdParty", 92 | }, 93 | ], 94 | }), 95 | 96 | new webpackModule.DefinePlugin({ 97 | CESIUM_BASE_URL: JSON.stringify("cesium"), 98 | }) 99 | ); 100 | 101 | webpackConfig.output = { 102 | ...webpackConfig.output, 103 | // Needed to compile multiline strings in Cesium 104 | sourcePrefix: "", 105 | }; 106 | 107 | webpackConfig.amd = { 108 | ...webpackConfig.amd, 109 | // Enable webpack-friendly use of require in Cesium 110 | toUrlUndefined: true, 111 | }; 112 | 113 | webpackConfig.node = { 114 | ...webpackConfig.node, 115 | // Resolve node module use of f 116 | fs: "empty", 117 | }; 118 | 119 | console.log(webpackConfig.module.rules[3]); 120 | return webpackConfig; 121 | } 122 | 123 | module.exports = { webpack }; 124 | -------------------------------------------------------------------------------- /.storybook/main.js: -------------------------------------------------------------------------------- 1 | const cesiumPlugin = require.resolve("./cesium.config.js"); 2 | 3 | module.exports = { 4 | stories: ["../src/**/*.stories.tsx"], 5 | addons: [ 6 | "@storybook/react", 7 | "@storybook/addon-actions", 8 | "@storybook/addon-links", 9 | cesiumPlugin, 10 | ], 11 | }; 12 | -------------------------------------------------------------------------------- /API.md: -------------------------------------------------------------------------------- 1 | # API 2 | 3 | ## 1. Viewer 4 | 5 | ## 2. Specific props 6 | 7 | Every react-cesium-fiber component accepts all the editable properties of the CesiumJs object as props. 8 | For example, you can specify wether or not an entity should be displayed like this: `` where `show` is a boolean you provide. 9 | 10 | In addition to this, react-cesium-fiber has a few specific props: 11 | 12 | | Prop | Type | Description | 13 | | ------------- | -------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | 14 | | args | `any[]` | An array of properties to instantiate the CesiumJs object with. The array will be spread in the constructor. For example, for a Cartesian3, according to the doc, you need to do `new Cesium.Cartesian3(x, y, z)`. So, here, we will pass the props `args={[x, y, z]}`. | 15 | | attach | `string or function` | description | 16 | | constructFrom | `string` | Description of constructFrom | 17 | | onUpdate | `function` | Description of onUpdate | 18 | | ref | `ref object` | Description of ref | 19 | 20 | ## 3. Hooks 21 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | ## v0.3.0 4 | 5 | _Fixes for production._ 6 | 7 | - Removed the postinstall script preventing installation of the package. 8 | - Add missing method (`insertBefore`) in the reconciler. 9 | - Possibility to pass `ref` and `className` props to the `Viewer` component. 10 | 11 | ## v0.2.0 12 | 13 | _Small enhancements to improve developer experience._ 14 | 15 | - Export typescript types. 16 | - Add Changelog. 17 | - Add beginning of readme. 18 | 19 | ## v0.1.0 20 | 21 | **First release 💙🎉** 22 | 23 | _All lot of features are still in development. More work incoming, soon™️._ 24 | 25 | 🚨 **Not tested in production yet - Beware** 🚨 26 | 27 | - Core feature: 28 | - `Viewer` component. Props naming may change. 29 | - Context hook: 30 | - `useViewer`: a hook to get access to the viewer. 31 | - Utility hooks: 32 | - `usePostRender`: a hook to register a function to call after the render of the viewer. 33 | - `usePostUpdate`: a hook to register a function to call after an update of the viewer. 34 | - `usePreRender`: a hook to register a function to call before the render of the viewer. 35 | - `usePreUpdate`: a hook to register a function to call after an update of the viewer. 36 | - Basic Storybook stories. 37 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 Hugo Raynal 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /jest.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | preset: 'ts-jest', 3 | testEnvironment: 'node', 4 | }; -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "react-cesium-fiber", 3 | "version": "0.3.0", 4 | "license": "MIT", 5 | "description": "React-fiber renderer for cesium", 6 | "main": "lib/index.cjs.js", 7 | "module": "lib/index.esm.js", 8 | "types": "lib/index.d.ts", 9 | "files": [ 10 | "lib/*" 11 | ], 12 | "author": { 13 | "name": "Hugo Raynal", 14 | "email": "raynalhugo@gmail.com" 15 | }, 16 | "sideEffects": false, 17 | "repository": { 18 | "type": "git", 19 | "url": "git+https://github.com/RaynalHugo/react-cesium-fiber.git" 20 | }, 21 | "homepage": "https://github.com/RaynalHugo/react-cesium-fiber#readme", 22 | "bugs": { 23 | "url": "https://github.com/RaynalHugo/react-cesium-fiber/issues" 24 | }, 25 | "keywords": [ 26 | "react", 27 | "renderer", 28 | "fiber", 29 | "cesium", 30 | "cesiumjs", 31 | "map", 32 | "3D", 33 | "globe", 34 | "earth" 35 | ], 36 | "dependencies": { 37 | "lodash": "4.17.21", 38 | "react-reconciler": "0.25.1" 39 | }, 40 | "peerDependencies": { 41 | "cesium": "^1.63.0", 42 | "react": "^16.8.0" 43 | }, 44 | "devDependencies": { 45 | "@babel/core": "7.10.5", 46 | "@babel/preset-env": "7.10.4", 47 | "@babel/preset-react": "7.10.4", 48 | "@babel/preset-typescript": "7.10.4", 49 | "@hot-loader/react-dom": "16.13.0", 50 | "@rollup/plugin-commonjs": "14.0.0", 51 | "@rollup/plugin-node-resolve": "8.4.0", 52 | "@storybook/addon-actions": "6.0.0-rc.14", 53 | "@storybook/addon-links": "6.0.0-rc.14", 54 | "@storybook/addons": "6.0.0-rc.14", 55 | "@storybook/react": "6.0.0-rc.14", 56 | "@types/cesium": "1.67.10", 57 | "@types/jest": "26.0.10", 58 | "@types/lodash": "4.14.154", 59 | "@types/react": "16.9.35", 60 | "@types/react-dom": "16.9.8", 61 | "@types/react-reconciler": "0.18.0", 62 | "babel-loader": "8.1.0", 63 | "builtin-modules": "3.1.0", 64 | "cesium": "1.70.0", 65 | "copy-webpack-plugin": "6.0.2", 66 | "jest": "26.4.2", 67 | "react": "16.13.0", 68 | "react-dom": "16.13.0", 69 | "react-hot-loader": "4.12.21", 70 | "rollup": "2.23.0", 71 | "rollup-plugin-babel": "4.4.0", 72 | "rollup-plugin-commonjs": "10.1.0", 73 | "rollup-plugin-node-resolve": "5.2.0", 74 | "ts-jest": "26.3.0", 75 | "ts-node": "9.0.0", 76 | "typescript": "3.9.7", 77 | "webpack": "4.44.0" 78 | }, 79 | "scripts": { 80 | "build:lib": "rollup -c ./rollup.config.js", 81 | "build:storybook": "build-storybook -s ./public", 82 | "build:types": "yarn run generate:mapping && tsc --emitDeclarationOnly", 83 | "build": "yarn build:lib && yarn build:types", 84 | "storybook": "source ./.env; start-storybook -p 9009 -s ./public;", 85 | "generate:mapping": "ts-node ./src/utils/generate-types.ts", 86 | "test": "jest" 87 | }, 88 | "browserslist": [ 89 | ">0.2%", 90 | "not dead", 91 | "not ie <= 11", 92 | "not op_mini all" 93 | ] 94 | } 95 | -------------------------------------------------------------------------------- /public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 12 | 13 | 14 | 23 | React App 24 | 25 | 26 | 27 | 30 |
31 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /public/plane.glb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RaynalHugo/react-cesium-fiber/e16d50f7221448ca3b684d68c19b55132a69580b/public/plane.glb -------------------------------------------------------------------------------- /public/us-states.topojson: -------------------------------------------------------------------------------- 1 | { 2 | "type" : "Topology", 3 | "transform" : { 4 | "scale" : [0.0035892802775563276, 0.0005250691027211737], 5 | "translate" : [-179.14350338367416, 18.906117143691233] 6 | }, 7 | "objects" : { 8 | "states" : { 9 | "type" : "GeometryCollection", 10 | "geometries" : [{ 11 | "type" : "MultiPolygon", 12 | "arcs" : [[[0]], [[1]], [[2, 3, 4, 5, 6, 7, 8, 9]]], 13 | "id" : "MA", 14 | "properties" : { 15 | "name" : "Massachusetts", 16 | "Statehood" : "Feb. 6, 1788", 17 | "Population" : 6692824 18 | } 19 | }, { 20 | "type" : "Polygon", 21 | "arcs" : [[10, 11, 12, 13, 14, 15]], 22 | "id" : "MN", 23 | "properties" : { 24 | "name" : "Minnesota", 25 | "Statehood" : "May 11, 1858", 26 | "Population" : 5420380 27 | } 28 | }, { 29 | "type" : "Polygon", 30 | "arcs" : [[16, 17, 18, 19, 20]], 31 | "id" : "MT", 32 | "properties" : { 33 | "name" : "Montana", 34 | "Statehood" : "Nov. 8, 1889", 35 | "Population" : 1015165 36 | } 37 | }, { 38 | "type" : "Polygon", 39 | "arcs" : [[21, -21, 22, -15]], 40 | "id" : "ND", 41 | "properties" : { 42 | "name" : "North Dakota", 43 | "Statehood" : "Nov. 2, 1889", 44 | "Population" : 723393 45 | } 46 | }, { 47 | "type" : "MultiPolygon", 48 | "arcs" : [[[23]], [[24]], [[25]], [[26]], [[27]], [[28]], [[29]], [[30]]], 49 | "id" : "HI", 50 | "properties" : { 51 | "name" : "Hawaii", 52 | "Statehood" : "Aug. 21, 1959", 53 | "Population" : 1404054 54 | } 55 | }, { 56 | "type" : "Polygon", 57 | "arcs" : [[31, 32, 33, 34, 35, 36, -19]], 58 | "id" : "ID", 59 | "properties" : { 60 | "name" : "Idaho", 61 | "Statehood" : "July 3, 1890", 62 | "Population" : 1612136 63 | } 64 | }, { 65 | "type" : "MultiPolygon", 66 | "arcs" : [[[37]], [[38]], [[39]], [[40]], [[41]], [[42]], [[43]], [[-36, 44, 45]]], 67 | "id" : "WA", 68 | "properties" : { 69 | "name" : "Washington", 70 | "Statehood" : "Nov. 11, 1889", 71 | "Population" : 6971406 72 | } 73 | }, { 74 | "type" : "Polygon", 75 | "arcs" : [[46, 47, 48, 49, 50]], 76 | "id" : "AZ", 77 | "properties" : { 78 | "name" : "Arizona", 79 | "Statehood" : "Feb. 14, 1912", 80 | "Population" : 6626624 81 | } 82 | }, { 83 | "type" : "MultiPolygon", 84 | "arcs" : [[[51]], [[52]], [[53]], [[54]], [[-49, 55, 56, 57]]], 85 | "id" : "CA", 86 | "properties" : { 87 | "name" : "California", 88 | "Statehood" : "Sept. 9, 1850", 89 | "Population" : 38332521 90 | } 91 | }, { 92 | "type" : "Polygon", 93 | "arcs" : [[58, 59, 60, 61, 62, 63]], 94 | "id" : "CO", 95 | "properties" : { 96 | "name" : "Colorado", 97 | "Statehood" : "Aug. 1, 1876", 98 | "Population" : 5268367 99 | } 100 | }, { 101 | "type" : "Polygon", 102 | "arcs" : [[-50, -58, 64, -34, 65]], 103 | "id" : "NV", 104 | "properties" : { 105 | "name" : "Nevada", 106 | "Statehood" : "Oct. 31, 1864", 107 | "Population" : 2790136 108 | } 109 | }, { 110 | "type" : "Polygon", 111 | "arcs" : [[66, 67, -47, -61, 68]], 112 | "id" : "NM", 113 | "properties" : { 114 | "name" : "New Mexico", 115 | "Statehood" : "Jan. 6, 1912", 116 | "Population" : 2085287 117 | } 118 | }, { 119 | "type" : "MultiPolygon", 120 | "arcs" : [[[-45, -35, -65, -57, 69]]], 121 | "id" : "OR", 122 | "properties" : { 123 | "name" : "Oregon", 124 | "Statehood" : "Feb. 14, 1859", 125 | "Population" : 3930065 126 | } 127 | }, { 128 | "type" : "Polygon", 129 | "arcs" : [[70, -62, -51, -66, -33]], 130 | "id" : "UT", 131 | "properties" : { 132 | "name" : "Utah", 133 | "Statehood" : "Jan. 4, 1896", 134 | "Population" : 2900872 135 | } 136 | }, { 137 | "type" : "Polygon", 138 | "arcs" : [[71, -63, -71, -32, -18, 72]], 139 | "id" : "WY", 140 | "properties" : { 141 | "name" : "Wyoming", 142 | "Statehood" : "July 10, 1890", 143 | "Population" : 582658 144 | } 145 | }, { 146 | "type" : "Polygon", 147 | "arcs" : [[73, 74, 75, 76, 77, 78]], 148 | "id" : "AR", 149 | "properties" : { 150 | "name" : "Arkansas", 151 | "Statehood" : "June 15, 1836", 152 | "Population" : 2959373 153 | } 154 | }, { 155 | "type" : "Polygon", 156 | "arcs" : [[79, 80, 81, 82, -13, 83]], 157 | "id" : "IA", 158 | "properties" : { 159 | "name" : "Iowa", 160 | "Statehood" : "Dec. 28, 1846", 161 | "Population" : 3090416 162 | } 163 | }, { 164 | "type" : "Polygon", 165 | "arcs" : [[84, -59, 85, 86]], 166 | "id" : "KS", 167 | "properties" : { 168 | "name" : "Kansas", 169 | "Statehood" : "Jan. 29, 1861", 170 | "Population" : 2893957 171 | } 172 | }, { 173 | "type" : "Polygon", 174 | "arcs" : [[87, 88, 89, 90, 91, -79, 92, -87, 93, -81]], 175 | "id" : "MO", 176 | "properties" : { 177 | "name" : "Missouri", 178 | "Statehood" : "Aug. 10, 1821", 179 | "Population" : 6044171 180 | } 181 | }, { 182 | "type" : "Polygon", 183 | "arcs" : [[-82, -94, -86, -64, -72, 94]], 184 | "id" : "NE", 185 | "properties" : { 186 | "name" : "Nebraska", 187 | "Statehood" : "Mar. 1, 1867", 188 | "Population" : 1868516 189 | } 190 | }, { 191 | "type" : "Polygon", 192 | "arcs" : [[-78, 95, -69, -60, -85, -93]], 193 | "id" : "OK", 194 | "properties" : { 195 | "name" : "Oklahoma", 196 | "Statehood" : "Nov. 16, 1907", 197 | "Population" : 3850568 198 | } 199 | }, { 200 | "type" : "Polygon", 201 | "arcs" : [[-14, -83, -95, -73, -17, -22]], 202 | "id" : "SD", 203 | "properties" : { 204 | "name" : "South Dakota", 205 | "Statehood" : "Nov. 2, 1889", 206 | "Population" : 844877 207 | } 208 | }, { 209 | "type" : "MultiPolygon", 210 | "arcs" : [[[96]], [[97]], [[98, 99, -76, 100]]], 211 | "id" : "LA", 212 | "properties" : { 213 | "name" : "Louisiana", 214 | "Statehood" : "Apr. 30, 1812", 215 | "Population" : 4625470 216 | } 217 | }, { 218 | "type" : "MultiPolygon", 219 | "arcs" : [[[101]], [[102]], [[103]], [[104]], [[105]], [[-77, -100, 106, -67, -96]]], 220 | "id" : "TX", 221 | "properties" : { 222 | "name" : "Texas", 223 | "Statehood" : "Dec. 29, 1845", 224 | "Population" : 26448193 225 | } 226 | }, { 227 | "type" : "Polygon", 228 | "arcs" : [[107, 108, 109, -7]], 229 | "id" : "CT", 230 | "properties" : { 231 | "name" : "Connecticut", 232 | "Statehood" : "Jan. 9, 1788", 233 | "Population" : 3596080 234 | } 235 | }, { 236 | "type" : "Polygon", 237 | "arcs" : [[110, -10, 111, 112, 113]], 238 | "id" : "NH", 239 | "properties" : { 240 | "name" : "New Hampshire", 241 | "Statehood" : "June 21, 1788", 242 | "Population" : 1323459 243 | } 244 | }, { 245 | "type" : "MultiPolygon", 246 | "arcs" : [[[114]], [[115, -4]], [[116, -108, -6]]], 247 | "id" : "RI", 248 | "properties" : { 249 | "name" : "Rhode Island", 250 | "Statehood" : "May 29, 1790", 251 | "Population" : 1051511 252 | } 253 | }, { 254 | "type" : "Polygon", 255 | "arcs" : [[-9, 117, 118, -112]], 256 | "id" : "VT", 257 | "properties" : { 258 | "name" : "Vermont", 259 | "Statehood" : "Mar. 4, 1791", 260 | "Population" : 626630 261 | } 262 | }, { 263 | "type" : "MultiPolygon", 264 | "arcs" : [[[119]], [[120, 121, 122, 123, 124]]], 265 | "id" : "AL", 266 | "properties" : { 267 | "name" : "Alabama", 268 | "Statehood" : "Dec. 14, 1819", 269 | "Population" : 4833722 270 | } 271 | }, { 272 | "type" : "MultiPolygon", 273 | "arcs" : [[[125]], [[126]], [[127]], [[128]], [[129]], [[130]], [[131, -122, 132]]], 274 | "id" : "FL", 275 | "properties" : { 276 | "name" : "Florida", 277 | "Statehood" : "Mar. 3, 1845", 278 | "Population" : 19552860 279 | } 280 | }, { 281 | "type" : "MultiPolygon", 282 | "arcs" : [[[133]], [[134]], [[135, -133, -121, 136, 137, 138]]], 283 | "id" : "GA", 284 | "properties" : { 285 | "name" : "Georgia", 286 | "Statehood" : "Jan. 2, 1788", 287 | "Population" : 9992167 288 | } 289 | }, { 290 | "type" : "MultiPolygon", 291 | "arcs" : [[[-124, 139, -101, -75, 140]]], 292 | "id" : "MS", 293 | "properties" : { 294 | "name" : "Mississippi", 295 | "Statehood" : "Dec. 10, 1817", 296 | "Population" : 2991207 297 | } 298 | }, { 299 | "type" : "MultiPolygon", 300 | "arcs" : [[[141, -139, 142]]], 301 | "id" : "SC", 302 | "properties" : { 303 | "name" : "South Carolina", 304 | "Statehood" : "May 23, 1788", 305 | "Population" : 4774839 306 | } 307 | }, { 308 | "type" : "Polygon", 309 | "arcs" : [[143, 144, 145, -88, -80, 146]], 310 | "id" : "IL", 311 | "properties" : { 312 | "name" : "Illinois", 313 | "Statehood" : "Dec. 3, 1818", 314 | "Population" : 12882135 315 | } 316 | }, { 317 | "type" : "Polygon", 318 | "arcs" : [[147, 148, 149, -145]], 319 | "id" : "IN", 320 | "properties" : { 321 | "name" : "Indiana", 322 | "Statehood" : "Dec. 11, 1816", 323 | "Population" : 6570902 324 | } 325 | }, { 326 | "type" : "MultiPolygon", 327 | "arcs" : [[[150, 151, 152, -89, -146, -150, 153]]], 328 | "id" : "KY", 329 | "properties" : { 330 | "name" : "Kentucky", 331 | "Statehood" : "June 1, 1792", 332 | "Population" : 4395295 333 | } 334 | }, { 335 | "type" : "MultiPolygon", 336 | "arcs" : [[[154]], [[155, 156]], [[157, 158, 159, 160]], [[161, -143, -138, 162, 163]]], 337 | "id" : "NC", 338 | "properties" : { 339 | "name" : "North Carolina", 340 | "Statehood" : "Nov. 21, 1789", 341 | "Population" : 9848060 342 | } 343 | }, { 344 | "type" : "Polygon", 345 | "arcs" : [[164, -154, -149, 165, 166, 167]], 346 | "id" : "OH", 347 | "properties" : { 348 | "name" : "Ohio", 349 | "Statehood" : "Mar. 1, 1803", 350 | "Population" : 11570808 351 | } 352 | }, { 353 | "type" : "Polygon", 354 | "arcs" : [[168, -163, -137, -125, -141, -74, -92, -170, -90, -153]], 355 | "id" : "TN", 356 | "properties" : { 357 | "name" : "Tennessee", 358 | "Statehood" : "June 1, 1796", 359 | "Population" : 6495978 360 | } 361 | }, { 362 | "type" : "MultiPolygon", 363 | "arcs" : [[[170, 171, 172, -156, 173, -161, 174, -164, -169, -152, 175]]], 364 | "id" : "VA", 365 | "properties" : { 366 | "name" : "Virginia", 367 | "Statehood" : "June 25, 1788", 368 | "Population" : 8260405 369 | } 370 | }, { 371 | "type" : "Polygon", 372 | "arcs" : [[176, -147, -84, -12]], 373 | "id" : "WI", 374 | "properties" : { 375 | "name" : "Wisconsin", 376 | "Statehood" : "May 29, 1848", 377 | "Population" : 5742713 378 | } 379 | }, { 380 | "type" : "Polygon", 381 | "arcs" : [[177, -176, -151, -165, 178]], 382 | "id" : "WV", 383 | "properties" : { 384 | "name" : "West Virginia", 385 | "Statehood" : "June 20, 1863", 386 | "Population" : 1854304 387 | } 388 | }, { 389 | "type" : "Polygon", 390 | "arcs" : [[179, 180, 181, 182, 183]], 391 | "id" : "DE", 392 | "properties" : { 393 | "name" : "Delaware", 394 | "Statehood" : "Dec. 7, 1787", 395 | "Population" : 925749 396 | } 397 | }, { 398 | "type" : "Polygon", 399 | "arcs" : [[184, -172, 185]], 400 | "id" : "DC", 401 | "properties" : { 402 | "name" : "District of Columbia", 403 | "Statehood" : "July 16, 1790", 404 | "Population" : 646449 405 | } 406 | }, { 407 | "type" : "MultiPolygon", 408 | "arcs" : [[[-183, 186, -186, -171, -178, 187]]], 409 | "id" : "MD", 410 | "properties" : { 411 | "name" : "Maryland", 412 | "Statehood" : "Apr. 28, 1788", 413 | "Population" : 5928814 414 | } 415 | }, { 416 | "type" : "MultiPolygon", 417 | "arcs" : [[[188, 189, 190]]], 418 | "id" : "NJ", 419 | "properties" : { 420 | "name" : "New Jersey", 421 | "Statehood" : "Dec. 18, 1787", 422 | "Population" : 8899339 423 | } 424 | }, { 425 | "type" : "MultiPolygon", 426 | "arcs" : [[[191]], [[192]], [[-118, -8, -110, 193, -190, 194, 195]]], 427 | "id" : "NY", 428 | "properties" : { 429 | "name" : "New York", 430 | "Statehood" : "July 26, 1788", 431 | "Population" : 19651127 432 | } 433 | }, { 434 | "type" : "Polygon", 435 | "arcs" : [[-189, 196, -184, -188, -179, -168, 197, -195]], 436 | "id" : "PA", 437 | "properties" : { 438 | "name" : "Pennsylvania", 439 | "Statehood" : "Dec. 12, 1787", 440 | "Population" : 12773801 441 | } 442 | }, { 443 | "type" : "MultiPolygon", 444 | "arcs" : [[[198]], [[199]], [[200]], [[-114, 201]]], 445 | "id" : "ME", 446 | "properties" : { 447 | "name" : "Maine", 448 | "Statehood" : "Mar. 15, 1820", 449 | "Population" : 1328302 450 | } 451 | }, { 452 | "type" : "Polygon", 453 | "arcs" : [[-166, -148, -144, -177, -11, 202]], 454 | "id" : "MI", 455 | "properties" : { 456 | "name" : "Michigan", 457 | "Statehood" : "Jan. 26, 1837", 458 | "Population" : 9895622 459 | } 460 | }, { 461 | "type" : "MultiPolygon", 462 | "arcs" : [[[203]], [[204]], [[205]], [[206]], [[207]], [[208]], [[209]], [[210]], [[211]], [[212]], [[213]], [[214]], [[215]], [[216]], [[217]], [[218]], [[219]], [[220]], [[221]], [[222]], [[223]], [[224]], [[225]], [[226]], [[227]], [[228]], [[229]], [[230]], [[231]], [[232]], [[233]], [[234]], [[235]], [[236]], [[237]], [[238]], [[239]], [[240]], [[241]], [[242]], [[243]], [[244]], [[245]], [[246]], [[247]], [[248]], [[249]], [[250]], [[251]], [[252]], [[253]], [[254]], [[255]], [[256]], [[257]], [[258]], [[259]], [[260]], [[261]], [[262]], [[263]], [[264]], [[265]], [[266]], [[267]], [[268]], [[269]], [[270]], [[271]], [[272]], [[273]], [[274]], [[275]], [[276]], [[277]], [[278]], [[279]], [[280]], [[281]], [[282]], [[283]], [[284]], [[285]], [[286]], [[287]], [[288]]], 463 | "id" : "AK", 464 | "properties" : { 465 | "name" : "Alaska", 466 | "Statehood" : "Jan. 3, 1959", 467 | "Population" : 735132 468 | } 469 | }] 470 | } 471 | }, 472 | "arcs" : [ 473 | [[30403, 42783], [17, -180], [-50, -54], [-39, 115], [50, -34], [22, 153]], 474 | [[30242, 42976], [25, -207], [-77, -16], [52, 223]], 475 | [[30181, 45653], [11, -306], [36, -213], [-60, -110], [7, -91], [-38, -141], [-20, -197], [27, -151], [14, 145], [51, -203], [23, -227], [-6, -259], [25, -3], [9, -264], [72, -193], [76, 193], [4, 185], [-23, -39], [5, 278], [19, -164], [14, -305], [-2, -226], [-136, -80], [-21, -130], [-43, -82], [7, 362], [-24, 67], [-16, -190], [-36, -13], [-6, -170], [-54, -71]], 476 | [[30096, 43055], [-3, 282], [-17, 30]], 477 | [[30076, 43367], [23, 229], [-36, -167]], 478 | [[30063, 43429], [-29, 179], [-12, 404], [-116, -10]], 479 | [[29906, 44002], [0, 22], [-266, 21], [-202, 41]], 480 | [[29438, 44086], [-7, 47], [67, 1270]], 481 | [[29498, 45403], [223, -32]], 482 | [[29721, 45371], [323, -54], [106, 354], [31, -18]], 483 | [[24976, 55400], [-128, -1350]], 484 | [[24848, 54050], [-194, 41], [-227, -731], [-138, -373], [-41, 78], [-29, -200], [-21, -2], [-1, -1104], [-19, -106], [-95, -218], [-19, -207], [-31, -169], [0, -266], [37, -32], [23, -217], [-26, -309], [3, -255], [-15, -136], [13, -289], [-18, -321], [66, -285], [63, -92], [24, -178], [47, -55], [43, -193], [31, -294], [49, -206], [71, -114], [33, -199], [11, -266], [0, -511]], 485 | [[24488, 46841], [-272, 0], [-244, -1], [-391, 0], [-271, 0], [-272, 0]], 486 | [[23038, 46840], [0, 3421], [-31, 185], [-40, 53], [-43, 340], [9, 103], [54, 208], [22, 340]], 487 | [[23009, 51490], [-10, 687], [-43, 373], [-15, 562], [12, 242], [-19, 129], [-9, 1178], [-43, 515], [-32, 558], [2, 492], [-10, 201], [16, 222], [-35, 651]], 488 | [[22823, 57300], [203, 0], [368, 0], [4, 718], [90, -116], [35, -751], [3, -237], [62, -170], [47, 25], [22, -118], [99, -31], [33, -227], [74, 49], [11, 105], [54, 63], [78, -24], [92, -155], [-15, -174], [49, 1], [40, -407], [22, 151], [73, 45], [14, -165], [63, -116], [20, -170], [33, -95], [83, 32], [99, 309], [23, -13], [15, -228], [71, -31], [98, 60], [30, -28], [47, -219], [39, 60], [74, -43]], 489 | [[20923, 51490], [2, -1794], [-5, 0]], 490 | [[20920, 49696], [-419, 0], [-303, 0], [-243, 0], [-364, 0], [-364, 0], [-256, 0], [0, -957]], 491 | [[18971, 48739], [-43, 176], [-32, 283], [-37, -32], [-15, -242], [15, -81], [-64, 26], [-32, -72], [-32, 68], [-47, -47], [-42, 57], [-37, -195], [-94, 71], [-34, -130], [5, -80], [-52, 127], [-14, 366], [-27, 236], [-55, 41], [-40, 250], [14, 122], [-23, 250], [-57, 360], [-25, 412], [4, 134], [-58, 183], [-31, -240], [-63, -162], [-58, 166], [14, 253], [-15, 149], [45, 214], [-23, 211], [11, 352], [-6, 159], [32, 488], [4, 255], [-68, -40], [-14, 131], [-80, 245], [-3, 155], [-38, 141], [-81, 518], [-45, 74], [-23, 154], [-37, 91], [21, 64], [-24, 154], [15, 119], [-12, 165], [-91, 578], [0, 1884]], 492 | [[17579, 57300], [426, 0], [244, 0], [307, 0], [245, 0], [490, 0], [428, 0], [368, 0], [490, 0], [345, 0]], 493 | [[20922, 57300], [1, -362], [0, -5448]], 494 | [[23009, 51490], [-454, 0], [-260, 0], [-324, 0], [-454, 0], [-325, 0], [-269, 0]], 495 | [[20922, 57300], [389, 0], [307, 0], [490, 0], [245, 0], [470, 0]], 496 | [[6558, 2346], [76, -175], [46, -190], [21, -165], [2, -253], [17, 36], [20, -257], [37, -250], [-17, -127], [-60, -242], [-56, -51], [-71, -307], [0, -99], [-34, -266], [-58, 233], [-11, 210], [9, 372], [-26, 521], [-22, 235], [37, 262], [28, 289], [-15, 160], [3, 301], [37, -35], [37, -202]], 497 | [[6299, 3095], [-47, -12], [39, 138], [8, -126]], 498 | [[6192, 3482], [-18, 48], [-2, 165], [-18, 124], [44, 4], [22, -138], [-5, -148], [-23, -55]], 499 | [[6283, 4041], [31, -235], [51, 92], [49, -223], [33, -68], [0, -217], [-36, -118], [-47, -83], [-30, 13], [-15, 369], [-45, 48], [-20, 207], [5, 138], [24, 77]], 500 | [[6100, 4410], [97, -108], [54, -16], [-45, -198], [-57, 89], [-57, -24], [8, 257]], 501 | [[5919, 5127], [16, -261], [29, -107], [25, -189], [-42, -98], [-49, 151], [-34, -76], [-37, 455], [-14, 81], [44, 21], [30, 220], [14, 7], [18, -204]], 502 | [[5277, 5480], [-9, 173], [49, 239], [-7, -202], [-33, -210]], 503 | [[5504, 6328], [26, -157], [-11, -343], [-29, -187], [-46, 44], [-45, 165], [-6, 167], [18, 174], [45, 145], [48, -8]], 504 | [[18971, 48739], [0, -4757]], 505 | [[18971, 43982], [-417, 0], [-416, 1]], 506 | [[18138, 43983], [-156, -1], [-362, 0], [-311, 0]], 507 | [[17309, 43982], [-1, 3400], [35, 746], [-22, 174], [-63, 56], [5, 412], [17, 77], [25, 341], [32, 132], [23, 223], [3, 221], [29, 220], [19, 374], [52, 446], [-18, 323], [-65, 165], [-34, 311]], 508 | [[17346, 51603], [-20, 176], [13, 131], [-38, 410], [1, 147], [1, 4833]], 509 | [[17303, 57300], [276, 0]], 510 | [[15681, 53844], [-17, 97], [20, 132], [-3, -229]], 511 | [[15803, 54284], [-31, -99], [12, 238], [19, -139]], 512 | [[15783, 54651], [-23, 0], [4, 213], [19, -213]], 513 | [[15757, 56154], [20, -132], [-59, -168], [37, -54], [13, -358], [9, 139], [46, -265], [-25, -77], [-10, 146], [-33, 73], [-8, 263], [-37, 165], [28, 257], [19, 11]], 514 | [[15684, 56288], [-25, -5], [17, 204], [8, -199]], 515 | [[15644, 56388], [-8, -119], [-37, 104], [7, 218], [38, -203]], 516 | [[15681, 56759], [32, -85], [-33, -118], [-44, 77], [45, 126]], 517 | [[17346, 51603], [-324, -2], [-267, -1], [-25, -98], [-134, -39], [-24, -106], [-76, -65], [-82, -192], [-68, -51], [-41, 39], [-78, -170], [-77, -20], [-28, 148], [-83, 39], [-62, -15], [-48, -151], [-81, -144], [-133, 183], [-19, 600], [-30, 248], [-56, 150], [-18, -15]], 518 | [[15592, 51941], [-33, -53], [-51, 238], [-34, -30], [-26, 86], [-49, -124], [-53, 221], [0, 569], [12, -165], [1, -349], [16, -14], [18, 293], [-2, 411], [-20, -89], [-34, 81], [-11, 272], [88, 138], [-92, 126], [-30, 527], [-17, 107], [-9, 361], [-20, 370], [-60, 317], [-27, 500], [20, 283], [-18, 131], [42, -33], [49, -147], [48, -67], [49, -155], [98, -22], [77, -91], [49, -5], [26, 118], [44, -263], [38, 164], [65, -448], [-48, -214], [-62, -404], [-40, -396], [60, 456], [48, 122], [40, 341], [19, -10], [-13, 212], [22, -76], [11, -325], [-28, -82], [0, -182], [23, -145], [-21, -351], [4, -137], [-43, 142], [-14, -315], [-3, 337], [-37, -138], [-31, -297], [60, 84], [25, -146], [43, 229], [10, 203], [24, -91], [31, 149], [-20, 417], [20, 63], [-25, 118], [30, 535], [29, 86], [-34, 196], [-28, 275], [-20, -166], [-6, 196], [40, 103], [-54, 254], [-18, -64], [-16, 158], [20, 57], [43, -100], [-13, 226], [23, 40], [-42, 325], [-14, -100], [-44, 458], [13, 58], [519, 0], [244, 0], [429, 0], [401, 0]], 519 | [[19530, 34460], [-1, -1012], [0, -9793]], 520 | [[19529, 23655], [-208, 0], [-337, 0], [-17, 13], [-465, 992], [-228, 481], [-354, 748], [28, 406]], 521 | [[17948, 26295], [11, 67], [41, -19], [22, 263], [-3, 184], [-19, 118], [-45, 104], [7, 220], [-14, 192], [2, 211], [25, 39], [25, 238], [13, 311], [-9, 411], [39, 348], [44, 142], [28, 247], [-67, 264], [-1, 121], [-36, 425], [-33, 240], [-4, 237]], 522 | [[17974, 30658], [-2, 254], [18, 102], [-6, 309], [-21, 313], [7, 216], [-13, 169], [6, 315], [-20, 191], [6, 214], [48, 119], [56, -39], [16, -156], [46, -22], [23, 313], [0, 1510]], 523 | [[18138, 34466], [348, -2], [217, -1], [435, -2], [392, -1]], 524 | [[16869, 26908], [60, -357], [-33, 6], [-27, 351]], 525 | [[16886, 27750], [45, -128], [19, -192], [-44, 27], [-20, 293]], 526 | [[16466, 28799], [12, -165], [-31, -91], [-38, 205], [57, 51]], 527 | [[16524, 28868], [77, -132], [-45, -68], [-37, 16], [-18, 213], [23, -29]], 528 | [[17948, 26295], [-421, -218], [-249, -127], [-1, 301], [-36, 22], [2, 350], [-19, 426], [-52, 430], [-76, 371], [-55, 203], [-31, 181], [-46, 66], [-10, -119], [-34, 72], [6, 181], [-26, 310], [-17, 77], [-57, -15], [-17, -62], [-113, 279], [-15, 209], [-81, 304], [-88, -16], [-71, 127], [-95, -44], [-11, 135], [-38, 124], [12, 227], [-3, 291], [-17, 95], [9, 441], [-34, 39], [-37, 172], [19, 164], [-22, 213], [-26, 24], [-46, 336], [-33, 53], [-14, 232], [-35, 191], [-8, 182], [-21, 72], [-39, 309], [-54, 232], [-12, 345], [1, 293], [29, -8], [13, 325], [-19, 232], [-23, 96], [-29, -58], [-31, 55], [-68, 390], [0, 340], [-34, 445], [2, 358], [29, 55], [9, -392], [36, -69], [42, -215], [19, 15], [-32, 221], [-5, 162], [-47, 225], [1, 238], [-17, 0], [6, 200], [39, 88], [17, -58], [74, 48], [-43, 152], [-22, -173], [-38, 61], [-36, 150], [-28, -75], [-1, -360], [18, -81], [-26, -126], [-48, 145], [-37, 218], [-49, -11], [18, 273], [-7, 232], [-24, 57], [-19, 292], [-58, 224], [-21, 190], [-87, 479], [10, 209], [-39, 608], [17, 376], [-25, 550], [-72, 522], [-70, 294], [-12, 347], [25, 352], [26, 109], [1, 135], [31, 492], [-14, 236], [11, 81], [17, 483], [-27, 574], [-30, 76], [16, 218], [-1, 207]], 529 | [[15304, 43982], [372, 0], [437, 0], [365, 0]], 530 | [[16478, 43982], [0, -5714], [130, -623], [261, -1247], [131, -621], [153, -788], [255, -1312], [224, -1201], [185, -991], [157, -827]], 531 | [[21478, 40174], [4, -5714]], 532 | [[21482, 34460], [-268, 0]], 533 | [[21214, 34460], [-421, 0], [-263, 0], [-264, 0], [-473, 0], [-263, 0]], 534 | [[19530, 34460], [0, 7617]], 535 | [[19530, 42077], [481, 0], [262, 0], [349, 0], [299, 0]], 536 | [[20921, 42077], [274, -1], [283, 0], [0, -1902]], 537 | [[16478, 43982], [260, 0], [363, 0], [208, 0]], 538 | [[18138, 43983], [0, -9517]], 539 | [[21214, 33508], [-12, -1], [0, -1153], [-6, -7413], [-248, -1], [-434, -1], [-320, -1], [16, -313], [27, -125]], 540 | [[20237, 24500], [-476, 14], [0, -858], [-232, -1]], 541 | [[21214, 34460], [0, -952]], 542 | [[15304, 43982], [-41, 216], [-15, 259], [-7, 362], [11, 243], [-4, 182], [-28, 165], [-10, 184], [31, 400], [14, 395], [42, 540], [24, 638], [28, 1430], [-4, 364], [13, 177], [16, 690], [-12, 111], [24, 154], [6, 271], [-17, 30], [5, 288], [-12, 77], [12, 598], [-23, 284], [62, -244], [-16, 165], [36, -36], [68, 114], [28, -160], [41, -17], [16, 79]], 543 | [[18971, 43982], [0, -1905], [210, 0], [349, 0]], 544 | [[20921, 45888], [0, -3811]], 545 | [[20920, 49696], [1, -3808]], 546 | [[24913, 32555], [14, -197], [-32, -37], [18, -83], [-60, -186], [6, -357], [-23, -50], [-32, -290], [8, -421], [-25, -37], [-36, -246]], 547 | [[24751, 30651], [9, -148], [-53, -181], [-4, -171], [-21, 4], [-11, -185], [0, -414], [-47, -85], [-54, -479], [13, -178], [-49, -74], [13, -127], [-2, -221], [-52, -236], [22, -108], [-23, -127], [30, -170], [-15, -300], [19, -77], [6, -213], [-20, -93], [-1, -199]], 548 | [[24511, 26869], [-253, -3], [-299, -2], [-249, -1]], 549 | [[23710, 26863], [-2, 1033], [-40, 76], [-38, -67], [-43, 170]], 550 | [[23587, 28075], [12, 3311], [-50, 2121]], 551 | [[23549, 33507], [459, 0], [305, 0], [478, 0], [28, -260], [-23, -289], [-41, -174], [-23, -256], [181, 27]], 552 | [[24657, 44957], [50, -258], [17, -250], [65, -245], [8, -163], [-13, -373], [-37, -203], [-7, -235], [-27, -117], [-45, -63], [-28, -113], [-80, -34], [-24, -171], [-2, -293], [37, -217], [-4, -246], [-36, -235], [-16, -287], [-64, -141], [0, -392], [-17, -25]], 553 | [[24434, 40896], [-67, 327], [-13, 129], [-60, -25], [-320, -46], [-130, 8], [-256, -24], [-359, 52]], 554 | [[23229, 41317], [-21, 167], [4, 202], [-9, 593], [-27, 444], [8, 239], [-42, 162], [-6, 267], [11, 203], [-20, 132], [-6, 233], [-29, 134], [-25, 281], [4, 148], [-19, 163], [2, 243], [-24, 42]], 555 | [[23030, 44970], [-11, 248], [-32, 220], [20, 153], [31, 528], [-6, 174], [-27, 28], [10, 301], [-16, 215], [39, 3]], 556 | [[24488, 46841], [9, -224], [37, -196], [-23, -228], [7, -443], [29, -379], [93, -140], [17, -274]], 557 | [[23549, 34460], [-321, 0], [-322, 0], [-194, 0], [-321, 0], [-387, 0], [-257, 0], [-265, 0]], 558 | [[21478, 40174], [242, 0], [408, 0], [291, 0], [352, 0], [233, 0], [351, 0]], 559 | [[23355, 40174], [32, -167], [37, -90], [30, 79], [24, -314], [-24, 0], [-39, -403], [53, -311], [22, -285], [61, -123], [-2, -695], [0, -3405]], 560 | [[24434, 40896], [-22, -389], [21, -602], [26, -282], [74, -367], [10, -125], [65, -253], [20, -148], [12, -470], [21, -201], [24, 8], [31, 140], [69, -161], [16, -101], [-20, -164], [0, -201], [-46, -513], [5, -308], [65, -363], [53, -122], [56, -220], [20, -198], [28, -67], [6, -259], [21, -232], [-20, -254], [36, -465], [33, -118], [4, 157], [38, -198]], 561 | [[25080, 34420], [-2, -415], [-26, -344], [-37, 110], [-19, -265]], 562 | [[24996, 33506], [-20, 4]], 563 | [[24976, 33510], [-17, -2]], 564 | [[24959, 33508], [8, -222], [-27, -81], [12, -165], [-31, -14], [23, -202], [-31, -269]], 565 | [[23549, 33507], [0, 953]], 566 | [[23355, 40174], [-26, 63], [2, 154], [-63, 440], [-19, 330], [-20, 156]], 567 | [[20921, 45888], [339, 0], [237, 0], [427, -2], [238, 0], [310, 0], [113, -375], [35, -35], [32, 166], [50, -34], [100, 64], [48, -186], [76, -94], [41, -120], [27, -273], [36, -29]], 568 | [[23587, 28075], [-63, 84], [-46, 122], [-28, 197], [-68, 198], [-38, -181], [-54, 53], [-14, 107], [-48, -172], [-46, 65], [-98, -253], [-11, -116], [-23, 160], [-24, 0], [-43, 246], [-11, -116], [-45, 33], [-17, 161], [-45, -180], [-5, -228], [-21, -9], [-12, 329], [-45, -152], [-55, 131], [-9, 152], [-22, 9], [-33, -183], [-42, -9], [-2, 215], [-36, 60], [-1, 212], [-78, -2], [-34, -119], [-23, 146], [-40, -28], [-65, 143], [-67, 38], [0, 171], [-20, 171], [-32, 97], [-10, -157], [-37, 62], [-32, -43], [-61, 333], [-33, 20], [-1, 3665], [-350, 1], [-485, 0]], 569 | [[24334, 20156], [-61, 151], [29, 150], [55, -125], [-23, -176]], 570 | [[25053, 21267], [-35, -13], [42, 169], [-7, -156]], 571 | [[24968, 21496], [-51, -34], [-12, 119], [-60, 52], [-25, 182], [-46, 51], [-51, -318], [-8, -147], [15, -119], [59, -108], [37, 30], [42, 218], [24, -105], [44, 78], [-24, -221], [-30, 4], [4, -131], [29, 6], [15, -162], [17, 29], [10, 210], [24, 151], [24, -45], [-17, -153], [34, -184], [-20, -206], [-9, 85], [-46, -156], [18, -139], [-44, 72], [21, -136], [-38, 12], [24, -213], [41, -100], [-6, -117], [57, -34], [27, -142], [15, 58], [46, -378], [-35, -189], [-23, 97], [-49, -249], [31, 306], [-24, -79], [-32, 269], [-35, 107], [-54, 58], [19, 146], [-92, 276], [-36, 2], [39, -150], [9, -229], [-16, -106], [12, -104], [-22, -185], [-28, -87], [-6, 264], [-41, 165], [-50, -51], [-18, -243], [-18, -71], [-39, 119], [-10, -92], [-30, 143], [-25, -25], [-69, 188], [19, 138], [39, -55], [-40, 249], [9, 265], [-19, -237], [-65, 95], [-8, 208], [-22, -15], [-12, 225], [-49, -65], [3, 214], [-38, 1], [-38, -167], [-23, 38], [27, -274], [23, 14], [-70, -179], [-113, 134], [-96, 246], [-48, 76], [-83, -7], [-68, -62], [-25, -70], [-16, 203], [29, 95], [-4, 246]], 572 | [[23778, 21101], [22, 179], [1, 395], [-10, 201], [13, 169], [-7, 161], [31, 283], [22, 429], [-11, 130], [18, 65], [-46, 550], [7, 82], [-25, 188], [3, 94], [-28, 154], [6, 201], [-31, 366], [-33, 174], [0, 1941]], 573 | [[24511, 26869], [26, -173], [-23, -320], [16, -359], [-3, -163], [54, -270], [-34, -367], [-14, 4], [-1, -257], [-46, -252], [-22, -45], [-19, -228], [-9, -315], [-20, -83], [3, -214], [-12, -257], [-26, -7], [2, -260], [12, -163], [-21, -107], [264, 0], [272, 0], [-31, -605], [16, -248], [32, -195], [10, -281], [31, -208]], 574 | [[22840, 13727], [-7, 67], [-20, 607], [-38, 691], [-2, 561], [6, 120], [2, -489], [9, -333], [29, -592], [21, -632]], 575 | [[22836, 16657], [-39, -561], [-9, -234], [-13, -12], [8, 227], [31, 467], [56, 442], [-34, -329]], 576 | [[22878, 17074], [14, 264], [31, 240], [5, -124], [-50, -380]], 577 | [[23051, 17975], [-82, -302], [-37, -186], [7, 189], [24, 41], [81, 343], [7, -85]], 578 | [[23495, 19896], [25, -39], [-109, -464], [84, 503]], 579 | [[23778, 21101], [-16, 2], [-22, -401], [16, -192], [-63, -9], [-154, -416], [26, 233], [-54, -96], [18, 328], [-15, 164], [-23, -27], [-13, -195], [-50, 159], [19, -142], [-11, -252], [33, -88], [-16, -51], [21, -179], [-49, -326], [-24, -56], [-2, -246], [-58, -302], [-66, -235], [-97, -143], [0, -118], [65, 169], [-51, -186], [-35, 62], [-56, -120], [11, 197], [-44, -106], [-20, 180], [0, -164], [-38, 7], [-27, 157], [23, -294], [46, -268], [-70, -220], [-39, 306], [3, -453], [-45, -220], [7, 261], [-18, -256], [-10, 152], [-55, -255], [25, -112], [30, 160], [-1, -112], [-44, -390], [-19, 73], [-76, -3], [37, -52], [5, -174], [31, -143], [-46, -670], [-27, -95], [10, 233], [-33, -191], [-48, 321], [31, -300], [-13, -83], [53, -67], [23, 75], [-11, -475], [-20, -25], [-1, -350], [19, -95], [16, -491], [-5, -185], [37, -297], [1, -269], [28, -62], [-7, -204], [26, 121], [1, -155], [-32, -5], [-28, -97], [-3, -130], [-44, 130], [-38, 226], [-40, 62], [-118, 23], [-40, 225], [-59, 131], [-16, -39], [-45, 248], [-79, 68], [-8, 223], [-14, 29], [-24, 547], [-59, 437], [6, 358], [-23, 127], [14, 219], [-11, 281], [-25, 138], [-29, 24], [-44, 277], [-4, 185], [-28, 173], [-27, 308], [-56, 233], [-35, 620], [-26, 202], [-12, 243], [-24, 169], [-12, 365], [-29, 135], [-12, 160], [-58, 247], [-4, 112], [-53, 181], [-2, 130], [-22, -47], [-27, 318], [-31, 1], [-7, 104], [-24, -85], [-133, 51], [-59, 173], [-23, -221], [-31, 14], [-45, -76], [-28, -291], [-34, -601], [11, -91], [-36, -98], [-44, -366], [-43, 33], [-49, 152], [-22, 140], [-32, 33], [-34, 200], [-63, 81], [-40, 183], [-29, 210], [-23, 21], [-47, 222], [-14, 254], [-30, 284], [-7, 225], [6, 263], [-49, 427], [-8, 256], [-34, 238], [-62, 254], [-41, 94], [-50, 273], [-10, 131], [-49, 207], [-66, 413], [-57, 153], [-51, 511], [-32, 47]], 580 | [[29906, 44002], [2, -937], [-14, -395]], 581 | [[29894, 42670], [-15, 67], [-108, -120], [-17, 46], [-45, -97], [-27, 52], [-80, -73], [-5, 114], [-62, -302], [-14, 52], [-128, -330]], 582 | [[29393, 42079], [-22, 196], [66, 218], [-16, 147], [17, 1446]], 583 | [[30201, 46046], [10, -35], [-30, -358]], 584 | [[29721, 45371], [-22, 178], [18, 317], [9, 421], [13, 172], [1, 440], [26, 358], [25, 124], [45, 610], [3, 337], [17, 110], [39, 33], [46, 169], [36, 268], [-24, 294], [36, 341], [0, 179]], 585 | [[29989, 49722], [27, 364], [32, 167], [42, -77], [16, 100]], 586 | [[30106, 50276], [35, -3261], [-4, -398], [45, -317], [19, -254]], 587 | [[30063, 43031], [-30, -87], [35, 392], [-5, -305]], 588 | [[30096, 43055], [-23, -20], [3, 332]], 589 | [[30063, 43429], [-6, -111], [-36, 319], [1, -275], [-16, -190], [6, -168], [-21, -228], [-97, -106]], 590 | [[29498, 45403], [6, 1535], [-14, 129], [-31, -94], [11, 337], [-20, 595], [32, 346], [9, 424], [-22, 226], [10, 393], [-12, 117], [7, 294]], 591 | [[29474, 49705], [265, 9], [250, 8]], 592 | [[25368, 21594], [-61, -15], [56, 75], [5, -60]], 593 | [[26060, 30622], [82, -2762], [31, -1141], [33, -611], [32, -345], [-7, -184], [27, -130], [-34, -162], [-12, -349], [-23, -336], [28, -524], [-16, -698], [23, -182], [3, -165]], 594 | [[26227, 23033], [-310, 0], [-411, -1], [-9, -241], [32, -268], [27, -99], [-1, -382]], 595 | [[25555, 22042], [8, -57], [-56, -332], [-54, -74], [6, 82], [-37, 226], [-12, 193], [8, 160], [-27, 272], [-22, -304], [-9, -435], [-51, 119], [-29, -26]], 596 | [[25280, 21866], [-22, 2861], [30, 1543], [81, 4206], [-26, 171]], 597 | [[25343, 30647], [-1, 22], [406, -37], [312, -10]], 598 | [[27521, 11909], [-60, -399], [62, 529], [-2, 123], [31, 100], [-31, -353]], 599 | [[27042, 14480], [-27, 365], [18, -89], [9, -276]], 600 | [[27576, 15790], [-35, 409], [-13, 371], [48, -780]], 601 | [[27452, 18403], [-13, -250], [-2, -353], [-14, 224], [-5, 333], [34, 46]], 602 | [[26205, 20530], [-6, -100], [-29, 106], [35, -6]], 603 | [[25779, 21913], [15, -22], [-189, -141], [97, 127], [77, 36]], 604 | [[27204, 22485], [20, -58], [-7, -281], [11, -131], [5, -318], [61, -1358], [68, -923], [102, -1034], [11, -163], [-18, -126], [0, -378], [17, -360], [-25, 359], [6, 749], [-50, 50], [8, 219], [-27, 93], [5, -246], [25, -548], [100, -1348], [10, -288], [41, -607], [34, -425], [10, -308], [2, -426], [-22, -988], [-5, -560], [-3, 240], [-16, -279], [-30, -259], [-11, -272], [9, -198], [-38, -244], [-37, -3], [-36, -185], [-40, 80], [-15, -80], [-50, -45], [-25, 204], [8, 197], [57, -227], [-10, 202], [-45, 126], [-38, 609], [-22, 93], [-4, 158], [-69, 190], [-24, -55], [-32, 502], [-8, 502], [-45, 95], [64, 439], [-22, -50], [-25, -266], [-25, -39], [-12, 333], [8, 264], [-13, 104], [23, 145], [-38, -85], [-19, 72], [20, -309], [-46, 88], [-57, 697], [-15, 341], [-37, 180], [32, 93], [13, 214], [41, 278], [-7, 231], [-29, -176], [-20, 301], [-33, -106], [31, -87], [-9, -344], [-13, 0], [-42, 352], [17, 402], [-5, 120], [36, 548], [9, 810], [-27, 164], [-20, 411], [-67, 10], [-12, 174], [-47, 325], [-42, 171], [-2, 258], [-33, 93], [-42, 391], [-96, 352], [-43, -64], [-23, 50], [-36, -143], [11, -232], [-44, 38], [-66, -259], [-39, -107], [2, 142], [-35, -168], [-34, 10], [-61, -83], [12, 229], [-15, 173], [-88, 446], [52, -124], [-3, 156], [-24, -30], [-39, 136], [-9, 235], [-28, -103], [24, -46], [7, -193], [-90, 317], [-83, 143], [12, 105], [60, -69], [-28, 200], [-80, -62], [-52, -95], [-102, -63], [34, 154], [-25, 78], [-15, -97], [-31, 237], [6, -211], [-48, -294], [-33, -13], [29, 219], [-21, 99]], 605 | [[26227, 23033], [36, -536], [302, -118], [433, -175], [13, -364], [30, -21], [21, 429], [-8, 300], [21, 139], [71, -147], [58, -55]], 606 | [[27217, 22527], [-8, 324], [18, 40], [-10, -364]], 607 | [[27271, 23771], [2, 223], [22, 32], [-24, -255]], 608 | [[27374, 24999], [15, -57], [-40, -261], [-45, -20], [28, -53], [-18, -161], [-25, -48], [-29, -279], [-18, -296], [11, -127], [-40, -2], [55, -139], [-32, -253], [-20, 93], [9, -316], [-26, -348], [5, -247]], 609 | [[26060, 30622], [357, 3]], 610 | [[26417, 30625], [337, 27]], 611 | [[26754, 30652], [-54, -344], [-13, -212], [95, -433], [44, -39], [27, -321], [7, -205], [36, -245], [13, -189], [87, -393], [15, -220], [37, -115], [34, -187], [2, -219], [48, -391], [70, -254], [2, -174], [18, -158], [7, -427], [59, -267], [19, -373], [-7, -180], [22, -203], [52, -104]], 612 | [[25280, 21866], [-18, -121], [-33, 136], [-42, -78], [-29, 130], [-111, -194], [-22, 115], [-2, -149], [-26, -87], [-6, -128], [-23, 6]], 613 | [[24751, 30651], [362, -3], [230, -1]], 614 | [[28020, 28522], [0, -65], [-53, -132], [-49, -261], [-54, -427], [-14, -336], [-33, 106], [33, -215], [-25, -52], [-32, -266], [-29, -49], [-8, 95], [-29, -163], [10, -79], [-44, -218], [-29, -79], [-25, 183], [-1, -175], [18, -60], [-35, -228], [-56, -96], [-35, -141], [-56, 62], [15, -93], [-31, -26], [44, -90], [-11, -166], [-46, -106], [-34, 180], [-7, 249], [-20, 91], [16, -419], [33, -200], [-59, -347]], 615 | [[26754, 30652], [123, 241], [108, 150], [338, -99], [13, -176], [28, 89], [37, -279], [5, -259], [299, -38], [14, -19], [209, -1212], [92, -528]], 616 | [[25667, 44928], [-14, -294], [-39, -1109]], 617 | [[25614, 43525], [-87, 0], [-3, -4219], [-1, -348], [-25, -118], [7, -180], [-19, -167], [35, -281], [8, -394], [-42, -366], [5, -97], [-33, -113], [-25, -327], [-26, 19], [-13, -170], [17, -95], [-27, -118], [-2, -367], [-21, -13], [19, -175]], 618 | [[25381, 35996], [-33, -317], [22, -229], [-11, -86], [-91, -113], [-18, -213], [22, -257], [-14, -183], [-117, 281], [-40, -23], [-36, -277], [15, -159]], 619 | [[24657, 44957], [495, -24], [297, -14], [218, 9]], 620 | [[25614, 43525], [391, -1], [278, -2], [0, -118]], 621 | [[26283, 43404], [2, -767], [-7, -4182]], 622 | [[26278, 38455], [-15, -340], [26, -50], [-6, -186], [-54, -46], [-52, -147], [-20, 89], [-55, -27], [8, -359], [-54, -202], [-12, -234], [-42, -38], [-24, -208], [-4, -221], [-38, -179], [-65, 218], [1, 110], [-31, -47], [-36, -188], [1, -124], [-62, -96], [-22, 174], [-56, -143], [-27, -250], [-13, 111], [-73, 190], [-34, -62], [-30, -168], [-8, 154], [-32, -55], [-35, 87], [7, -178], [-40, -44]], 623 | [[26901, 37163], [5, -327], [-19, -164], [46, -332], [-3, -87], [47, -370], [5, -112], [51, -238], [42, -47]], 624 | [[27075, 35486], [-108, -496], [-78, -218], [-24, -229], [-37, -122], [-5, -150], [-60, -127], [-15, -161], [-104, -154], [-44, -124]], 625 | [[26600, 33705], [-17, -34], [-388, 75], [-85, -12], [-178, 29], [-135, 44], [-357, -25], [-65, 86], [6, -363], [-385, 1]], 626 | [[26278, 38455], [26, 92], [26, -131], [54, 47], [34, -138], [35, -417], [92, -92], [54, -251], [38, 147], [47, -92], [17, -111], [43, 34], [34, 184], [39, 55], [18, -301], [35, -97], [31, -221]], 627 | [[28864, 31094], [-45, -70], [52, 180], [-7, -110]], 628 | [[28770, 33602], [6, -1]], 629 | [[28776, 33601], [20, -509], [20, -289], [42, -447], [-44, 312], [-44, 934]], 630 | [[28746, 33603], [6, -1]], 631 | [[28752, 33602], [10, 0]], 632 | [[28762, 33602], [-29, 1]], 633 | [[28733, 33603], [13, 0]], 634 | [[28728, 33603], [-2, -94], [44, -381], [26, -418], [-10, 2], [-31, 391], [7, -233], [-31, 50], [-51, 210], [34, -237], [-32, -140], [-67, 117], [35, -131], [-53, -148], [-52, 70], [-18, 302], [-1, -186], [19, -209], [-12, -117], [48, -14], [24, 66], [46, -29], [31, 68], [40, -18], [-9, -229], [15, -405], [11, 450], [23, 97], [33, -10], [19, -232], [-1, -214], [-16, -233], [-32, 6], [-36, -305], [-34, -137], [-33, 2], [-38, 212], [-11, -106], [-37, 178], [32, 84], [-34, 16], [-5, -295], [-13, 82], [-31, -37], [-65, 150], [83, -273], [54, -81], [2, -155], [-51, -113], [32, -89], [-56, -257], [-21, 7], [-67, 312], [39, -337], [49, -128], [34, 135], [28, -97], [24, 268], [10, -166], [26, -19], [-3, -146], [-64, -306], [-14, 148], [-24, -174], [-54, 27], [-55, -118], [-8, 59], [-37, -217], [-41, -10], [18, 116], [-27, 196], [14, -230], [-18, -45], [19, -155], [-43, -111], [-37, -177], [-46, -322], [-28, -491], [3, 304], [-14, -297], [-17, -115], [-61, 63], [-89, -82]], 635 | [[26417, 30625], [7, 437], [18, 98], [38, -19], [24, 318], [67, 251], [76, 27], [71, 279], [47, 139], [26, -3], [21, 301], [29, -20], [9, 122], [39, 109], [9, -145], [32, 33], [34, 219], [46, 86], [31, -110], [45, 369], [50, 189], [24, 411]], 636 | [[27160, 33716], [5, -29], [115, -47], [153, -14], [164, -43], [395, 4], [216, 0], [520, 16]], 637 | [[27477, 41405], [-41, -72], [18, -234], [-3, -380], [-35, -430], [-8, -269], [-20, -245], [-10, -308], [-51, -189], [-42, -236], [-50, -83], [-25, 73], [-28, -239], [-29, -8], [-17, -148], [-5, -488], [-20, 23], [-19, -142], [-10, 221], [-25, 60], [-18, -102], [-33, -392], [10, -268], [-24, -47], [-24, -303], [-67, -36]], 638 | [[26283, 43404], [140, 21], [248, 53], [79, 387]], 639 | [[26750, 43865], [17, -172], [112, -342], [68, 16], [319, 1013], [211, 219]], 640 | [[27477, 44599], [0, -3194]], 641 | [[26600, 33705], [477, -13], [83, 24]], 642 | [[24976, 33510], [-17, -2]], 643 | [[28253, 38900], [49, -62], [26, -105], [-12, -203], [24, -120], [42, -50], [43, -217]], 644 | [[28425, 38143], [14, -61]], 645 | [[28439, 38082], [6, -355], [-51, -113], [-34, -469], [29, -152], [58, 125], [22, -338], [22, -78], [74, -51], [24, -239], [78, -232], [-18, -87], [8, -279], [-10, -166], [-41, 162], [-13, -76], [-19, 206], [-69, 316], [-25, 208], [-1, -136], [36, -169], [22, -199], [29, -92], [17, -214], [34, -5], [40, -104], [-30, -52], [41, -177], [-3, -217], [-18, 96], [-34, -26], [18, -190], [-34, -45], [-78, 546], [49, -458], [38, -154], [18, 37], [31, -197], [3, -194], [-41, -100], [-7, 103], [-46, 192], [-10, 196], [-21, -26], [-72, 191], [-19, -63], [-54, 119], [21, -117], [44, 12], [12, -105], [85, -105], [3, -269], [46, -171], [5, -86], [44, -47], [14, 149], [78, -95], [36, -691]], 646 | [[28770, 33602], [-22, 323], [-2, -322]], 647 | [[28733, 33603], [-5, 0]], 648 | [[27075, 35486], [-6, -128], [45, -353], [50, -147], [27, 6], [51, 233], [39, -172], [77, 96], [19, 205], [40, -37], [65, 166], [8, -75], [50, 150], [19, 201], [-18, 114], [23, 266], [58, 357], [22, 329], [36, 200], [44, 595], [23, -47], [12, -167], [59, -105], [30, 209], [12, 196], [42, 398], [32, -113], [38, 273], [20, -9], [72, 451], [1, 203], [25, 347], [135, -584], [28, 356]], 649 | [[24848, 54050], [-127, -1338], [51, -142], [31, -321], [278, -367], [79, -215], [60, -54], [26, 36], [113, -179], [6, -254], [56, -75], [28, -148], [-1, -345], [-16, -271], [46, 57], [12, -69], [-23, -304], [23, -135], [60, -80], [9, 240], [25, 72], [62, 383], [92, 0], [143, -395], [-56, -231], [-74, -515], [-49, -720], [-30, -569], [-32, -767], [-12, -540], [7, -466], [32, -1410]], 650 | [[27768, 39644], [-3, -976], [97, 395], [21, 125], [25, -61], [57, 355], [5, -111], [48, -94], [31, 8], [9, 173], [43, 21], [40, 125], [47, -189], [34, 18], [-4, -182], [21, -45], [14, -306]], 651 | [[27477, 41405], [0, -1762], [291, 1]], 652 | [[28897, 39805], [-47, -299], [11, -206], [-10, -150], [43, -281], [11, -172], [0, -322], [23, -243], [41, -255], [23, 3], [11, -652]], 653 | [[29003, 37228], [-4, -1]], 654 | [[28999, 37227], [-7, 0]], 655 | [[28992, 37227], [-170, 14], [-27, 2261], [0, 141]], 656 | [[28795, 39643], [52, 222], [50, -60]], 657 | [[28452, 37892], [-13, 190]], 658 | [[28425, 38143], [20, 119], [38, -197], [-31, -173]], 659 | [[28992, 37227], [-3, -224], [-17, -180], [-22, -3], [-56, -529], [-10, -210], [-97, -756], [-23, -246], [-10, -362], [-18, 113], [-2, 232], [24, 561], [29, 117], [12, 180], [23, 68], [17, 299], [-43, 32], [-20, -87], [4, 292], [18, 136], [-38, -6], [27, 156], [-24, 71], [17, 254], [-31, -280], [-20, -30], [-69, 430], [27, 215], [-30, -34], [2, 118], [74, -112], [-52, 208], [-10, 157], [-21, 7], [14, 149], [24, -158], [-4, 172], [23, 60], [-39, 139], [-23, -67], [4, 216], [27, -106], [42, 327], [-30, -41], [-20, -174], [-7, 258], [46, 389], [20, 39], [28, 403], [-42, -89], [5, -165], [-40, -202], [-12, 170], [-9, -273], [-7, 175], [-24, -315], [-47, 52], [41, -334], [-23, -20], [29, -123], [-39, -234], [12, -125], [-8, -192], [6, -436], [33, -212], [-10, -120], [-61, 291], [70, -471], [18, -169], [-1, -180], [-66, 295], [-77, 111], [-38, 166], [-20, 195], [-44, -157], [-15, 279], [21, 180], [41, 196], [4, 179]], 660 | [[27768, 39644], [225, -1], [321, 0], [481, 0]], 661 | [[29009, 40204], [82, 279], [-69, 480], [-25, 74], [-7, 200], [-26, 23], [-4, 248], [38, 363], [-22, 173], [32, 123], [39, 255], [11, 176], [41, 159]], 662 | [[29099, 42757], [221, -696]], 663 | [[29320, 42061], [-35, -528], [-50, -152], [-20, -260], [7, -71], [74, -110], [5, -142], [-21, -520], [-21, -140], [-11, -528], [-54, -293], [-31, -287], [15, -81], [-32, -88], [-35, -208], [-25, -280], [-36, -211], [-26, -15], [23, 401], [-43, 130], [-25, -52], [-34, 209], [-30, 78], [-48, 266], [-7, 273], [41, 346], [74, 136], [34, 270]], 664 | [[29273, 41381], [-8, -151], [-39, -105], [20, 274], [27, -18]], 665 | [[29782, 42336], [-46, -134], [6, -65], [-65, -235], [47, 4], [25, 162], [72, 12], [45, 138], [25, -3], [-153, -400], [-68, -124], [-22, 21], [-42, -118], [-37, 7], [-41, -95], [-182, -221], [-49, -28], [-8, 207], [30, 212], [36, 6], [17, 141], [65, 150], [72, -70], [21, 104], [103, 5], [49, 47], [73, 287], [27, -10]], 666 | [[29393, 42079], [-34, -173], [-9, -184], [-36, -16], [6, 355]], 667 | [[29099, 42757], [-10, 128], [-42, 47], [-31, 125], [-19, 194], [-4, 404], [-48, 104], [-24, 219], [-465, 1], [-265, 1], [-265, 1], [-238, 1], [0, 1025]], 668 | [[27688, 45007], [207, 504], [29, 276], [-32, 126], [-6, 470], [-34, 389], [136, 317], [514, -11], [12, 38], [96, 836], [35, 184], [40, 85], [33, 233], [55, 116], [47, 329], [120, 538], [112, 278], [48, -23], [374, 13]], 669 | [[29009, 40204], [-31, -197], [-72, -139], [-9, -63]], 670 | [[27477, 44599], [76, 80], [135, 328]], 671 | [[30741, 47862], [-27, 147], [36, -61], [-9, -86]], 672 | [[30794, 48218], [-29, -99], [14, 186], [15, -87]], 673 | [[30910, 48379], [-34, -45], [-1, -112], [-31, 140], [23, 236], [22, 30], [21, -249]], 674 | [[30106, 50276], [37, 52], [13, -163], [31, 351], [40, -7], [-23, 123], [40, 305], [51, 152], [-3, 138], [37, 164], [-8, 361], [35, 531], [35, 166], [15, 493], [206, 1401], [59, -41], [5, -324], [37, -112], [73, 106], [82, 216], [43, -33], [108, -508], [6, -2122], [-4, -496], [39, -119], [59, -51], [-12, -224], [18, -202], [-12, -230], [41, -214], [41, 47], [38, -391], [-22, -47], [39, -248], [-61, -332], [-36, 25], [-50, -91], [-18, -134], [-47, 93], [-38, -88], [-7, -275], [-24, 132], [1, -159], [-22, -105], [-14, 290], [-89, 12], [-40, -145], [10, -330], [-74, 252], [18, 320], [-17, 43], [-12, -202], [-39, -62], [11, -198], [-15, -43], [-25, -301], [4, -160], [-53, -234], [-29, 81], [1, 168], [-41, -431], [-13, 248], [-22, -229], [-5, 313], [-29, -233], [15, -113], [-14, -128], [-17, 526], [8, -577], [-24, 155], [-33, -169], [11, 235], [-43, -81], [-50, -311], [23, -156], [-39, -41], [3, -176], [-69, -328], [-22, -345], [-23, -20]], 675 | [[24976, 55400], [44, -21], [194, 519], [83, 80], [365, -983], [601, -1684], [29, -504], [51, -302], [28, -34], [19, 104], [87, 27], [-14, -176], [20, -442], [39, -269], [30, 112], [63, -6], [41, -234], [-36, -336], [281, -848], [16, -148], [26, -801], [80, -2403], [-1, -117], [-72, -950], [-20, -443], [0, -189], [-18, -245], [-27, -62], [-43, -267], [-67, -164], [-25, -174], [-8, -369], [8, -206]], 676 | [[99717, 62342], [61, -118], [81, -342], [-56, 105], [-38, 184], [-57, 66], [9, 105]], 677 | [[777, 62716], [26, -103], [-38, -77], [12, 180]], 678 | [[362, 62745], [54, -60], [-43, -46], [-25, -367], [-58, 118], [40, 187], [-71, 215], [72, 91], [31, -138]], 679 | [[560, 62515], [-40, -97], [-30, 89], [-89, -40], [114, 147], [34, 291], [32, -50], [-23, -166], [2, -174]], 680 | [[720, 62952], [-23, -196], [60, -44], [2, -151], [-48, -132], [-34, 0], [-25, -143], [-7, 207], [-28, -234], [-11, 139], [22, 78], [-8, 154], [52, -18], [6, 148], [-21, 146], [63, 46]], 681 | [[99653, 62831], [-22, 91], [40, 16], [-18, -107]], 682 | [[99968, 62794], [-48, 74], [-3, 110], [49, 104], [33, -118], [-31, -170]], 683 | [[876, 63090], [-12, -132], [-42, 183], [34, 92], [20, -143]], 684 | [[99385, 63007], [-3, -147], [-56, 0], [-12, -162], [-27, 124], [45, 165], [35, 43], [23, 235], [27, -66], [-32, -192]], 685 | [[1546, 63317], [66, -118], [62, 39], [49, -39], [-97, -50], [-49, -75], [-99, 36], [-62, 154], [130, 53]], 686 | [[1882, 63591], [-68, -66], [53, 262], [38, -104], [-23, -92]], 687 | [[1399, 63788], [34, -203], [-57, -153], [28, -189], [-91, -7], [-79, -177], [-48, 50], [-41, -73], [-81, 6], [45, 78], [40, -32], [31, 158], [34, -72], [51, 53], [12, 142], [60, 13], [31, 155], [-57, 105], [68, 182], [20, -36]], 688 | [[98330, 63982], [-22, -96], [9, -170], [-95, 67], [60, 194], [48, 5]], 689 | [[2381, 64192], [-56, -135], [-14, 84], [28, 179], [49, 0], [-7, -128]], 690 | [[2607, 64726], [30, -65], [-17, -151], [-76, 113], [63, 103]], 691 | [[98083, 64934], [62, -11], [55, -151], [-17, -84], [50, -27], [-34, -89], [-64, 37], [-41, -153], [-50, 87], [13, 155], [-51, -10], [3, 107], [-45, -2], [51, 155], [68, -14]], 692 | [[3101, 66018], [56, -95], [-11, -257], [-80, -213], [-42, -58], [-57, -383], [-26, -22], [-54, -222], [-60, -80], [63, 398], [3, 202], [43, 168], [48, -51], [19, 418], [46, 138], [52, 57]], 693 | [[3637, 66541], [-25, -202], [-34, 82], [59, 120]], 694 | [[3453, 66789], [23, 74], [16, -348], [41, 104], [16, 197], [52, -105], [-14, -114], [-46, -82], [-40, -222], [63, 130], [22, -182], [-82, -132], [-8, -156], [-60, 39], [16, -201], [-34, 58], [-144, -261], [-32, -161], [-45, -34], [-51, 129], [37, 136], [68, 101], [43, -34], [8, 114], [37, 2], [0, 277], [46, -9], [-20, 123], [42, 63], [32, -160], [-3, 187], [-63, 49], [-36, 194], [39, 198], [77, 26]], 695 | [[3958, 67075], [-11, -94], [-70, 29], [25, 79], [56, -14]], 696 | [[3697, 67169], [60, -94], [-65, -169], [-41, 0], [-24, 156], [42, 193], [28, -86]], 697 | [[3796, 67351], [21, -133], [-41, -170], [-27, 236], [16, 117], [31, -50]], 698 | [[4603, 67703], [20, -131], [-70, 71], [-4, 154], [54, -94]], 699 | [[4698, 68459], [-41, 165], [52, 56], [-11, -221]], 700 | [[13345, 68693], [12, -141], [-37, -75], [-40, 159], [65, 57]], 701 | [[4286, 68856], [51, -6], [36, -197], [20, -307], [65, -42], [26, -202], [-54, 36], [-36, 155], [-16, -161], [-55, -130], [-46, 50], [-95, -28], [-56, -169], [-20, -188], [-70, -84], [-40, 23], [-31, 136], [-13, 209], [72, 178], [43, 398], [40, 77], [48, -63], [20, 118], [111, 197]], 702 | [[4851, 69047], [25, -78], [-31, -117], [-43, 146], [49, 49]], 703 | [[12913, 69071], [35, -233], [-23, -106], [-34, 78], [22, 261]], 704 | [[5465, 68969], [0, -138], [-37, 34], [5, 131], [32, -27]], 705 | [[12839, 69091], [33, -448], [50, -236], [26, -280], [-48, 31], [0, 92], [-81, 383], [-24, 297], [10, 260], [34, -99]], 706 | [[13314, 68975], [-6, -200], [-70, -1], [27, 489], [38, -112], [11, -176]], 707 | [[5354, 69164], [6, -156], [-78, -421], [26, 251], [-29, 135], [52, -4], [-17, 156], [40, 39]], 708 | [[12775, 69347], [23, -91], [-27, -128], [-39, 50], [2, 162], [41, 7]], 709 | [[5240, 69412], [0, -197], [-55, 145], [55, 52]], 710 | [[5141, 69327], [42, 108], [-11, -245], [11, -195], [-62, 106], [-17, -132], [-9, 404], [45, 143], [1, -189]], 711 | [[13184, 69529], [51, -218], [-29, -298], [-22, 105], [-12, 333], [12, 78]], 712 | [[12697, 69549], [35, -84], [-34, -115], [-11, -160], [-15, 261], [25, 98]], 713 | [[12718, 69559], [-29, 35], [26, 143], [3, -178]], 714 | [[12762, 69626], [-28, 121], [32, 55], [-4, -176]], 715 | [[12675, 69774], [-1, -180], [-42, 0], [43, 180]], 716 | [[12692, 70287], [77, -56], [-49, -144], [-39, 44], [11, 156]], 717 | [[6567, 70232], [-41, -15], [-7, 108], [53, 158], [-5, -251]], 718 | [[12508, 70495], [41, 0], [-44, -195], [-24, 176], [27, 19]], 719 | [[13354, 70541], [68, -465], [-3, -597], [-22, -217], [-37, -167], [-34, 95], [28, 166], [-20, 92], [-11, -198], [-35, 20], [49, 323], [-26, 373], [6, -430], [-51, -225], [-45, 105], [-34, 233], [45, 140], [-14, 126], [8, 425], [56, -14], [-30, 143], [83, 110], [19, -38]], 720 | [[12746, 70951], [25, -18], [0, -264], [-47, 10], [-64, -218], [-27, 77], [33, 239], [48, 17], [32, 157]], 721 | [[12999, 71016], [34, 45], [76, -213], [-24, -269], [-40, -96], [-30, 104], [12, 117], [-90, 165], [8, 213], [43, 217], [34, 14], [8, -150], [-31, -147]], 722 | [[12692, 71318], [82, -75], [31, 36], [43, -320], [-31, -86], [20, -128], [91, -106], [77, -418], [9, -256], [19, 42], [20, -243], [-62, 42], [-41, -159], [72, 78], [8, -258], [34, 62], [45, -261], [-40, -60], [34, -83], [38, 84], [-28, -375], [-41, -113], [24, -37], [48, 115], [3, -366], [-15, -275], [-40, 9], [-41, 183], [-30, 420], [-53, -89], [23, 275], [-35, 243], [3, -178], [-43, 79], [-5, 156], [-108, 12], [-8, 198], [96, -41], [-65, 196], [11, 230], [26, 109], [-77, -105], [-37, 86], [22, 255], [43, 104], [-25, 156], [-14, 509], [-80, 33], [-3, 320]], 723 | [[12956, 71488], [-3, -304], [-47, -89], [-61, 180], [18, 199], [93, 14]], 724 | [[13092, 71316], [35, 4], [28, -273], [-42, -174], [-77, 302], [-3, 413], [59, -272]], 725 | [[6152, 71755], [23, -87], [-92, -12], [14, 101], [55, -2]], 726 | [[6876, 71799], [-8, -169], [-69, -226], [11, 252], [66, 143]], 727 | [[6981, 71800], [9, -91], [-43, -104], [-36, 30], [16, 149], [54, 16]], 728 | [[2618, 71827], [76, -52], [-45, -92], [-31, 144]], 729 | [[12888, 72172], [19, -8], [78, -375], [-72, -197], [-40, 39], [15, 541]], 730 | [[12581, 72294], [29, -299], [6, 193], [40, -74], [-16, -137], [18, -181], [-42, -31], [-17, -141], [22, -313], [-18, -139], [-10, -330], [-27, 18], [1, 370], [-29, -501], [-27, 142], [-12, 466], [28, 149], [35, -140], [5, 206], [-76, 170], [23, 81], [-46, 212], [3, 282], [20, 59], [56, -98], [-43, 182], [77, -146]], 731 | [[12643, 72697], [125, -164], [58, 15], [48, -251], [-17, -112], [15, -346], [-19, -39], [-95, 431], [36, -353], [40, -222], [-20, -130], [-142, 4], [6, 270], [-17, 101], [5, 371], [-16, -86], [-28, 211], [-50, 187], [4, 87], [67, 26]], 732 | [[7232, 72884], [84, -48], [-91, -135], [-37, -143], [-19, 143], [42, 241], [21, -58]], 733 | [[2509, 72978], [-34, -159], [-42, 106], [76, 53]], 734 | [[12140, 73010], [7, -191], [-23, -249], [-60, -39], [5, 171], [32, 169], [-42, 104], [5, 194], [32, 8], [44, -167]], 735 | [[12184, 73405], [74, 39], [85, -403], [63, -1008], [-3, -889], [-9, -166], [-63, 295], [-48, 397], [29, 94], [-47, 143], [24, 215], [-43, -187], [19, 295], [-41, -82], [-29, 76], [-1, 216], [58, 190], [-40, 10], [-28, 211], [22, 176], [-56, -26], [-40, 215], [83, 389], [28, -81], [-37, -119]], 736 | [[7211, 74241], [-6, -131], [-73, 222], [17, 80], [62, -171]], 737 | [[7280, 74320], [57, -40], [-32, -267], [18, -53], [11, 229], [22, -64], [37, 206], [34, -46], [35, -213], [-31, -139], [13, -214], [77, 17], [-45, -216], [-8, -145], [-55, 17], [-59, 128], [-63, 17], [94, -214], [-8, -202], [-49, -55], [-11, 156], [-82, -91], [59, -91], [-37, -74], [-45, 35], [-68, -309], [-47, -122], [-19, -231], [-63, -268], [-45, -14], [17, 203], [63, 237], [-37, -17], [45, 364], [-82, -361], [-9, 75], [48, 221], [-110, 53], [-38, -65], [23, -121], [38, 128], [42, 12], [-9, -294], [-42, -128], [-62, 170], [-1, 349], [-19, 160], [-58, 167], [49, 319], [77, 256], [39, 52], [60, -87], [32, -423], [39, -199], [-28, 487], [39, -38], [-50, 208], [79, -20], [-89, 175], [0, 154], [55, 174], [42, -119], [7, -268], [36, 131], [-15, 136], [74, -102], [24, 211], [-44, 218], [75, -155]], 738 | [[11925, 74483], [-31, -320], [-26, 407], [20, 71], [37, -158]], 739 | [[7226, 74643], [88, -193], [-31, -26], [-117, 156], [34, 154], [26, -91]], 740 | [[12100, 74892], [63, -129], [-50, -365], [64, 208], [13, 117], [130, -216], [-12, -269], [-65, 120], [74, -260], [-91, -32], [-164, 374], [16, -111], [117, -245], [43, -187], [85, 93], [28, -492], [-68, -59], [-198, 558], [16, -212], [28, -79], [15, -292], [-43, -166], [-40, 53], [-45, 236], [50, -56], [-87, 297], [17, 84], [-92, 261], [29, 323], [71, -276], [-104, 488], [44, 0], [-23, 215], [26, -5], [27, -219], [8, 231], [42, -106], [48, 203], [28, -85]], 741 | [[12471, 74972], [34, -143], [-101, 95], [-11, 140], [50, 26], [28, -118]], 742 | [[12322, 75166], [29, -82], [32, -309], [141, 0], [6, -172], [77, -532], [9, -268], [-29, 66], [-74, 706], [-25, -127], [14, -207], [93, -513], [12, -245], [-49, -54], [49, -50], [8, -152], [-33, -89], [-55, 150], [29, -209], [-23, -144], [-56, -130], [2, -90], [-73, -145], [10, 275], [-12, 143], [46, 156], [-28, 164], [68, -125], [1, 118], [-44, 0], [-23, 141], [55, 145], [-60, -63], [-28, 209], [-9, 365], [-28, 424], [0, 148], [-31, 168], [-17, 309], [16, 19]], 743 | [[7340, 75002], [11, 139], [-35, 92], [69, 145], [73, -266], [3, 133], [48, -116], [21, 90], [13, -234], [18, 140], [9, -218], [-40, -171], [-57, 193], [-6, -271], [-57, -39], [-5, 209], [-23, -236], [-37, -17], [-8, -136], [-100, 227], [-6, 207], [78, -83], [-57, 182], [19, 65], [69, -35]], 744 | [[7428, 75370], [-48, 119], [79, 181], [2, -164], [-33, -136]], 745 | [[5104, 75701], [-12, -119], [-59, -86], [5, 293], [103, 225], [-37, -313]], 746 | [[7171, 77004], [-42, 9], [43, 124], [-1, -133]], 747 | [[9629, 77917], [66, 317], [37, 52], [-103, -369]], 748 | [[8689, 78510], [20, -42], [-68, -196], [48, 238]], 749 | [[8654, 78521], [-25, -185], [-28, 124], [53, 61]], 750 | [[8924, 78943], [1, -134], [51, 52], [-86, -344], [-71, -369], [6, -119], [-125, -160], [60, 390], [88, 271], [53, 212], [23, 201]], 751 | [[9479, 78882], [-46, 32], [52, 143], [-6, -175]], 752 | [[3632, 79010], [33, -136], [49, 49], [35, -88], [-12, -445], [48, -251], [-56, -18], [-111, -186], [-12, -125], [-57, 177], [-74, 59], [-178, 351], [-35, 239], [40, 82], [116, -53], [23, 155], [60, 44], [32, 137], [22, -73], [77, 82]], 753 | [[9083, 79156], [52, 5], [-3, -117], [60, 55], [-20, -166], [-31, 2], [-74, -204], [-23, 78], [53, 143], [-64, 47], [50, 157]], 754 | [[8763, 79223], [20, -127], [-34, -337], [-48, -41], [42, 196], [-28, 68], [48, 241]], 755 | [[7552, 78931], [23, 301], [25, -21], [-48, -280]], 756 | [[1842, 79009], [40, -83], [-51, -39], [-131, 340], [32, 192], [5, -149], [105, -261]], 757 | [[9206, 79177], [-54, -47], [2, 119], [146, 133], [-94, -205]], 758 | [[8668, 80036], [32, -200], [-56, -53], [24, 253]], 759 | [[4669, 85164], [-1, -116], [-93, 25], [37, 101], [57, -10]], 760 | [[2081, 85494], [16, -196], [188, -232], [82, 216], [97, 20], [60, -153], [12, -159], [71, -184], [53, -20], [12, -117], [232, -98], [-36, -284], [-122, 58], [-80, -269], [-26, -203], [-42, 346], [-75, 148], [-50, -12], [8, 162], [-173, 337], [-63, -29], [-99, -239], [-82, 107], [-31, 383], [48, 418]], 761 | [[6327, 99988], [-47, -101], [48, -169], [224, -155], [17, -194], [-74, -188], [-67, -17], [37, -231], [78, -55], [38, 244], [114, 378], [141, -247], [-26, -256], [158, -182], [67, 205], [106, -22], [59, 80], [270, -137], [31, -75], [-82, -245], [19, -120], [103, -89], [-123, 26], [-31, -65], [242, 15], [-62, -225], [147, -18], [77, -114], [0, 132], [108, 104], [114, -12], [-11, -144], [84, 40], [63, 134], [113, 19], [225, -196], [83, -204], [65, 84], [97, -126], [-1, -104], [190, -130], [69, 43], [276, -29], [162, -334], [198, -33], [146, 197], [213, 59], [196, -197], [91, -299], [173, -179], [67, -213], [114, 1], [0, -14159], [0, -3610], [6, -48], [125, -147], [31, 142], [112, -201], [109, 279], [146, 24], [8, -89], [-30, -431], [50, -184], [85, -159], [28, -266], [274, -980], [37, -471], [-1, -175], [180, 472], [62, 12], [42, 254], [0, 331], [52, 48], [-20, 201], [119, 142], [122, 240], [131, -444], [-23, -268], [29, -70], [17, -212], [63, -58], [71, -271], [37, -370], [27, -116], [98, -204], [68, -361], [65, -271], [6, -215], [57, -274], [26, -265], [44, -243], [102, -726], [89, -576], [-31, -222], [87, -99], [-22, -323], [65, -124], [21, -392], [59, 14], [136, -357], [72, -67], [54, -210], [42, -57], [26, -210], [80, -31], [28, -271], [-44, -407], [7, -386], [45, -501], [-32, -102], [-73, -615], [-85, -258], [-18, 113], [-37, -111], [-19, 98], [-1, 256], [-20, 88], [55, 270], [-52, -117], [-16, 216], [33, 168], [86, 7], [-11, 113], [-57, -15], [-3, 698], [-88, 500], [53, 269], [-93, -289], [-19, 94], [-91, -235], [-44, -60], [32, -57], [-12, -300], [-39, -318], [-57, 167], [-28, 320], [28, -64], [26, 152], [9, 289], [28, 100], [-6, 286], [90, 94], [-65, 32], [-26, 254], [-53, 45], [-12, 173], [-40, 110], [12, 212], [-48, -68], [-18, 293], [-62, 166], [-45, 262], [13, 73], [-189, 305], [31, 196], [53, -6], [-39, 103], [-31, 288], [19, 158], [-47, 18], [-12, 236], [20, 25], [113, -261], [3, 92], [-108, 261], [-2, 287], [115, -115], [-18, 76], [-98, 66], [-36, -264], [-48, 316], [44, -32], [9, 148], [-66, -64], [-42, 168], [-8, 237], [29, 227], [-6, 177], [-66, -370], [-71, 266], [-66, 38], [-51, 536], [-10, 314], [-20, -158], [-58, 740], [-37, 276], [9, 344], [-23, -287], [-39, 36], [54, -202], [-54, 32], [48, -247], [-1, -279], [61, -609], [-17, -42], [48, -497], [-11, -217], [-60, 28], [-42, 259], [-46, 73], [-79, -86], [17, 315], [-63, 506], [17, 88], [-37, 283], [14, -248], [-31, -240], [-68, 140], [-12, 279], [-39, -151], [-111, 335], [34, -216], [-29, -60], [60, -157], [17, 64], [71, -141], [-23, -26], [63, -180], [-32, -130], [35, -44], [9, 131], [47, -187], [29, -348], [-97, -169], [-63, 114], [10, -168], [-28, -97], [-60, 320], [-71, 25], [-126, 379], [29, 157], [-52, -94], [-73, 309], [-15, 237], [-85, 306], [-60, 84], [15, 127], [-57, -52], [-91, 211], [-63, 85], [-181, 432], [79, 130], [28, 196], [-41, 329], [41, 197], [46, -246], [-9, -275], [34, 287], [-81, 334], [-21, -174], [-74, -258], [-131, -225], [-82, 14], [-226, 311], [47, 233], [-34, 282], [-28, -60], [26, -145], [-97, -136], [-65, 123], [-231, 161], [-111, -85], [-115, -35], [-86, -100], [-93, 300], [17, 75], [-106, -6], [-59, 219], [-44, 2], [41, 301], [-11, 116], [20, 280], [-132, -580], [-43, -11], [-36, 140], [-117, 38], [88, 394], [-62, -79], [-19, 157], [-80, -128], [-18, 44], [58, 177], [-71, -15], [-35, -93], [-57, 4], [125, 233], [-88, -3], [-48, 116], [-20, 161], [29, 209], [102, 14], [-12, 105], [-73, 0], [-100, -356], [-28, 115], [-112, -204], [-27, 20], [10, 450], [-34, -327], [10, -207], [-37, 39], [-40, -99], [-49, 214], [46, 323], [51, 178], [-14, 120], [-89, -479], [-28, -2], [-45, -389], [-68, -71], [-35, -201], [74, 197], [21, -67], [-20, -221], [47, 252], [18, -252], [-32, -150], [11, -105], [54, 210], [41, -274], [-143, -528], [51, 92], [21, -186], [-40, 68], [-15, -213], [-50, -193], [-86, -38], [-65, 61], [19, 159], [-45, -84], [-25, -230], [-3, 258], [-37, 174], [12, -223], [-66, -322], [-31, 229], [-3, -536], [-48, 213], [-26, -287], [-45, -64], [0, -119], [-54, -120], [40, 469], [-71, -473], [-27, 28], [-95, -296], [-13, -175], [-24, 123], [-49, 33], [36, -129], [-17, -78], [-71, 98], [-91, -175], [-42, 101], [-26, 176], [23, 164], [69, 166], [53, -15], [54, 156], [77, 417], [-31, 14], [-102, -287], [-100, 153], [-14, 134], [49, 486], [67, 278], [52, 612], [-37, 368], [45, 139], [49, 19], [87, 270], [86, 204], [33, -2], [30, -182], [51, -39], [62, 117], [51, -74], [142, -106], [5, 85], [-62, 4], [-79, 122], [-125, 307], [48, 145], [66, 337], [93, 134], [-29, 65], [-93, -114], [-63, -395], [-130, 12], [-25, 223], [-52, -220], [-93, -173], [-26, -188], [-114, -133], [-51, -148], [-14, -169], [25, -195], [-45, 63], [-51, -163], [-79, -375], [25, -153], [-102, -327], [-77, 52], [83, -304], [-40, -350], [-137, -76], [-17, -92], [77, 23], [-12, -232], [-40, -107], [-70, 264], [-6, -248], [-66, -58], [38, -44], [-61, -126], [10, -195], [-108, -113], [33, -75], [-33, -114], [-15, -207], [9, -281], [40, 111], [93, -38], [99, -248], [-30, -381], [-71, -213], [-57, -10], [-9, -200], [-43, -31], [23, -209], [-53, -47], [-44, -201], [52, -73], [-38, -39], [-10, -212], [-29, 113], [-40, -228], [-31, 84], [-26, -124], [-70, 26], [-9, -229], [-71, -110], [-18, -217], [-59, 127], [-3, -241], [-43, -40], [7, -176], [-57, -34], [-20, 81], [-11, -279], [-30, 82], [-47, -111], [-57, -259], [54, 62], [-28, -156], [28, -99], [-57, -371], [-63, 131], [-14, -294], [-31, 32], [-69, -263], [-65, 174], [4, -179], [-46, -108], [33, -140], [-59, -61], [-25, 120], [-45, -39], [-60, -235], [70, 76], [1, -176], [-77, 67], [3, -91], [-77, -36], [-60, -282], [45, 85], [74, -113], [-39, -104], [8, -104], [-50, -130], [19, -190], [-48, 65], [31, 296], [-60, -171], [11, -261], [-54, 83], [-19, -175], [-43, 10], [-88, -127], [-45, 39], [14, -227], [-32, -347], [0, 430], [-62, 89], [-86, -218], [6, -118], [-87, -53], [22, -64], [-46, -262], [-19, 249], [-23, -270], [-28, -33], [-40, 137], [-28, -175], [-71, -138], [-66, 54], [37, 360], [57, -93], [-71, 220], [-51, -49], [-28, -191], [0, -228], [-52, -334], [-40, 22], [26, -197], [-28, -90], [-48, 65], [8, -139], [-69, 1], [-19, 142], [43, -18], [-61, 373], [-39, -159], [29, -98], [16, -391], [-31, 171], [-31, -219], [-39, 41], [-33, 270], [-44, 65], [-6, -167], [48, -198], [-77, -243], [12, 335], [-15, 247], [86, 240], [-11, -133], [65, 102], [-17, 71], [67, 181], [44, 23], [-15, 162], [89, 455], [113, 347], [187, 261], [-59, -117], [82, -27], [54, 99], [5, -112], [-47, -83], [63, -334], [5, 328], [76, -34], [14, -141], [54, -45], [7, 126], [-78, 184], [-16, 104], [59, 547], [49, 210], [124, 366], [80, 95], [79, 256], [63, 151], [86, -151], [-14, 464], [22, 179], [83, 407], [59, 125], [45, 223], [72, 143], [23, -151], [0, 249], [-29, 26], [26, 866], [42, 244], [-31, 191], [19, 272], [123, 500], [28, 452], [-34, -147], [-110, -165], [-26, -99], [-162, -255], [-31, 18], [-40, 279], [-45, 116], [51, 396], [-20, 71], [-77, -385], [-22, -246], [-29, 58], [43, -510], [-18, -195], [-62, 38], [-94, 630], [-56, 289], [-43, 40], [-14, -244], [-32, -67], [-39, 224], [-34, -35], [-46, 166], [-6, 227], [-116, -332], [-17, -160], [-15, 137], [-82, -194], [-31, 19], [-20, -253], [-111, -191], [15, 104], [-103, 13], [-12, 82], [74, 11], [-2, 89], [57, 172], [-34, 97], [-7, 306], [54, 119], [-8, 117], [-71, -127], [-43, 371], [29, 224], [65, 216], [-102, 717], [-74, 650], [-12, 210], [46, 492], [86, 240], [-102, -192], [-38, -439], [-53, -105], [39, -233], [-17, -395], [-62, 14], [-17, -119], [-77, -159], [-148, -111], [-72, -2], [-70, 82], [-23, 214], [26, 95], [-65, 117], [-74, 315], [-103, 209], [-43, 208], [32, 35], [5, 163], [-59, -106], [-60, 103], [122, 302], [-10, 144], [102, 256], [0, -183], [110, -72], [31, -250], [57, 235], [42, -86], [3, -287], [92, 176], [16, 145], [-39, 109], [-88, 86], [79, 124], [-40, 23], [6, 129], [-85, -262], [-156, -14], [-6, 105], [-74, 78], [-63, -64], [-33, 116], [68, 79], [-114, 368], [38, 88], [19, 304], [88, 153], [-68, -57], [-57, -257], [18, -117], [-49, -147], [8, -236], [-70, 137], [0, 260], [-57, 62], [-26, 165], [40, 222], [-40, 88], [-51, -121], [-26, 166], [23, 96], [93, 91], [-42, 48], [-48, 213], [139, 58], [-43, 332], [136, 784], [71, 197], [88, 136], [63, 254], [-93, -239], [-20, 422], [60, 362], [93, -44], [-12, 118], [-62, 113], [65, 189], [61, 63], [116, -87], [26, -136], [79, -218], [73, 51], [80, 308], [57, 109], [100, 514], [59, -114], [-40, -105], [274, 141], [110, 459], [8, 148], [-45, 427], [-14, 385], [-126, 348], [-30, -81], [26, 264], [98, -51], [80, 268], [-23, 318], [-82, 246], [-60, -291], [-90, 16], [-49, -159], [-51, 18], [-49, -183], [-98, -226], [-10, -214], [-39, -96], [-12, 299], [-116, 282], [-42, -98], [99, -145], [-28, -207], [-111, 289], [-79, 50], [-158, -40], [-73, -128], [-85, -15], [-23, -87], [-114, 120], [-207, 140], [-82, 275], [25, 322], [-82, 159], [-77, 328], [59, -73], [60, 41], [14, 185], [37, 77], [63, -79], [-3, 99], [-224, 190], [-128, 30], [-190, 363], [73, 245], [89, 39], [-17, 130], [60, 171], [81, -41], [51, 133], [-28, 52], [191, 391], [54, -104], [94, -38], [71, 90], [-108, 169], [34, 157], [128, 216], [76, -72], [88, 299], [125, 88], [150, 2], [-45, -389], [12, -209], [-94, -184], [80, 27], [62, -245], [91, 37], [65, -53], [94, 67], [40, -120], [70, -12], [58, 75], [101, -67], [66, 409], [131, -8], [12, -214], [19, 196], [-39, 194], [-103, 123], [-66, -4], [-59, -132], [25, 275], [-19, 144], [-91, 317], [-49, 16], [-56, 321], [87, 116], [86, -358], [-17, -202], [57, -256], [74, -149], [116, 157], [119, -316], [143, 61], [8, 247], [-60, 198], [-26, -82], [-98, 151], [-71, -39], [-49, -222], [-46, -2], [-108, 328], [-5, 195], [43, 276], [65, 32], [-94, 161], [-168, -122], [29, 305], [-63, -250], [-315, 159], [-22, 69], [-12, 373], [-42, 311], [-52, 230], [-151, 391], [-45, 47], [-162, 402], [-138, 146], [-103, 308], [-142, 116], [73, -2], [49, 155], [40, 266], [-3, 561], [159, -24], [173, 38], 762 | [196, 91], [105, 139], [95, 222], [139, 516], [22, 566], [28, 197], [122, 355], [168, 654], [49, -133], [108, 16], [135, 168], [196, 494], [58, -18], [6, -205], [-48, -320], [59, 148], [23, 190], [-18, 191], [-64, 84], [73, 122], [46, 186], [139, 93], [-77, -146], [128, 0], [264, 114], [134, 218], [91, 228], [116, 448], [107, 191]]] 763 | } 764 | -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | # react-cesium-fiber 2 | 3 | [![npm version](https://badge.fury.io/js/react-cesium-fiber.svg)](https://badge.fury.io/js/react-cesium-fiber) 4 | 5 | react-cesium-fiber is a React renderer for CesiumJs on the web. 6 | 7 | ### What is it? 8 | 9 | react-cesium-fiber is a custom React renderer which lets you create cesium components. 10 | 11 | With react-cesium-fiber, you can easily create a 3D globe of the Earth and add custom imagery or terrain providers, add 3D geometries, labels or even point-clouds. 12 | 13 | Every feature proposed by CesiumJs is available in react-cesium-fiber. 14 | See the details of what you can do with CesiumJs on their website. 15 | 16 | ### Why do you need it? 17 | 18 | By default, CesiumJs has an imperative API. react-cesium-fiber transforms this in a declarative API. You simply specify what you want and react-cesium-fiber deals with the creation, updates and deletion of your components. 19 | 20 | With `react-cesium-fiber`, you can profit from all the features React and its ecosystem bring, such as encapsulating and reusing logic in components. Your CesiumJs app now reacts easily to state changes, abstracting all the tedious work of maintaining your state and CesiumJs up to-date. 21 | 22 | ## Getting started 23 | 24 | ### 1. Create your react app and add basic cesium configuration. 25 | 26 | You can follow craco-cesium really nice tutorial. But note that you don't need to add `resium`. 27 | 28 | ### 2. Add react-cesium-fiber with your favorite provider. 29 | 30 | ```shell 31 | npm install react-cesium-fiber 32 | ``` 33 | 34 | or 35 | 36 | ```shell 37 | yarn add react-cesium-fiber 38 | ``` 39 | 40 | ### 3. Add a Viewer in your app 41 | 42 | ```jsx 43 | import React from "react"; 44 | import { Viewer } from "react-cesium-fiber"; 45 | 46 | export const App = () => ; 47 | ``` 48 | 49 | ### 4. Add more components in your Viewer 50 | 51 | ```jsx 52 | import React from "react"; 53 | import { Color } from "cesium"; 54 | import { Viewer } from "react-cesium-fiber"; 55 | 56 | export const App = () => ( 57 | 58 | 59 | 64 | 65 | 66 | 67 | 68 | 69 | ); 70 | ``` 71 | 72 | Note that you don't need to import `entity`, `cartesian3` or `boxGraphics`. That's the magic of the react-reconciler. 73 | 74 | ## Core concepts 75 | 76 | - 📖 You need some basic knowledge of CesiumJs. react-cesium-fiber has a few specificities, such as the `args` and `attach` props, but once you grab those basic concepts, it quickly falls back to vanilla CesiumJs. 77 | - 🧩 Every CesiumJs object can be instanced as a children of the Viewer. They don't need to have a Capitalized name as react-cesium-fiber recognize them as native components. 78 | - 🚪 react-cesium-fiber is built in a way that always let you fallback to vanilla CesiumJs if you need. Using React `ref`, you can access the CesiumJs objects and manually update them. 79 | - 🔍 TypeScript types and props autocomplete should help you to get started. 80 | 81 | More details about the ➡️ API here ⬅️ 82 | 83 | ## A few notes 84 | 85 | - Greatly inspired by the amazing react-three-fiber package and this mind-blowing video of Sophie Alpert. 86 | - Based on the work of the Cesium team and the CesiumJS library. 87 | - react-cesium-fiber is a very young project. If you are looking for something more production-ready, you can have a look at resium (even if I think that react-cesium-fiber conception is way easier to maintain.) 88 | -------------------------------------------------------------------------------- /rollup.config.js: -------------------------------------------------------------------------------- 1 | import commonjs from "rollup-plugin-commonjs"; 2 | import nodeResolve from "rollup-plugin-node-resolve"; 3 | import babel from "rollup-plugin-babel"; 4 | import fp from "lodash/fp"; 5 | import { 6 | dependencies, 7 | devDependencies, 8 | peerDependencies, 9 | browserslist, 10 | } from "./package.json"; 11 | 12 | export const extensions = [".js", ".jsx", ".ts", ".tsx"]; 13 | 14 | export default { 15 | input: "./src/index.ts", 16 | external: fp.uniq([ 17 | // Do not package dependencies 18 | ...Object.keys(dependencies || {}), 19 | // Do not package dev dependencies 20 | ...Object.keys(devDependencies || {}), 21 | // Do not package peer dependencies 22 | ...Object.keys(peerDependencies || {}), 23 | "lodash/fp", 24 | ]), 25 | plugins: [ 26 | nodeResolve({ extensions, mainFields: ["module"] }), 27 | babel({ 28 | babelrc: false, 29 | extensions, 30 | exclude: "**/node_modules/**", 31 | runtimeHelpers: true, 32 | presets: [ 33 | [ 34 | "@babel/preset-env", 35 | { loose: true, modules: false, targets: browserslist.join(",") }, 36 | ], 37 | "@babel/preset-react", 38 | "@babel/preset-typescript", 39 | ], 40 | }), 41 | commonjs({ 42 | extensions, 43 | }), 44 | ], 45 | output: [ 46 | { 47 | dir: "lib", 48 | entryFileNames: "[name].cjs.js", 49 | chunkFileNames: "[name]-[hash].cjs.js", 50 | format: "cjs", 51 | }, 52 | { 53 | dir: "lib", 54 | entryFileNames: "[name].esm.js", 55 | chunkFileNames: "[name]-[hash].esm.js", 56 | format: "es", 57 | }, 58 | ], 59 | }; 60 | -------------------------------------------------------------------------------- /src/context.tsx: -------------------------------------------------------------------------------- 1 | import { createContext, useContext } from "react"; 2 | 3 | export const ViewerContext = createContext(null); 4 | 5 | export const useViewer = () => useContext(ViewerContext); 6 | 7 | export const ViewerProvider = ViewerContext.Provider; 8 | -------------------------------------------------------------------------------- /src/generated-mapping.ts: -------------------------------------------------------------------------------- 1 | // @ts-nocheck 2 | // Generated Code, do not edit manually 3 | import * as Cesium from "cesium"; 4 | 5 | export type MappingExported = { 6 | animation: Cesium.Animation; 7 | animationViewModel: Cesium.AnimationViewModel; 8 | appearance: Cesium.Appearance; 9 | approximateTerrainHeights: Cesium.ApproximateTerrainHeights; 10 | arcGisTiledElevationTerrainProvider: Cesium.ArcGISTiledElevationTerrainProvider; 11 | arcGisMapServerImageryProvider: Cesium.ArcGisMapServerImageryProvider; 12 | arcType: Cesium.ArcType; 13 | associativeArray: Cesium.AssociativeArray; 14 | attributeCompression: Cesium.AttributeCompression; 15 | attributeType: Cesium.AttributeType; 16 | autoExposure: Cesium.AutoExposure; 17 | autolinker: Cesium.Autolinker; 18 | automaticUniforms: Cesium.AutomaticUniforms; 19 | axis: Cesium.Axis; 20 | axisAlignedBoundingBox: Cesium.AxisAlignedBoundingBox; 21 | baseLayerPicker: Cesium.BaseLayerPicker; 22 | baseLayerPickerViewModel: Cesium.BaseLayerPickerViewModel; 23 | batchTable: Cesium.BatchTable; 24 | batched3DModel3DTileContent: Cesium.Batched3DModel3DTileContent; 25 | billboard: Cesium.Billboard; 26 | billboardCollection: Cesium.BillboardCollection; 27 | billboardGraphics: Cesium.BillboardGraphics; 28 | billboardVisualizer: Cesium.BillboardVisualizer; 29 | bingMapsApi: Cesium.BingMapsApi; 30 | bingMapsGeocoderService: Cesium.BingMapsGeocoderService; 31 | bingMapsImageryProvider: Cesium.BingMapsImageryProvider; 32 | bingMapsStyle: Cesium.BingMapsStyle; 33 | blendEquation: Cesium.BlendEquation; 34 | blendFunction: Cesium.BlendFunction; 35 | blendOption: Cesium.BlendOption; 36 | blendingState: Cesium.BlendingState; 37 | boundingRectangle: Cesium.BoundingRectangle; 38 | boundingSphere: Cesium.BoundingSphere; 39 | boundingSphereState: Cesium.BoundingSphereState; 40 | boxEmitter: Cesium.BoxEmitter; 41 | boxGeometry: Cesium.BoxGeometry; 42 | boxGeometryUpdater: Cesium.BoxGeometryUpdater; 43 | boxGraphics: Cesium.BoxGraphics; 44 | boxOutlineGeometry: Cesium.BoxOutlineGeometry; 45 | brdfLutGenerator: Cesium.BrdfLutGenerator; 46 | buffer: Cesium.Buffer; 47 | bufferUsage: Cesium.BufferUsage; 48 | callbackProperty: Cesium.CallbackProperty; 49 | camera: Cesium.Camera; 50 | cameraEventAggregator: Cesium.CameraEventAggregator; 51 | cameraEventType: Cesium.CameraEventType; 52 | cameraFlightPath: Cesium.CameraFlightPath; 53 | cartesian2: Cesium.Cartesian2; 54 | cartesian3: Cesium.Cartesian3; 55 | cartesian4: Cesium.Cartesian4; 56 | cartographic: Cesium.Cartographic; 57 | cartographicGeocoderService: Cesium.CartographicGeocoderService; 58 | catmullRomSpline: Cesium.CatmullRomSpline; 59 | cesium3DTile: Cesium.Cesium3DTile; 60 | cesium3DTileBatchTable: Cesium.Cesium3DTileBatchTable; 61 | cesium3DTileColorBlendMode: Cesium.Cesium3DTileColorBlendMode; 62 | cesium3DTileContent: Cesium.Cesium3DTileContent; 63 | cesium3DTileContentFactory: Cesium.Cesium3DTileContentFactory; 64 | cesium3DTileContentState: Cesium.Cesium3DTileContentState; 65 | cesium3DTileFeature: Cesium.Cesium3DTileFeature; 66 | cesium3DTileFeatureTable: Cesium.Cesium3DTileFeatureTable; 67 | cesium3DTileOptimizationHint: Cesium.Cesium3DTileOptimizationHint; 68 | cesium3DTileOptimizations: Cesium.Cesium3DTileOptimizations; 69 | cesium3DTilePass: Cesium.Cesium3DTilePass; 70 | cesium3DTilePassState: Cesium.Cesium3DTilePassState; 71 | cesium3DTilePointFeature: Cesium.Cesium3DTilePointFeature; 72 | cesium3DTileRefine: Cesium.Cesium3DTileRefine; 73 | cesium3DTileStyle: Cesium.Cesium3DTileStyle; 74 | cesium3DTileStyleEngine: Cesium.Cesium3DTileStyleEngine; 75 | cesium3DTilesInspector: Cesium.Cesium3DTilesInspector; 76 | cesium3DTilesInspectorViewModel: Cesium.Cesium3DTilesInspectorViewModel; 77 | cesium3DTileset: Cesium.Cesium3DTileset; 78 | cesium3DTilesetCache: Cesium.Cesium3DTilesetCache; 79 | cesium3DTilesetGraphics: Cesium.Cesium3DTilesetGraphics; 80 | cesium3DTilesetHeatmap: Cesium.Cesium3DTilesetHeatmap; 81 | cesium3DTilesetMostDetailedTraversal: Cesium.Cesium3DTilesetMostDetailedTraversal; 82 | cesium3DTilesetStatistics: Cesium.Cesium3DTilesetStatistics; 83 | cesium3DTilesetTraversal: Cesium.Cesium3DTilesetTraversal; 84 | cesium3DTilesetVisualizer: Cesium.Cesium3DTilesetVisualizer; 85 | cesiumInspector: Cesium.CesiumInspector; 86 | cesiumInspectorViewModel: Cesium.CesiumInspectorViewModel; 87 | cesiumTerrainProvider: Cesium.CesiumTerrainProvider; 88 | cesiumWidget: Cesium.CesiumWidget; 89 | check: Cesium.Check; 90 | checkerboardMaterialProperty: Cesium.CheckerboardMaterialProperty; 91 | circleEmitter: Cesium.CircleEmitter; 92 | circleGeometry: Cesium.CircleGeometry; 93 | circleOutlineGeometry: Cesium.CircleOutlineGeometry; 94 | classificationModel: Cesium.ClassificationModel; 95 | classificationPrimitive: Cesium.ClassificationPrimitive; 96 | classificationType: Cesium.ClassificationType; 97 | clearCommand: Cesium.ClearCommand; 98 | clippingPlane: Cesium.ClippingPlane; 99 | clippingPlaneCollection: Cesium.ClippingPlaneCollection; 100 | clock: Cesium.Clock; 101 | clockRange: Cesium.ClockRange; 102 | clockStep: Cesium.ClockStep; 103 | clockViewModel: Cesium.ClockViewModel; 104 | color: Cesium.Color; 105 | colorBlendMode: Cesium.ColorBlendMode; 106 | colorGeometryInstanceAttribute: Cesium.ColorGeometryInstanceAttribute; 107 | colorMaterialProperty: Cesium.ColorMaterialProperty; 108 | command: Cesium.Command; 109 | componentDatatype: Cesium.ComponentDatatype; 110 | composite3DTileContent: Cesium.Composite3DTileContent; 111 | compositeEntityCollection: Cesium.CompositeEntityCollection; 112 | compositeMaterialProperty: Cesium.CompositeMaterialProperty; 113 | compositePositionProperty: Cesium.CompositePositionProperty; 114 | compositeProperty: Cesium.CompositeProperty; 115 | compressedTextureBuffer: Cesium.CompressedTextureBuffer; 116 | computeCommand: Cesium.ComputeCommand; 117 | computeEngine: Cesium.ComputeEngine; 118 | conditionsExpression: Cesium.ConditionsExpression; 119 | coneEmitter: Cesium.ConeEmitter; 120 | constantPositionProperty: Cesium.ConstantPositionProperty; 121 | constantProperty: Cesium.ConstantProperty; 122 | context: Cesium.Context; 123 | contextLimits: Cesium.ContextLimits; 124 | coplanarPolygonGeometry: Cesium.CoplanarPolygonGeometry; 125 | coplanarPolygonGeometryLibrary: Cesium.CoplanarPolygonGeometryLibrary; 126 | coplanarPolygonOutlineGeometry: Cesium.CoplanarPolygonOutlineGeometry; 127 | cornerType: Cesium.CornerType; 128 | corridorGeometry: Cesium.CorridorGeometry; 129 | corridorGeometryLibrary: Cesium.CorridorGeometryLibrary; 130 | corridorGeometryUpdater: Cesium.CorridorGeometryUpdater; 131 | corridorGraphics: Cesium.CorridorGraphics; 132 | corridorOutlineGeometry: Cesium.CorridorOutlineGeometry; 133 | credit: Cesium.Credit; 134 | creditDisplay: Cesium.CreditDisplay; 135 | cubeMap: Cesium.CubeMap; 136 | cubeMapFace: Cesium.CubeMapFace; 137 | cubicRealPolynomial: Cesium.CubicRealPolynomial; 138 | cullFace: Cesium.CullFace; 139 | cullingVolume: Cesium.CullingVolume; 140 | customDataSource: Cesium.CustomDataSource; 141 | cylinderGeometry: Cesium.CylinderGeometry; 142 | cylinderGeometryLibrary: Cesium.CylinderGeometryLibrary; 143 | cylinderGeometryUpdater: Cesium.CylinderGeometryUpdater; 144 | cylinderGraphics: Cesium.CylinderGraphics; 145 | cylinderOutlineGeometry: Cesium.CylinderOutlineGeometry; 146 | czmlDataSource: Cesium.CzmlDataSource; 147 | dataSource: Cesium.DataSource; 148 | dataSourceClock: Cesium.DataSourceClock; 149 | dataSourceCollection: Cesium.DataSourceCollection; 150 | dataSourceDisplay: Cesium.DataSourceDisplay; 151 | debugAppearance: Cesium.DebugAppearance; 152 | debugCameraPrimitive: Cesium.DebugCameraPrimitive; 153 | debugModelMatrixPrimitive: Cesium.DebugModelMatrixPrimitive; 154 | defaultProxy: Cesium.DefaultProxy; 155 | depthFunction: Cesium.DepthFunction; 156 | depthPlane: Cesium.DepthPlane; 157 | derivedCommand: Cesium.DerivedCommand; 158 | developerError: Cesium.DeveloperError; 159 | deviceOrientationCameraController: Cesium.DeviceOrientationCameraController; 160 | directionalLight: Cesium.DirectionalLight; 161 | discardEmptyTileImagePolicy: Cesium.DiscardEmptyTileImagePolicy; 162 | discardMissingTileImagePolicy: Cesium.DiscardMissingTileImagePolicy; 163 | distanceDisplayCondition: Cesium.DistanceDisplayCondition; 164 | distanceDisplayConditionGeometryInstanceAttribute: Cesium.DistanceDisplayConditionGeometryInstanceAttribute; 165 | doublyLinkedList: Cesium.DoublyLinkedList; 166 | dracoLoader: Cesium.DracoLoader; 167 | drawCommand: Cesium.DrawCommand; 168 | dynamicGeometryBatch: Cesium.DynamicGeometryBatch; 169 | dynamicGeometryUpdater: Cesium.DynamicGeometryUpdater; 170 | earthOrientationParameters: Cesium.EarthOrientationParameters; 171 | earthOrientationParametersSample: Cesium.EarthOrientationParametersSample; 172 | easingFunction: Cesium.EasingFunction; 173 | ellipseGeometry: Cesium.EllipseGeometry; 174 | ellipseGeometryLibrary: Cesium.EllipseGeometryLibrary; 175 | ellipseGeometryUpdater: Cesium.EllipseGeometryUpdater; 176 | ellipseGraphics: Cesium.EllipseGraphics; 177 | ellipseOutlineGeometry: Cesium.EllipseOutlineGeometry; 178 | ellipsoid: Cesium.Ellipsoid; 179 | ellipsoidGeodesic: Cesium.EllipsoidGeodesic; 180 | ellipsoidGeometry: Cesium.EllipsoidGeometry; 181 | ellipsoidGeometryUpdater: Cesium.EllipsoidGeometryUpdater; 182 | ellipsoidGraphics: Cesium.EllipsoidGraphics; 183 | ellipsoidOutlineGeometry: Cesium.EllipsoidOutlineGeometry; 184 | ellipsoidPrimitive: Cesium.EllipsoidPrimitive; 185 | ellipsoidRhumbLine: Cesium.EllipsoidRhumbLine; 186 | ellipsoidSurfaceAppearance: Cesium.EllipsoidSurfaceAppearance; 187 | ellipsoidTangentPlane: Cesium.EllipsoidTangentPlane; 188 | ellipsoidTerrainProvider: Cesium.EllipsoidTerrainProvider; 189 | ellipsoidalOccluder: Cesium.EllipsoidalOccluder; 190 | empty3DTileContent: Cesium.Empty3DTileContent; 191 | encodedCartesian3: Cesium.EncodedCartesian3; 192 | entity: Cesium.Entity; 193 | entityCluster: Cesium.EntityCluster; 194 | entityCollection: Cesium.EntityCollection; 195 | entityView: Cesium.EntityView; 196 | event: Cesium.Event; 197 | eventHelper: Cesium.EventHelper; 198 | expression: Cesium.Expression; 199 | expressionNodeType: Cesium.ExpressionNodeType; 200 | extrapolationType: Cesium.ExtrapolationType; 201 | fxaa311: Cesium.FXAA3_11; 202 | featureDetection: Cesium.FeatureDetection; 203 | fog: Cesium.Fog; 204 | forEach: Cesium.ForEach; 205 | frameRateMonitor: Cesium.FrameRateMonitor; 206 | frameState: Cesium.FrameState; 207 | framebuffer: Cesium.Framebuffer; 208 | frustumCommands: Cesium.FrustumCommands; 209 | frustumGeometry: Cesium.FrustumGeometry; 210 | frustumOutlineGeometry: Cesium.FrustumOutlineGeometry; 211 | fullscreen: Cesium.Fullscreen; 212 | fullscreenButton: Cesium.FullscreenButton; 213 | fullscreenButtonViewModel: Cesium.FullscreenButtonViewModel; 214 | geoJsonDataSource: Cesium.GeoJsonDataSource; 215 | geocodeType: Cesium.GeocodeType; 216 | geocoder: Cesium.Geocoder; 217 | geocoderService: Cesium.GeocoderService; 218 | geocoderViewModel: Cesium.GeocoderViewModel; 219 | geographicProjection: Cesium.GeographicProjection; 220 | geographicTilingScheme: Cesium.GeographicTilingScheme; 221 | geometry: Cesium.Geometry; 222 | geometry3DTileContent: Cesium.Geometry3DTileContent; 223 | geometryAttribute: Cesium.GeometryAttribute; 224 | geometryAttributes: Cesium.GeometryAttributes; 225 | geometryInstance: Cesium.GeometryInstance; 226 | geometryInstanceAttribute: Cesium.GeometryInstanceAttribute; 227 | geometryOffsetAttribute: Cesium.GeometryOffsetAttribute; 228 | geometryPipeline: Cesium.GeometryPipeline; 229 | geometryType: Cesium.GeometryType; 230 | geometryUpdater: Cesium.GeometryUpdater; 231 | geometryVisualizer: Cesium.GeometryVisualizer; 232 | getFeatureInfoFormat: Cesium.GetFeatureInfoFormat; 233 | globe: Cesium.Globe; 234 | globeDepth: Cesium.GlobeDepth; 235 | globeSurfaceShaderSet: Cesium.GlobeSurfaceShaderSet; 236 | globeSurfaceTile: Cesium.GlobeSurfaceTile; 237 | globeSurfaceTileProvider: Cesium.GlobeSurfaceTileProvider; 238 | globeTranslucency: Cesium.GlobeTranslucency; 239 | globeTranslucencyFramebuffer: Cesium.GlobeTranslucencyFramebuffer; 240 | globeTranslucencyState: Cesium.GlobeTranslucencyState; 241 | googleEarthEnterpriseImageryProvider: Cesium.GoogleEarthEnterpriseImageryProvider; 242 | googleEarthEnterpriseMapsProvider: Cesium.GoogleEarthEnterpriseMapsProvider; 243 | googleEarthEnterpriseMetadata: Cesium.GoogleEarthEnterpriseMetadata; 244 | googleEarthEnterpriseTerrainData: Cesium.GoogleEarthEnterpriseTerrainData; 245 | googleEarthEnterpriseTerrainProvider: Cesium.GoogleEarthEnterpriseTerrainProvider; 246 | googleEarthEnterpriseTileInformation: Cesium.GoogleEarthEnterpriseTileInformation; 247 | gregorianDate: Cesium.GregorianDate; 248 | gridImageryProvider: Cesium.GridImageryProvider; 249 | gridMaterialProperty: Cesium.GridMaterialProperty; 250 | groundGeometryUpdater: Cesium.GroundGeometryUpdater; 251 | groundPolylineGeometry: Cesium.GroundPolylineGeometry; 252 | groundPolylinePrimitive: Cesium.GroundPolylinePrimitive; 253 | groundPrimitive: Cesium.GroundPrimitive; 254 | headingPitchRange: Cesium.HeadingPitchRange; 255 | headingPitchRoll: Cesium.HeadingPitchRoll; 256 | heap: Cesium.Heap; 257 | heightReference: Cesium.HeightReference; 258 | heightmapEncoding: Cesium.HeightmapEncoding; 259 | heightmapTerrainData: Cesium.HeightmapTerrainData; 260 | heightmapTessellator: Cesium.HeightmapTessellator; 261 | hermitePolynomialApproximation: Cesium.HermitePolynomialApproximation; 262 | hermiteSpline: Cesium.HermiteSpline; 263 | homeButton: Cesium.HomeButton; 264 | homeButtonViewModel: Cesium.HomeButtonViewModel; 265 | horizontalOrigin: Cesium.HorizontalOrigin; 266 | iau2000Orientation: Cesium.Iau2000Orientation; 267 | iau2006XysData: Cesium.Iau2006XysData; 268 | iau2006XysSample: Cesium.Iau2006XysSample; 269 | iauOrientationAxes: Cesium.IauOrientationAxes; 270 | iauOrientationParameters: Cesium.IauOrientationParameters; 271 | imageMaterialProperty: Cesium.ImageMaterialProperty; 272 | imagery: Cesium.Imagery; 273 | imageryLayer: Cesium.ImageryLayer; 274 | imageryLayerCollection: Cesium.ImageryLayerCollection; 275 | imageryLayerFeatureInfo: Cesium.ImageryLayerFeatureInfo; 276 | imageryProvider: Cesium.ImageryProvider; 277 | imagerySplitDirection: Cesium.ImagerySplitDirection; 278 | imageryState: Cesium.ImageryState; 279 | indexDatatype: Cesium.IndexDatatype; 280 | infoBox: Cesium.InfoBox; 281 | infoBoxViewModel: Cesium.InfoBoxViewModel; 282 | inspectorShared: Cesium.InspectorShared; 283 | instanced3DModel3DTileContent: Cesium.Instanced3DModel3DTileContent; 284 | interpolationAlgorithm: Cesium.InterpolationAlgorithm; 285 | intersect: Cesium.Intersect; 286 | intersectionTests: Cesium.IntersectionTests; 287 | intersections2D: Cesium.Intersections2D; 288 | interval: Cesium.Interval; 289 | invertClassification: Cesium.InvertClassification; 290 | ion: Cesium.Ion; 291 | ionGeocoderService: Cesium.IonGeocoderService; 292 | ionImageryProvider: Cesium.IonImageryProvider; 293 | ionResource: Cesium.IonResource; 294 | ionWorldImageryStyle: Cesium.IonWorldImageryStyle; 295 | iso8601: Cesium.Iso8601; 296 | jobScheduler: Cesium.JobScheduler; 297 | jobType: Cesium.JobType; 298 | julianDate: Cesium.JulianDate; 299 | keyboardEventModifier: Cesium.KeyboardEventModifier; 300 | kmlCamera: Cesium.KmlCamera; 301 | kmlDataSource: Cesium.KmlDataSource; 302 | kmlLookAt: Cesium.KmlLookAt; 303 | kmlTour: Cesium.KmlTour; 304 | kmlTourFlyTo: Cesium.KmlTourFlyTo; 305 | kmlTourWait: Cesium.KmlTourWait; 306 | label: Cesium.Label; 307 | labelCollection: Cesium.LabelCollection; 308 | labelGraphics: Cesium.LabelGraphics; 309 | labelStyle: Cesium.LabelStyle; 310 | labelVisualizer: Cesium.LabelVisualizer; 311 | lagrangePolynomialApproximation: Cesium.LagrangePolynomialApproximation; 312 | leapSecond: Cesium.LeapSecond; 313 | lercDecode: Cesium.LercDecode; 314 | light: Cesium.Light; 315 | linearApproximation: Cesium.LinearApproximation; 316 | linearSpline: Cesium.LinearSpline; 317 | managedArray: Cesium.ManagedArray; 318 | mapMode2D: Cesium.MapMode2D; 319 | mapProjection: Cesium.MapProjection; 320 | mapboxApi: Cesium.MapboxApi; 321 | mapboxImageryProvider: Cesium.MapboxImageryProvider; 322 | mapboxStyleImageryProvider: Cesium.MapboxStyleImageryProvider; 323 | material: Cesium.Material; 324 | materialAppearance: Cesium.MaterialAppearance; 325 | materialProperty: Cesium.MaterialProperty; 326 | math: Cesium.Math; 327 | matrix2: Cesium.Matrix2; 328 | matrix3: Cesium.Matrix3; 329 | matrix4: Cesium.Matrix4; 330 | mipmapHint: Cesium.MipmapHint; 331 | model: Cesium.Model; 332 | modelAnimation: Cesium.ModelAnimation; 333 | modelAnimationCache: Cesium.ModelAnimationCache; 334 | modelAnimationCollection: Cesium.ModelAnimationCollection; 335 | modelAnimationLoop: Cesium.ModelAnimationLoop; 336 | modelAnimationState: Cesium.ModelAnimationState; 337 | modelGraphics: Cesium.ModelGraphics; 338 | modelInstance: Cesium.ModelInstance; 339 | modelInstanceCollection: Cesium.ModelInstanceCollection; 340 | modelLoadResources: Cesium.ModelLoadResources; 341 | modelMaterial: Cesium.ModelMaterial; 342 | modelMesh: Cesium.ModelMesh; 343 | modelNode: Cesium.ModelNode; 344 | modelOutlineLoader: Cesium.ModelOutlineLoader; 345 | modelUtility: Cesium.ModelUtility; 346 | modelVisualizer: Cesium.ModelVisualizer; 347 | moon: Cesium.Moon; 348 | navigationHelpButton: Cesium.NavigationHelpButton; 349 | navigationHelpButtonViewModel: Cesium.NavigationHelpButtonViewModel; 350 | nearFarScalar: Cesium.NearFarScalar; 351 | neverTileDiscardPolicy: Cesium.NeverTileDiscardPolicy; 352 | noSleep: Cesium.NoSleep; 353 | nodeTransformationProperty: Cesium.NodeTransformationProperty; 354 | oit: Cesium.OIT; 355 | occluder: Cesium.Occluder; 356 | octahedralProjectedCubeMap: Cesium.OctahedralProjectedCubeMap; 357 | offsetGeometryInstanceAttribute: Cesium.OffsetGeometryInstanceAttribute; 358 | openCageGeocoderService: Cesium.OpenCageGeocoderService; 359 | openStreetMapImageryProvider: Cesium.OpenStreetMapImageryProvider; 360 | orderedGroundPrimitiveCollection: Cesium.OrderedGroundPrimitiveCollection; 361 | orientedBoundingBox: Cesium.OrientedBoundingBox; 362 | orthographicFrustum: Cesium.OrthographicFrustum; 363 | orthographicOffCenterFrustum: Cesium.OrthographicOffCenterFrustum; 364 | packable: Cesium.Packable; 365 | packableForInterpolation: Cesium.PackableForInterpolation; 366 | particle: Cesium.Particle; 367 | particleBurst: Cesium.ParticleBurst; 368 | particleEmitter: Cesium.ParticleEmitter; 369 | particleSystem: Cesium.ParticleSystem; 370 | pass: Cesium.Pass; 371 | passState: Cesium.PassState; 372 | pathGraphics: Cesium.PathGraphics; 373 | pathVisualizer: Cesium.PathVisualizer; 374 | peliasGeocoderService: Cesium.PeliasGeocoderService; 375 | perInstanceColorAppearance: Cesium.PerInstanceColorAppearance; 376 | performanceDisplay: Cesium.PerformanceDisplay; 377 | performanceWatchdog: Cesium.PerformanceWatchdog; 378 | performanceWatchdogViewModel: Cesium.PerformanceWatchdogViewModel; 379 | perspectiveFrustum: Cesium.PerspectiveFrustum; 380 | perspectiveOffCenterFrustum: Cesium.PerspectiveOffCenterFrustum; 381 | pickDepth: Cesium.PickDepth; 382 | pickDepthFramebuffer: Cesium.PickDepthFramebuffer; 383 | pickFramebuffer: Cesium.PickFramebuffer; 384 | picking: Cesium.Picking; 385 | pinBuilder: Cesium.PinBuilder; 386 | pixelDatatype: Cesium.PixelDatatype; 387 | pixelFormat: Cesium.PixelFormat; 388 | plane: Cesium.Plane; 389 | planeGeometry: Cesium.PlaneGeometry; 390 | planeGeometryUpdater: Cesium.PlaneGeometryUpdater; 391 | planeGraphics: Cesium.PlaneGraphics; 392 | planeOutlineGeometry: Cesium.PlaneOutlineGeometry; 393 | pointCloud: Cesium.PointCloud; 394 | pointCloud3DTileContent: Cesium.PointCloud3DTileContent; 395 | pointCloudEyeDomeLighting: Cesium.PointCloudEyeDomeLighting; 396 | pointCloudShading: Cesium.PointCloudShading; 397 | pointGraphics: Cesium.PointGraphics; 398 | pointPrimitive: Cesium.PointPrimitive; 399 | pointPrimitiveCollection: Cesium.PointPrimitiveCollection; 400 | pointVisualizer: Cesium.PointVisualizer; 401 | polygonGeometry: Cesium.PolygonGeometry; 402 | polygonGeometryLibrary: Cesium.PolygonGeometryLibrary; 403 | polygonGeometryUpdater: Cesium.PolygonGeometryUpdater; 404 | polygonGraphics: Cesium.PolygonGraphics; 405 | polygonHierarchy: Cesium.PolygonHierarchy; 406 | polygonOutlineGeometry: Cesium.PolygonOutlineGeometry; 407 | polygonPipeline: Cesium.PolygonPipeline; 408 | polyline: Cesium.Polyline; 409 | polylineArrowMaterialProperty: Cesium.PolylineArrowMaterialProperty; 410 | polylineCollection: Cesium.PolylineCollection; 411 | polylineColorAppearance: Cesium.PolylineColorAppearance; 412 | polylineDashMaterialProperty: Cesium.PolylineDashMaterialProperty; 413 | polylineGeometry: Cesium.PolylineGeometry; 414 | polylineGeometryUpdater: Cesium.PolylineGeometryUpdater; 415 | polylineGlowMaterialProperty: Cesium.PolylineGlowMaterialProperty; 416 | polylineGraphics: Cesium.PolylineGraphics; 417 | polylineMaterialAppearance: Cesium.PolylineMaterialAppearance; 418 | polylineOutlineMaterialProperty: Cesium.PolylineOutlineMaterialProperty; 419 | polylinePipeline: Cesium.PolylinePipeline; 420 | polylineVisualizer: Cesium.PolylineVisualizer; 421 | polylineVolumeGeometry: Cesium.PolylineVolumeGeometry; 422 | polylineVolumeGeometryLibrary: Cesium.PolylineVolumeGeometryLibrary; 423 | polylineVolumeGeometryUpdater: Cesium.PolylineVolumeGeometryUpdater; 424 | polylineVolumeGraphics: Cesium.PolylineVolumeGraphics; 425 | polylineVolumeOutlineGeometry: Cesium.PolylineVolumeOutlineGeometry; 426 | positionProperty: Cesium.PositionProperty; 427 | positionPropertyArray: Cesium.PositionPropertyArray; 428 | postProcessStage: Cesium.PostProcessStage; 429 | postProcessStageCollection: Cesium.PostProcessStageCollection; 430 | postProcessStageComposite: Cesium.PostProcessStageComposite; 431 | postProcessStageLibrary: Cesium.PostProcessStageLibrary; 432 | postProcessStageSampleMode: Cesium.PostProcessStageSampleMode; 433 | postProcessStageTextureCache: Cesium.PostProcessStageTextureCache; 434 | primitive: Cesium.Primitive; 435 | primitiveCollection: Cesium.PrimitiveCollection; 436 | primitivePipeline: Cesium.PrimitivePipeline; 437 | primitiveState: Cesium.PrimitiveState; 438 | primitiveType: Cesium.PrimitiveType; 439 | projectionPicker: Cesium.ProjectionPicker; 440 | projectionPickerViewModel: Cesium.ProjectionPickerViewModel; 441 | property: Cesium.Property; 442 | propertyArray: Cesium.PropertyArray; 443 | propertyBag: Cesium.PropertyBag; 444 | providerViewModel: Cesium.ProviderViewModel; 445 | proxy: Cesium.Proxy; 446 | quadraticRealPolynomial: Cesium.QuadraticRealPolynomial; 447 | quadtreeOccluders: Cesium.QuadtreeOccluders; 448 | quadtreePrimitive: Cesium.QuadtreePrimitive; 449 | quadtreeTile: Cesium.QuadtreeTile; 450 | quadtreeTileLoadState: Cesium.QuadtreeTileLoadState; 451 | quadtreeTileProvider: Cesium.QuadtreeTileProvider; 452 | quantizedMeshTerrainData: Cesium.QuantizedMeshTerrainData; 453 | quarticRealPolynomial: Cesium.QuarticRealPolynomial; 454 | quaternion: Cesium.Quaternion; 455 | quaternionSpline: Cesium.QuaternionSpline; 456 | queue: Cesium.Queue; 457 | ray: Cesium.Ray; 458 | rectangle: Cesium.Rectangle; 459 | rectangleCollisionChecker: Cesium.RectangleCollisionChecker; 460 | rectangleGeometry: Cesium.RectangleGeometry; 461 | rectangleGeometryLibrary: Cesium.RectangleGeometryLibrary; 462 | rectangleGeometryUpdater: Cesium.RectangleGeometryUpdater; 463 | rectangleGraphics: Cesium.RectangleGraphics; 464 | rectangleOutlineGeometry: Cesium.RectangleOutlineGeometry; 465 | referenceFrame: Cesium.ReferenceFrame; 466 | referenceProperty: Cesium.ReferenceProperty; 467 | renderState: Cesium.RenderState; 468 | renderbuffer: Cesium.Renderbuffer; 469 | renderbufferFormat: Cesium.RenderbufferFormat; 470 | request: Cesium.Request; 471 | requestErrorEvent: Cesium.RequestErrorEvent; 472 | requestScheduler: Cesium.RequestScheduler; 473 | requestState: Cesium.RequestState; 474 | requestType: Cesium.RequestType; 475 | resource: Cesium.Resource; 476 | rotation: Cesium.Rotation; 477 | runtimeError: Cesium.RuntimeError; 478 | sdfSettings: Cesium.SDFSettings; 479 | sampledPositionProperty: Cesium.SampledPositionProperty; 480 | sampledProperty: Cesium.SampledProperty; 481 | sampler: Cesium.Sampler; 482 | scaledPositionProperty: Cesium.ScaledPositionProperty; 483 | scene: Cesium.Scene; 484 | sceneFramebuffer: Cesium.SceneFramebuffer; 485 | sceneMode: Cesium.SceneMode; 486 | sceneModePicker: Cesium.SceneModePicker; 487 | sceneModePickerViewModel: Cesium.SceneModePickerViewModel; 488 | sceneTransforms: Cesium.SceneTransforms; 489 | sceneTransitioner: Cesium.SceneTransitioner; 490 | screenSpaceCameraController: Cesium.ScreenSpaceCameraController; 491 | screenSpaceEventHandler: Cesium.ScreenSpaceEventHandler; 492 | screenSpaceEventType: Cesium.ScreenSpaceEventType; 493 | selectionIndicator: Cesium.SelectionIndicator; 494 | selectionIndicatorViewModel: Cesium.SelectionIndicatorViewModel; 495 | shaderCache: Cesium.ShaderCache; 496 | shaderProgram: Cesium.ShaderProgram; 497 | shaderSource: Cesium.ShaderSource; 498 | shadowMap: Cesium.ShadowMap; 499 | shadowMapShader: Cesium.ShadowMapShader; 500 | shadowMode: Cesium.ShadowMode; 501 | shadowVolumeAppearance: Cesium.ShadowVolumeAppearance; 502 | showGeometryInstanceAttribute: Cesium.ShowGeometryInstanceAttribute; 503 | simon1994PlanetaryPositions: Cesium.Simon1994PlanetaryPositions; 504 | simplePolylineGeometry: Cesium.SimplePolylineGeometry; 505 | singleTileImageryProvider: Cesium.SingleTileImageryProvider; 506 | skyAtmosphere: Cesium.SkyAtmosphere; 507 | skyBox: Cesium.SkyBox; 508 | sphereEmitter: Cesium.SphereEmitter; 509 | sphereGeometry: Cesium.SphereGeometry; 510 | sphereOutlineGeometry: Cesium.SphereOutlineGeometry; 511 | spherical: Cesium.Spherical; 512 | spline: Cesium.Spline; 513 | staticGeometryColorBatch: Cesium.StaticGeometryColorBatch; 514 | staticGeometryPerMaterialBatch: Cesium.StaticGeometryPerMaterialBatch; 515 | staticGroundGeometryColorBatch: Cesium.StaticGroundGeometryColorBatch; 516 | staticGroundGeometryPerMaterialBatch: Cesium.StaticGroundGeometryPerMaterialBatch; 517 | staticGroundPolylinePerMaterialBatch: Cesium.StaticGroundPolylinePerMaterialBatch; 518 | staticOutlineGeometryBatch: Cesium.StaticOutlineGeometryBatch; 519 | stencilConstants: Cesium.StencilConstants; 520 | stencilFunction: Cesium.StencilFunction; 521 | stencilOperation: Cesium.StencilOperation; 522 | stripeMaterialProperty: Cesium.StripeMaterialProperty; 523 | stripeOrientation: Cesium.StripeOrientation; 524 | styleExpression: Cesium.StyleExpression; 525 | sun: Cesium.Sun; 526 | sunLight: Cesium.SunLight; 527 | sunPostProcess: Cesium.SunPostProcess; 528 | svgPathBindingHandler: Cesium.SvgPathBindingHandler; 529 | taskProcessor: Cesium.TaskProcessor; 530 | terrainData: Cesium.TerrainData; 531 | terrainEncoding: Cesium.TerrainEncoding; 532 | terrainFillMesh: Cesium.TerrainFillMesh; 533 | terrainMesh: Cesium.TerrainMesh; 534 | terrainOffsetProperty: Cesium.TerrainOffsetProperty; 535 | terrainProvider: Cesium.TerrainProvider; 536 | terrainQuantization: Cesium.TerrainQuantization; 537 | terrainState: Cesium.TerrainState; 538 | texture: Cesium.Texture; 539 | textureAtlas: Cesium.TextureAtlas; 540 | textureCache: Cesium.TextureCache; 541 | textureMagnificationFilter: Cesium.TextureMagnificationFilter; 542 | textureMinificationFilter: Cesium.TextureMinificationFilter; 543 | textureWrap: Cesium.TextureWrap; 544 | tileAvailability: Cesium.TileAvailability; 545 | tileBoundingRegion: Cesium.TileBoundingRegion; 546 | tileBoundingSphere: Cesium.TileBoundingSphere; 547 | tileBoundingVolume: Cesium.TileBoundingVolume; 548 | tileCoordinatesImageryProvider: Cesium.TileCoordinatesImageryProvider; 549 | tileDiscardPolicy: Cesium.TileDiscardPolicy; 550 | tileEdge: Cesium.TileEdge; 551 | tileImagery: Cesium.TileImagery; 552 | tileMapServiceImageryProvider: Cesium.TileMapServiceImageryProvider; 553 | tileOrientedBoundingBox: Cesium.TileOrientedBoundingBox; 554 | tileProviderError: Cesium.TileProviderError; 555 | tileReplacementQueue: Cesium.TileReplacementQueue; 556 | tileSelectionResult: Cesium.TileSelectionResult; 557 | tileState: Cesium.TileState; 558 | tileset3DTileContent: Cesium.Tileset3DTileContent; 559 | tilingScheme: Cesium.TilingScheme; 560 | timeConstants: Cesium.TimeConstants; 561 | timeDynamicImagery: Cesium.TimeDynamicImagery; 562 | timeDynamicPointCloud: Cesium.TimeDynamicPointCloud; 563 | timeInterval: Cesium.TimeInterval; 564 | timeIntervalCollection: Cesium.TimeIntervalCollection; 565 | timeIntervalCollectionPositionProperty: Cesium.TimeIntervalCollectionPositionProperty; 566 | timeIntervalCollectionProperty: Cesium.TimeIntervalCollectionProperty; 567 | timeStandard: Cesium.TimeStandard; 568 | timeline: Cesium.Timeline; 569 | timelineHighlightRange: Cesium.TimelineHighlightRange; 570 | timelineTrack: Cesium.TimelineTrack; 571 | tipsify: Cesium.Tipsify; 572 | toggleButtonViewModel: Cesium.ToggleButtonViewModel; 573 | tonemapper: Cesium.Tonemapper; 574 | transforms: Cesium.Transforms; 575 | translationRotationScale: Cesium.TranslationRotationScale; 576 | tridiagonalSystemSolver: Cesium.TridiagonalSystemSolver; 577 | trustedServers: Cesium.TrustedServers; 578 | tween: Cesium.Tween; 579 | tweenCollection: Cesium.TweenCollection; 580 | uniformState: Cesium.UniformState; 581 | uri: Cesium.Uri; 582 | urlTemplateImageryProvider: Cesium.UrlTemplateImageryProvider; 583 | version: Cesium.VERSION; 584 | vrButton: Cesium.VRButton; 585 | vrButtonViewModel: Cesium.VRButtonViewModel; 586 | vrTheWorldTerrainProvider: Cesium.VRTheWorldTerrainProvider; 587 | vector3DTileBatch: Cesium.Vector3DTileBatch; 588 | vector3DTileContent: Cesium.Vector3DTileContent; 589 | vector3DTileGeometry: Cesium.Vector3DTileGeometry; 590 | vector3DTilePoints: Cesium.Vector3DTilePoints; 591 | vector3DTilePolygons: Cesium.Vector3DTilePolygons; 592 | vector3DTilePolylines: Cesium.Vector3DTilePolylines; 593 | vector3DTilePrimitive: Cesium.Vector3DTilePrimitive; 594 | velocityOrientationProperty: Cesium.VelocityOrientationProperty; 595 | velocityVectorProperty: Cesium.VelocityVectorProperty; 596 | vertexArray: Cesium.VertexArray; 597 | vertexArrayFacade: Cesium.VertexArrayFacade; 598 | vertexFormat: Cesium.VertexFormat; 599 | verticalOrigin: Cesium.VerticalOrigin; 600 | videoSynchronizer: Cesium.VideoSynchronizer; 601 | view: Cesium.View; 602 | viewer: Cesium.Viewer; 603 | viewportQuad: Cesium.ViewportQuad; 604 | visibility: Cesium.Visibility; 605 | visualizer: Cesium.Visualizer; 606 | wallGeometry: Cesium.WallGeometry; 607 | wallGeometryLibrary: Cesium.WallGeometryLibrary; 608 | wallGeometryUpdater: Cesium.WallGeometryUpdater; 609 | wallGraphics: Cesium.WallGraphics; 610 | wallOutlineGeometry: Cesium.WallOutlineGeometry; 611 | webGlConstants: Cesium.WebGLConstants; 612 | webMapServiceImageryProvider: Cesium.WebMapServiceImageryProvider; 613 | webMapTileServiceImageryProvider: Cesium.WebMapTileServiceImageryProvider; 614 | webMercatorProjection: Cesium.WebMercatorProjection; 615 | webMercatorTilingScheme: Cesium.WebMercatorTilingScheme; 616 | weightSpline: Cesium.WeightSpline; 617 | windingOrder: Cesium.WindingOrder; 618 | }; 619 | 620 | export type MappingTypeofExport = { 621 | animation: typeof Cesium["Animation"]; 622 | animationViewModel: typeof Cesium["AnimationViewModel"]; 623 | appearance: typeof Cesium["Appearance"]; 624 | approximateTerrainHeights: typeof Cesium["ApproximateTerrainHeights"]; 625 | arcGisTiledElevationTerrainProvider: typeof Cesium["ArcGISTiledElevationTerrainProvider"]; 626 | arcGisMapServerImageryProvider: typeof Cesium["ArcGisMapServerImageryProvider"]; 627 | arcType: typeof Cesium["ArcType"]; 628 | associativeArray: typeof Cesium["AssociativeArray"]; 629 | attributeCompression: typeof Cesium["AttributeCompression"]; 630 | attributeType: typeof Cesium["AttributeType"]; 631 | autoExposure: typeof Cesium["AutoExposure"]; 632 | autolinker: typeof Cesium["Autolinker"]; 633 | automaticUniforms: typeof Cesium["AutomaticUniforms"]; 634 | axis: typeof Cesium["Axis"]; 635 | axisAlignedBoundingBox: typeof Cesium["AxisAlignedBoundingBox"]; 636 | baseLayerPicker: typeof Cesium["BaseLayerPicker"]; 637 | baseLayerPickerViewModel: typeof Cesium["BaseLayerPickerViewModel"]; 638 | batchTable: typeof Cesium["BatchTable"]; 639 | batched3DModel3DTileContent: typeof Cesium["Batched3DModel3DTileContent"]; 640 | billboard: typeof Cesium["Billboard"]; 641 | billboardCollection: typeof Cesium["BillboardCollection"]; 642 | billboardGraphics: typeof Cesium["BillboardGraphics"]; 643 | billboardVisualizer: typeof Cesium["BillboardVisualizer"]; 644 | bingMapsApi: typeof Cesium["BingMapsApi"]; 645 | bingMapsGeocoderService: typeof Cesium["BingMapsGeocoderService"]; 646 | bingMapsImageryProvider: typeof Cesium["BingMapsImageryProvider"]; 647 | bingMapsStyle: typeof Cesium["BingMapsStyle"]; 648 | blendEquation: typeof Cesium["BlendEquation"]; 649 | blendFunction: typeof Cesium["BlendFunction"]; 650 | blendOption: typeof Cesium["BlendOption"]; 651 | blendingState: typeof Cesium["BlendingState"]; 652 | boundingRectangle: typeof Cesium["BoundingRectangle"]; 653 | boundingSphere: typeof Cesium["BoundingSphere"]; 654 | boundingSphereState: typeof Cesium["BoundingSphereState"]; 655 | boxEmitter: typeof Cesium["BoxEmitter"]; 656 | boxGeometry: typeof Cesium["BoxGeometry"]; 657 | boxGeometryUpdater: typeof Cesium["BoxGeometryUpdater"]; 658 | boxGraphics: typeof Cesium["BoxGraphics"]; 659 | boxOutlineGeometry: typeof Cesium["BoxOutlineGeometry"]; 660 | brdfLutGenerator: typeof Cesium["BrdfLutGenerator"]; 661 | buffer: typeof Cesium["Buffer"]; 662 | bufferUsage: typeof Cesium["BufferUsage"]; 663 | callbackProperty: typeof Cesium["CallbackProperty"]; 664 | camera: typeof Cesium["Camera"]; 665 | cameraEventAggregator: typeof Cesium["CameraEventAggregator"]; 666 | cameraEventType: typeof Cesium["CameraEventType"]; 667 | cameraFlightPath: typeof Cesium["CameraFlightPath"]; 668 | cartesian2: typeof Cesium["Cartesian2"]; 669 | cartesian3: typeof Cesium["Cartesian3"]; 670 | cartesian4: typeof Cesium["Cartesian4"]; 671 | cartographic: typeof Cesium["Cartographic"]; 672 | cartographicGeocoderService: typeof Cesium["CartographicGeocoderService"]; 673 | catmullRomSpline: typeof Cesium["CatmullRomSpline"]; 674 | cesium3DTile: typeof Cesium["Cesium3DTile"]; 675 | cesium3DTileBatchTable: typeof Cesium["Cesium3DTileBatchTable"]; 676 | cesium3DTileColorBlendMode: typeof Cesium["Cesium3DTileColorBlendMode"]; 677 | cesium3DTileContent: typeof Cesium["Cesium3DTileContent"]; 678 | cesium3DTileContentFactory: typeof Cesium["Cesium3DTileContentFactory"]; 679 | cesium3DTileContentState: typeof Cesium["Cesium3DTileContentState"]; 680 | cesium3DTileFeature: typeof Cesium["Cesium3DTileFeature"]; 681 | cesium3DTileFeatureTable: typeof Cesium["Cesium3DTileFeatureTable"]; 682 | cesium3DTileOptimizationHint: typeof Cesium["Cesium3DTileOptimizationHint"]; 683 | cesium3DTileOptimizations: typeof Cesium["Cesium3DTileOptimizations"]; 684 | cesium3DTilePass: typeof Cesium["Cesium3DTilePass"]; 685 | cesium3DTilePassState: typeof Cesium["Cesium3DTilePassState"]; 686 | cesium3DTilePointFeature: typeof Cesium["Cesium3DTilePointFeature"]; 687 | cesium3DTileRefine: typeof Cesium["Cesium3DTileRefine"]; 688 | cesium3DTileStyle: typeof Cesium["Cesium3DTileStyle"]; 689 | cesium3DTileStyleEngine: typeof Cesium["Cesium3DTileStyleEngine"]; 690 | cesium3DTilesInspector: typeof Cesium["Cesium3DTilesInspector"]; 691 | cesium3DTilesInspectorViewModel: typeof Cesium["Cesium3DTilesInspectorViewModel"]; 692 | cesium3DTileset: typeof Cesium["Cesium3DTileset"]; 693 | cesium3DTilesetCache: typeof Cesium["Cesium3DTilesetCache"]; 694 | cesium3DTilesetGraphics: typeof Cesium["Cesium3DTilesetGraphics"]; 695 | cesium3DTilesetHeatmap: typeof Cesium["Cesium3DTilesetHeatmap"]; 696 | cesium3DTilesetMostDetailedTraversal: typeof Cesium["Cesium3DTilesetMostDetailedTraversal"]; 697 | cesium3DTilesetStatistics: typeof Cesium["Cesium3DTilesetStatistics"]; 698 | cesium3DTilesetTraversal: typeof Cesium["Cesium3DTilesetTraversal"]; 699 | cesium3DTilesetVisualizer: typeof Cesium["Cesium3DTilesetVisualizer"]; 700 | cesiumInspector: typeof Cesium["CesiumInspector"]; 701 | cesiumInspectorViewModel: typeof Cesium["CesiumInspectorViewModel"]; 702 | cesiumTerrainProvider: typeof Cesium["CesiumTerrainProvider"]; 703 | cesiumWidget: typeof Cesium["CesiumWidget"]; 704 | check: typeof Cesium["Check"]; 705 | checkerboardMaterialProperty: typeof Cesium["CheckerboardMaterialProperty"]; 706 | circleEmitter: typeof Cesium["CircleEmitter"]; 707 | circleGeometry: typeof Cesium["CircleGeometry"]; 708 | circleOutlineGeometry: typeof Cesium["CircleOutlineGeometry"]; 709 | classificationModel: typeof Cesium["ClassificationModel"]; 710 | classificationPrimitive: typeof Cesium["ClassificationPrimitive"]; 711 | classificationType: typeof Cesium["ClassificationType"]; 712 | clearCommand: typeof Cesium["ClearCommand"]; 713 | clippingPlane: typeof Cesium["ClippingPlane"]; 714 | clippingPlaneCollection: typeof Cesium["ClippingPlaneCollection"]; 715 | clock: typeof Cesium["Clock"]; 716 | clockRange: typeof Cesium["ClockRange"]; 717 | clockStep: typeof Cesium["ClockStep"]; 718 | clockViewModel: typeof Cesium["ClockViewModel"]; 719 | color: typeof Cesium["Color"]; 720 | colorBlendMode: typeof Cesium["ColorBlendMode"]; 721 | colorGeometryInstanceAttribute: typeof Cesium["ColorGeometryInstanceAttribute"]; 722 | colorMaterialProperty: typeof Cesium["ColorMaterialProperty"]; 723 | command: typeof Cesium["Command"]; 724 | componentDatatype: typeof Cesium["ComponentDatatype"]; 725 | composite3DTileContent: typeof Cesium["Composite3DTileContent"]; 726 | compositeEntityCollection: typeof Cesium["CompositeEntityCollection"]; 727 | compositeMaterialProperty: typeof Cesium["CompositeMaterialProperty"]; 728 | compositePositionProperty: typeof Cesium["CompositePositionProperty"]; 729 | compositeProperty: typeof Cesium["CompositeProperty"]; 730 | compressedTextureBuffer: typeof Cesium["CompressedTextureBuffer"]; 731 | computeCommand: typeof Cesium["ComputeCommand"]; 732 | computeEngine: typeof Cesium["ComputeEngine"]; 733 | conditionsExpression: typeof Cesium["ConditionsExpression"]; 734 | coneEmitter: typeof Cesium["ConeEmitter"]; 735 | constantPositionProperty: typeof Cesium["ConstantPositionProperty"]; 736 | constantProperty: typeof Cesium["ConstantProperty"]; 737 | context: typeof Cesium["Context"]; 738 | contextLimits: typeof Cesium["ContextLimits"]; 739 | coplanarPolygonGeometry: typeof Cesium["CoplanarPolygonGeometry"]; 740 | coplanarPolygonGeometryLibrary: typeof Cesium["CoplanarPolygonGeometryLibrary"]; 741 | coplanarPolygonOutlineGeometry: typeof Cesium["CoplanarPolygonOutlineGeometry"]; 742 | cornerType: typeof Cesium["CornerType"]; 743 | corridorGeometry: typeof Cesium["CorridorGeometry"]; 744 | corridorGeometryLibrary: typeof Cesium["CorridorGeometryLibrary"]; 745 | corridorGeometryUpdater: typeof Cesium["CorridorGeometryUpdater"]; 746 | corridorGraphics: typeof Cesium["CorridorGraphics"]; 747 | corridorOutlineGeometry: typeof Cesium["CorridorOutlineGeometry"]; 748 | credit: typeof Cesium["Credit"]; 749 | creditDisplay: typeof Cesium["CreditDisplay"]; 750 | cubeMap: typeof Cesium["CubeMap"]; 751 | cubeMapFace: typeof Cesium["CubeMapFace"]; 752 | cubicRealPolynomial: typeof Cesium["CubicRealPolynomial"]; 753 | cullFace: typeof Cesium["CullFace"]; 754 | cullingVolume: typeof Cesium["CullingVolume"]; 755 | customDataSource: typeof Cesium["CustomDataSource"]; 756 | cylinderGeometry: typeof Cesium["CylinderGeometry"]; 757 | cylinderGeometryLibrary: typeof Cesium["CylinderGeometryLibrary"]; 758 | cylinderGeometryUpdater: typeof Cesium["CylinderGeometryUpdater"]; 759 | cylinderGraphics: typeof Cesium["CylinderGraphics"]; 760 | cylinderOutlineGeometry: typeof Cesium["CylinderOutlineGeometry"]; 761 | czmlDataSource: typeof Cesium["CzmlDataSource"]; 762 | dataSource: typeof Cesium["DataSource"]; 763 | dataSourceClock: typeof Cesium["DataSourceClock"]; 764 | dataSourceCollection: typeof Cesium["DataSourceCollection"]; 765 | dataSourceDisplay: typeof Cesium["DataSourceDisplay"]; 766 | debugAppearance: typeof Cesium["DebugAppearance"]; 767 | debugCameraPrimitive: typeof Cesium["DebugCameraPrimitive"]; 768 | debugModelMatrixPrimitive: typeof Cesium["DebugModelMatrixPrimitive"]; 769 | defaultProxy: typeof Cesium["DefaultProxy"]; 770 | depthFunction: typeof Cesium["DepthFunction"]; 771 | depthPlane: typeof Cesium["DepthPlane"]; 772 | derivedCommand: typeof Cesium["DerivedCommand"]; 773 | developerError: typeof Cesium["DeveloperError"]; 774 | deviceOrientationCameraController: typeof Cesium["DeviceOrientationCameraController"]; 775 | directionalLight: typeof Cesium["DirectionalLight"]; 776 | discardEmptyTileImagePolicy: typeof Cesium["DiscardEmptyTileImagePolicy"]; 777 | discardMissingTileImagePolicy: typeof Cesium["DiscardMissingTileImagePolicy"]; 778 | distanceDisplayCondition: typeof Cesium["DistanceDisplayCondition"]; 779 | distanceDisplayConditionGeometryInstanceAttribute: typeof Cesium["DistanceDisplayConditionGeometryInstanceAttribute"]; 780 | doublyLinkedList: typeof Cesium["DoublyLinkedList"]; 781 | dracoLoader: typeof Cesium["DracoLoader"]; 782 | drawCommand: typeof Cesium["DrawCommand"]; 783 | dynamicGeometryBatch: typeof Cesium["DynamicGeometryBatch"]; 784 | dynamicGeometryUpdater: typeof Cesium["DynamicGeometryUpdater"]; 785 | earthOrientationParameters: typeof Cesium["EarthOrientationParameters"]; 786 | earthOrientationParametersSample: typeof Cesium["EarthOrientationParametersSample"]; 787 | easingFunction: typeof Cesium["EasingFunction"]; 788 | ellipseGeometry: typeof Cesium["EllipseGeometry"]; 789 | ellipseGeometryLibrary: typeof Cesium["EllipseGeometryLibrary"]; 790 | ellipseGeometryUpdater: typeof Cesium["EllipseGeometryUpdater"]; 791 | ellipseGraphics: typeof Cesium["EllipseGraphics"]; 792 | ellipseOutlineGeometry: typeof Cesium["EllipseOutlineGeometry"]; 793 | ellipsoid: typeof Cesium["Ellipsoid"]; 794 | ellipsoidGeodesic: typeof Cesium["EllipsoidGeodesic"]; 795 | ellipsoidGeometry: typeof Cesium["EllipsoidGeometry"]; 796 | ellipsoidGeometryUpdater: typeof Cesium["EllipsoidGeometryUpdater"]; 797 | ellipsoidGraphics: typeof Cesium["EllipsoidGraphics"]; 798 | ellipsoidOutlineGeometry: typeof Cesium["EllipsoidOutlineGeometry"]; 799 | ellipsoidPrimitive: typeof Cesium["EllipsoidPrimitive"]; 800 | ellipsoidRhumbLine: typeof Cesium["EllipsoidRhumbLine"]; 801 | ellipsoidSurfaceAppearance: typeof Cesium["EllipsoidSurfaceAppearance"]; 802 | ellipsoidTangentPlane: typeof Cesium["EllipsoidTangentPlane"]; 803 | ellipsoidTerrainProvider: typeof Cesium["EllipsoidTerrainProvider"]; 804 | ellipsoidalOccluder: typeof Cesium["EllipsoidalOccluder"]; 805 | empty3DTileContent: typeof Cesium["Empty3DTileContent"]; 806 | encodedCartesian3: typeof Cesium["EncodedCartesian3"]; 807 | entity: typeof Cesium["Entity"]; 808 | entityCluster: typeof Cesium["EntityCluster"]; 809 | entityCollection: typeof Cesium["EntityCollection"]; 810 | entityView: typeof Cesium["EntityView"]; 811 | event: typeof Cesium["Event"]; 812 | eventHelper: typeof Cesium["EventHelper"]; 813 | expression: typeof Cesium["Expression"]; 814 | expressionNodeType: typeof Cesium["ExpressionNodeType"]; 815 | extrapolationType: typeof Cesium["ExtrapolationType"]; 816 | fxaa311: typeof Cesium["FXAA3_11"]; 817 | featureDetection: typeof Cesium["FeatureDetection"]; 818 | fog: typeof Cesium["Fog"]; 819 | forEach: typeof Cesium["ForEach"]; 820 | frameRateMonitor: typeof Cesium["FrameRateMonitor"]; 821 | frameState: typeof Cesium["FrameState"]; 822 | framebuffer: typeof Cesium["Framebuffer"]; 823 | frustumCommands: typeof Cesium["FrustumCommands"]; 824 | frustumGeometry: typeof Cesium["FrustumGeometry"]; 825 | frustumOutlineGeometry: typeof Cesium["FrustumOutlineGeometry"]; 826 | fullscreen: typeof Cesium["Fullscreen"]; 827 | fullscreenButton: typeof Cesium["FullscreenButton"]; 828 | fullscreenButtonViewModel: typeof Cesium["FullscreenButtonViewModel"]; 829 | geoJsonDataSource: typeof Cesium["GeoJsonDataSource"]; 830 | geocodeType: typeof Cesium["GeocodeType"]; 831 | geocoder: typeof Cesium["Geocoder"]; 832 | geocoderService: typeof Cesium["GeocoderService"]; 833 | geocoderViewModel: typeof Cesium["GeocoderViewModel"]; 834 | geographicProjection: typeof Cesium["GeographicProjection"]; 835 | geographicTilingScheme: typeof Cesium["GeographicTilingScheme"]; 836 | geometry: typeof Cesium["Geometry"]; 837 | geometry3DTileContent: typeof Cesium["Geometry3DTileContent"]; 838 | geometryAttribute: typeof Cesium["GeometryAttribute"]; 839 | geometryAttributes: typeof Cesium["GeometryAttributes"]; 840 | geometryInstance: typeof Cesium["GeometryInstance"]; 841 | geometryInstanceAttribute: typeof Cesium["GeometryInstanceAttribute"]; 842 | geometryOffsetAttribute: typeof Cesium["GeometryOffsetAttribute"]; 843 | geometryPipeline: typeof Cesium["GeometryPipeline"]; 844 | geometryType: typeof Cesium["GeometryType"]; 845 | geometryUpdater: typeof Cesium["GeometryUpdater"]; 846 | geometryVisualizer: typeof Cesium["GeometryVisualizer"]; 847 | getFeatureInfoFormat: typeof Cesium["GetFeatureInfoFormat"]; 848 | globe: typeof Cesium["Globe"]; 849 | globeDepth: typeof Cesium["GlobeDepth"]; 850 | globeSurfaceShaderSet: typeof Cesium["GlobeSurfaceShaderSet"]; 851 | globeSurfaceTile: typeof Cesium["GlobeSurfaceTile"]; 852 | globeSurfaceTileProvider: typeof Cesium["GlobeSurfaceTileProvider"]; 853 | globeTranslucency: typeof Cesium["GlobeTranslucency"]; 854 | globeTranslucencyFramebuffer: typeof Cesium["GlobeTranslucencyFramebuffer"]; 855 | globeTranslucencyState: typeof Cesium["GlobeTranslucencyState"]; 856 | googleEarthEnterpriseImageryProvider: typeof Cesium["GoogleEarthEnterpriseImageryProvider"]; 857 | googleEarthEnterpriseMapsProvider: typeof Cesium["GoogleEarthEnterpriseMapsProvider"]; 858 | googleEarthEnterpriseMetadata: typeof Cesium["GoogleEarthEnterpriseMetadata"]; 859 | googleEarthEnterpriseTerrainData: typeof Cesium["GoogleEarthEnterpriseTerrainData"]; 860 | googleEarthEnterpriseTerrainProvider: typeof Cesium["GoogleEarthEnterpriseTerrainProvider"]; 861 | googleEarthEnterpriseTileInformation: typeof Cesium["GoogleEarthEnterpriseTileInformation"]; 862 | gregorianDate: typeof Cesium["GregorianDate"]; 863 | gridImageryProvider: typeof Cesium["GridImageryProvider"]; 864 | gridMaterialProperty: typeof Cesium["GridMaterialProperty"]; 865 | groundGeometryUpdater: typeof Cesium["GroundGeometryUpdater"]; 866 | groundPolylineGeometry: typeof Cesium["GroundPolylineGeometry"]; 867 | groundPolylinePrimitive: typeof Cesium["GroundPolylinePrimitive"]; 868 | groundPrimitive: typeof Cesium["GroundPrimitive"]; 869 | headingPitchRange: typeof Cesium["HeadingPitchRange"]; 870 | headingPitchRoll: typeof Cesium["HeadingPitchRoll"]; 871 | heap: typeof Cesium["Heap"]; 872 | heightReference: typeof Cesium["HeightReference"]; 873 | heightmapEncoding: typeof Cesium["HeightmapEncoding"]; 874 | heightmapTerrainData: typeof Cesium["HeightmapTerrainData"]; 875 | heightmapTessellator: typeof Cesium["HeightmapTessellator"]; 876 | hermitePolynomialApproximation: typeof Cesium["HermitePolynomialApproximation"]; 877 | hermiteSpline: typeof Cesium["HermiteSpline"]; 878 | homeButton: typeof Cesium["HomeButton"]; 879 | homeButtonViewModel: typeof Cesium["HomeButtonViewModel"]; 880 | horizontalOrigin: typeof Cesium["HorizontalOrigin"]; 881 | iau2000Orientation: typeof Cesium["Iau2000Orientation"]; 882 | iau2006XysData: typeof Cesium["Iau2006XysData"]; 883 | iau2006XysSample: typeof Cesium["Iau2006XysSample"]; 884 | iauOrientationAxes: typeof Cesium["IauOrientationAxes"]; 885 | iauOrientationParameters: typeof Cesium["IauOrientationParameters"]; 886 | imageMaterialProperty: typeof Cesium["ImageMaterialProperty"]; 887 | imagery: typeof Cesium["Imagery"]; 888 | imageryLayer: typeof Cesium["ImageryLayer"]; 889 | imageryLayerCollection: typeof Cesium["ImageryLayerCollection"]; 890 | imageryLayerFeatureInfo: typeof Cesium["ImageryLayerFeatureInfo"]; 891 | imageryProvider: typeof Cesium["ImageryProvider"]; 892 | imagerySplitDirection: typeof Cesium["ImagerySplitDirection"]; 893 | imageryState: typeof Cesium["ImageryState"]; 894 | indexDatatype: typeof Cesium["IndexDatatype"]; 895 | infoBox: typeof Cesium["InfoBox"]; 896 | infoBoxViewModel: typeof Cesium["InfoBoxViewModel"]; 897 | inspectorShared: typeof Cesium["InspectorShared"]; 898 | instanced3DModel3DTileContent: typeof Cesium["Instanced3DModel3DTileContent"]; 899 | interpolationAlgorithm: typeof Cesium["InterpolationAlgorithm"]; 900 | intersect: typeof Cesium["Intersect"]; 901 | intersectionTests: typeof Cesium["IntersectionTests"]; 902 | intersections2D: typeof Cesium["Intersections2D"]; 903 | interval: typeof Cesium["Interval"]; 904 | invertClassification: typeof Cesium["InvertClassification"]; 905 | ion: typeof Cesium["Ion"]; 906 | ionGeocoderService: typeof Cesium["IonGeocoderService"]; 907 | ionImageryProvider: typeof Cesium["IonImageryProvider"]; 908 | ionResource: typeof Cesium["IonResource"]; 909 | ionWorldImageryStyle: typeof Cesium["IonWorldImageryStyle"]; 910 | iso8601: typeof Cesium["Iso8601"]; 911 | jobScheduler: typeof Cesium["JobScheduler"]; 912 | jobType: typeof Cesium["JobType"]; 913 | julianDate: typeof Cesium["JulianDate"]; 914 | keyboardEventModifier: typeof Cesium["KeyboardEventModifier"]; 915 | kmlCamera: typeof Cesium["KmlCamera"]; 916 | kmlDataSource: typeof Cesium["KmlDataSource"]; 917 | kmlLookAt: typeof Cesium["KmlLookAt"]; 918 | kmlTour: typeof Cesium["KmlTour"]; 919 | kmlTourFlyTo: typeof Cesium["KmlTourFlyTo"]; 920 | kmlTourWait: typeof Cesium["KmlTourWait"]; 921 | label: typeof Cesium["Label"]; 922 | labelCollection: typeof Cesium["LabelCollection"]; 923 | labelGraphics: typeof Cesium["LabelGraphics"]; 924 | labelStyle: typeof Cesium["LabelStyle"]; 925 | labelVisualizer: typeof Cesium["LabelVisualizer"]; 926 | lagrangePolynomialApproximation: typeof Cesium["LagrangePolynomialApproximation"]; 927 | leapSecond: typeof Cesium["LeapSecond"]; 928 | lercDecode: typeof Cesium["LercDecode"]; 929 | light: typeof Cesium["Light"]; 930 | linearApproximation: typeof Cesium["LinearApproximation"]; 931 | linearSpline: typeof Cesium["LinearSpline"]; 932 | managedArray: typeof Cesium["ManagedArray"]; 933 | mapMode2D: typeof Cesium["MapMode2D"]; 934 | mapProjection: typeof Cesium["MapProjection"]; 935 | mapboxApi: typeof Cesium["MapboxApi"]; 936 | mapboxImageryProvider: typeof Cesium["MapboxImageryProvider"]; 937 | mapboxStyleImageryProvider: typeof Cesium["MapboxStyleImageryProvider"]; 938 | material: typeof Cesium["Material"]; 939 | materialAppearance: typeof Cesium["MaterialAppearance"]; 940 | materialProperty: typeof Cesium["MaterialProperty"]; 941 | math: typeof Cesium["Math"]; 942 | matrix2: typeof Cesium["Matrix2"]; 943 | matrix3: typeof Cesium["Matrix3"]; 944 | matrix4: typeof Cesium["Matrix4"]; 945 | mipmapHint: typeof Cesium["MipmapHint"]; 946 | model: typeof Cesium["Model"]; 947 | modelAnimation: typeof Cesium["ModelAnimation"]; 948 | modelAnimationCache: typeof Cesium["ModelAnimationCache"]; 949 | modelAnimationCollection: typeof Cesium["ModelAnimationCollection"]; 950 | modelAnimationLoop: typeof Cesium["ModelAnimationLoop"]; 951 | modelAnimationState: typeof Cesium["ModelAnimationState"]; 952 | modelGraphics: typeof Cesium["ModelGraphics"]; 953 | modelInstance: typeof Cesium["ModelInstance"]; 954 | modelInstanceCollection: typeof Cesium["ModelInstanceCollection"]; 955 | modelLoadResources: typeof Cesium["ModelLoadResources"]; 956 | modelMaterial: typeof Cesium["ModelMaterial"]; 957 | modelMesh: typeof Cesium["ModelMesh"]; 958 | modelNode: typeof Cesium["ModelNode"]; 959 | modelOutlineLoader: typeof Cesium["ModelOutlineLoader"]; 960 | modelUtility: typeof Cesium["ModelUtility"]; 961 | modelVisualizer: typeof Cesium["ModelVisualizer"]; 962 | moon: typeof Cesium["Moon"]; 963 | navigationHelpButton: typeof Cesium["NavigationHelpButton"]; 964 | navigationHelpButtonViewModel: typeof Cesium["NavigationHelpButtonViewModel"]; 965 | nearFarScalar: typeof Cesium["NearFarScalar"]; 966 | neverTileDiscardPolicy: typeof Cesium["NeverTileDiscardPolicy"]; 967 | noSleep: typeof Cesium["NoSleep"]; 968 | nodeTransformationProperty: typeof Cesium["NodeTransformationProperty"]; 969 | oit: typeof Cesium["OIT"]; 970 | occluder: typeof Cesium["Occluder"]; 971 | octahedralProjectedCubeMap: typeof Cesium["OctahedralProjectedCubeMap"]; 972 | offsetGeometryInstanceAttribute: typeof Cesium["OffsetGeometryInstanceAttribute"]; 973 | openCageGeocoderService: typeof Cesium["OpenCageGeocoderService"]; 974 | openStreetMapImageryProvider: typeof Cesium["OpenStreetMapImageryProvider"]; 975 | orderedGroundPrimitiveCollection: typeof Cesium["OrderedGroundPrimitiveCollection"]; 976 | orientedBoundingBox: typeof Cesium["OrientedBoundingBox"]; 977 | orthographicFrustum: typeof Cesium["OrthographicFrustum"]; 978 | orthographicOffCenterFrustum: typeof Cesium["OrthographicOffCenterFrustum"]; 979 | packable: typeof Cesium["Packable"]; 980 | packableForInterpolation: typeof Cesium["PackableForInterpolation"]; 981 | particle: typeof Cesium["Particle"]; 982 | particleBurst: typeof Cesium["ParticleBurst"]; 983 | particleEmitter: typeof Cesium["ParticleEmitter"]; 984 | particleSystem: typeof Cesium["ParticleSystem"]; 985 | pass: typeof Cesium["Pass"]; 986 | passState: typeof Cesium["PassState"]; 987 | pathGraphics: typeof Cesium["PathGraphics"]; 988 | pathVisualizer: typeof Cesium["PathVisualizer"]; 989 | peliasGeocoderService: typeof Cesium["PeliasGeocoderService"]; 990 | perInstanceColorAppearance: typeof Cesium["PerInstanceColorAppearance"]; 991 | performanceDisplay: typeof Cesium["PerformanceDisplay"]; 992 | performanceWatchdog: typeof Cesium["PerformanceWatchdog"]; 993 | performanceWatchdogViewModel: typeof Cesium["PerformanceWatchdogViewModel"]; 994 | perspectiveFrustum: typeof Cesium["PerspectiveFrustum"]; 995 | perspectiveOffCenterFrustum: typeof Cesium["PerspectiveOffCenterFrustum"]; 996 | pickDepth: typeof Cesium["PickDepth"]; 997 | pickDepthFramebuffer: typeof Cesium["PickDepthFramebuffer"]; 998 | pickFramebuffer: typeof Cesium["PickFramebuffer"]; 999 | picking: typeof Cesium["Picking"]; 1000 | pinBuilder: typeof Cesium["PinBuilder"]; 1001 | pixelDatatype: typeof Cesium["PixelDatatype"]; 1002 | pixelFormat: typeof Cesium["PixelFormat"]; 1003 | plane: typeof Cesium["Plane"]; 1004 | planeGeometry: typeof Cesium["PlaneGeometry"]; 1005 | planeGeometryUpdater: typeof Cesium["PlaneGeometryUpdater"]; 1006 | planeGraphics: typeof Cesium["PlaneGraphics"]; 1007 | planeOutlineGeometry: typeof Cesium["PlaneOutlineGeometry"]; 1008 | pointCloud: typeof Cesium["PointCloud"]; 1009 | pointCloud3DTileContent: typeof Cesium["PointCloud3DTileContent"]; 1010 | pointCloudEyeDomeLighting: typeof Cesium["PointCloudEyeDomeLighting"]; 1011 | pointCloudShading: typeof Cesium["PointCloudShading"]; 1012 | pointGraphics: typeof Cesium["PointGraphics"]; 1013 | pointPrimitive: typeof Cesium["PointPrimitive"]; 1014 | pointPrimitiveCollection: typeof Cesium["PointPrimitiveCollection"]; 1015 | pointVisualizer: typeof Cesium["PointVisualizer"]; 1016 | polygonGeometry: typeof Cesium["PolygonGeometry"]; 1017 | polygonGeometryLibrary: typeof Cesium["PolygonGeometryLibrary"]; 1018 | polygonGeometryUpdater: typeof Cesium["PolygonGeometryUpdater"]; 1019 | polygonGraphics: typeof Cesium["PolygonGraphics"]; 1020 | polygonHierarchy: typeof Cesium["PolygonHierarchy"]; 1021 | polygonOutlineGeometry: typeof Cesium["PolygonOutlineGeometry"]; 1022 | polygonPipeline: typeof Cesium["PolygonPipeline"]; 1023 | polyline: typeof Cesium["Polyline"]; 1024 | polylineArrowMaterialProperty: typeof Cesium["PolylineArrowMaterialProperty"]; 1025 | polylineCollection: typeof Cesium["PolylineCollection"]; 1026 | polylineColorAppearance: typeof Cesium["PolylineColorAppearance"]; 1027 | polylineDashMaterialProperty: typeof Cesium["PolylineDashMaterialProperty"]; 1028 | polylineGeometry: typeof Cesium["PolylineGeometry"]; 1029 | polylineGeometryUpdater: typeof Cesium["PolylineGeometryUpdater"]; 1030 | polylineGlowMaterialProperty: typeof Cesium["PolylineGlowMaterialProperty"]; 1031 | polylineGraphics: typeof Cesium["PolylineGraphics"]; 1032 | polylineMaterialAppearance: typeof Cesium["PolylineMaterialAppearance"]; 1033 | polylineOutlineMaterialProperty: typeof Cesium["PolylineOutlineMaterialProperty"]; 1034 | polylinePipeline: typeof Cesium["PolylinePipeline"]; 1035 | polylineVisualizer: typeof Cesium["PolylineVisualizer"]; 1036 | polylineVolumeGeometry: typeof Cesium["PolylineVolumeGeometry"]; 1037 | polylineVolumeGeometryLibrary: typeof Cesium["PolylineVolumeGeometryLibrary"]; 1038 | polylineVolumeGeometryUpdater: typeof Cesium["PolylineVolumeGeometryUpdater"]; 1039 | polylineVolumeGraphics: typeof Cesium["PolylineVolumeGraphics"]; 1040 | polylineVolumeOutlineGeometry: typeof Cesium["PolylineVolumeOutlineGeometry"]; 1041 | positionProperty: typeof Cesium["PositionProperty"]; 1042 | positionPropertyArray: typeof Cesium["PositionPropertyArray"]; 1043 | postProcessStage: typeof Cesium["PostProcessStage"]; 1044 | postProcessStageCollection: typeof Cesium["PostProcessStageCollection"]; 1045 | postProcessStageComposite: typeof Cesium["PostProcessStageComposite"]; 1046 | postProcessStageLibrary: typeof Cesium["PostProcessStageLibrary"]; 1047 | postProcessStageSampleMode: typeof Cesium["PostProcessStageSampleMode"]; 1048 | postProcessStageTextureCache: typeof Cesium["PostProcessStageTextureCache"]; 1049 | primitive: typeof Cesium["Primitive"]; 1050 | primitiveCollection: typeof Cesium["PrimitiveCollection"]; 1051 | primitivePipeline: typeof Cesium["PrimitivePipeline"]; 1052 | primitiveState: typeof Cesium["PrimitiveState"]; 1053 | primitiveType: typeof Cesium["PrimitiveType"]; 1054 | projectionPicker: typeof Cesium["ProjectionPicker"]; 1055 | projectionPickerViewModel: typeof Cesium["ProjectionPickerViewModel"]; 1056 | property: typeof Cesium["Property"]; 1057 | propertyArray: typeof Cesium["PropertyArray"]; 1058 | propertyBag: typeof Cesium["PropertyBag"]; 1059 | providerViewModel: typeof Cesium["ProviderViewModel"]; 1060 | proxy: typeof Cesium["Proxy"]; 1061 | quadraticRealPolynomial: typeof Cesium["QuadraticRealPolynomial"]; 1062 | quadtreeOccluders: typeof Cesium["QuadtreeOccluders"]; 1063 | quadtreePrimitive: typeof Cesium["QuadtreePrimitive"]; 1064 | quadtreeTile: typeof Cesium["QuadtreeTile"]; 1065 | quadtreeTileLoadState: typeof Cesium["QuadtreeTileLoadState"]; 1066 | quadtreeTileProvider: typeof Cesium["QuadtreeTileProvider"]; 1067 | quantizedMeshTerrainData: typeof Cesium["QuantizedMeshTerrainData"]; 1068 | quarticRealPolynomial: typeof Cesium["QuarticRealPolynomial"]; 1069 | quaternion: typeof Cesium["Quaternion"]; 1070 | quaternionSpline: typeof Cesium["QuaternionSpline"]; 1071 | queue: typeof Cesium["Queue"]; 1072 | ray: typeof Cesium["Ray"]; 1073 | rectangle: typeof Cesium["Rectangle"]; 1074 | rectangleCollisionChecker: typeof Cesium["RectangleCollisionChecker"]; 1075 | rectangleGeometry: typeof Cesium["RectangleGeometry"]; 1076 | rectangleGeometryLibrary: typeof Cesium["RectangleGeometryLibrary"]; 1077 | rectangleGeometryUpdater: typeof Cesium["RectangleGeometryUpdater"]; 1078 | rectangleGraphics: typeof Cesium["RectangleGraphics"]; 1079 | rectangleOutlineGeometry: typeof Cesium["RectangleOutlineGeometry"]; 1080 | referenceFrame: typeof Cesium["ReferenceFrame"]; 1081 | referenceProperty: typeof Cesium["ReferenceProperty"]; 1082 | renderState: typeof Cesium["RenderState"]; 1083 | renderbuffer: typeof Cesium["Renderbuffer"]; 1084 | renderbufferFormat: typeof Cesium["RenderbufferFormat"]; 1085 | request: typeof Cesium["Request"]; 1086 | requestErrorEvent: typeof Cesium["RequestErrorEvent"]; 1087 | requestScheduler: typeof Cesium["RequestScheduler"]; 1088 | requestState: typeof Cesium["RequestState"]; 1089 | requestType: typeof Cesium["RequestType"]; 1090 | resource: typeof Cesium["Resource"]; 1091 | rotation: typeof Cesium["Rotation"]; 1092 | runtimeError: typeof Cesium["RuntimeError"]; 1093 | sdfSettings: typeof Cesium["SDFSettings"]; 1094 | sampledPositionProperty: typeof Cesium["SampledPositionProperty"]; 1095 | sampledProperty: typeof Cesium["SampledProperty"]; 1096 | sampler: typeof Cesium["Sampler"]; 1097 | scaledPositionProperty: typeof Cesium["ScaledPositionProperty"]; 1098 | scene: typeof Cesium["Scene"]; 1099 | sceneFramebuffer: typeof Cesium["SceneFramebuffer"]; 1100 | sceneMode: typeof Cesium["SceneMode"]; 1101 | sceneModePicker: typeof Cesium["SceneModePicker"]; 1102 | sceneModePickerViewModel: typeof Cesium["SceneModePickerViewModel"]; 1103 | sceneTransforms: typeof Cesium["SceneTransforms"]; 1104 | sceneTransitioner: typeof Cesium["SceneTransitioner"]; 1105 | screenSpaceCameraController: typeof Cesium["ScreenSpaceCameraController"]; 1106 | screenSpaceEventHandler: typeof Cesium["ScreenSpaceEventHandler"]; 1107 | screenSpaceEventType: typeof Cesium["ScreenSpaceEventType"]; 1108 | selectionIndicator: typeof Cesium["SelectionIndicator"]; 1109 | selectionIndicatorViewModel: typeof Cesium["SelectionIndicatorViewModel"]; 1110 | shaderCache: typeof Cesium["ShaderCache"]; 1111 | shaderProgram: typeof Cesium["ShaderProgram"]; 1112 | shaderSource: typeof Cesium["ShaderSource"]; 1113 | shadowMap: typeof Cesium["ShadowMap"]; 1114 | shadowMapShader: typeof Cesium["ShadowMapShader"]; 1115 | shadowMode: typeof Cesium["ShadowMode"]; 1116 | shadowVolumeAppearance: typeof Cesium["ShadowVolumeAppearance"]; 1117 | showGeometryInstanceAttribute: typeof Cesium["ShowGeometryInstanceAttribute"]; 1118 | simon1994PlanetaryPositions: typeof Cesium["Simon1994PlanetaryPositions"]; 1119 | simplePolylineGeometry: typeof Cesium["SimplePolylineGeometry"]; 1120 | singleTileImageryProvider: typeof Cesium["SingleTileImageryProvider"]; 1121 | skyAtmosphere: typeof Cesium["SkyAtmosphere"]; 1122 | skyBox: typeof Cesium["SkyBox"]; 1123 | sphereEmitter: typeof Cesium["SphereEmitter"]; 1124 | sphereGeometry: typeof Cesium["SphereGeometry"]; 1125 | sphereOutlineGeometry: typeof Cesium["SphereOutlineGeometry"]; 1126 | spherical: typeof Cesium["Spherical"]; 1127 | spline: typeof Cesium["Spline"]; 1128 | staticGeometryColorBatch: typeof Cesium["StaticGeometryColorBatch"]; 1129 | staticGeometryPerMaterialBatch: typeof Cesium["StaticGeometryPerMaterialBatch"]; 1130 | staticGroundGeometryColorBatch: typeof Cesium["StaticGroundGeometryColorBatch"]; 1131 | staticGroundGeometryPerMaterialBatch: typeof Cesium["StaticGroundGeometryPerMaterialBatch"]; 1132 | staticGroundPolylinePerMaterialBatch: typeof Cesium["StaticGroundPolylinePerMaterialBatch"]; 1133 | staticOutlineGeometryBatch: typeof Cesium["StaticOutlineGeometryBatch"]; 1134 | stencilConstants: typeof Cesium["StencilConstants"]; 1135 | stencilFunction: typeof Cesium["StencilFunction"]; 1136 | stencilOperation: typeof Cesium["StencilOperation"]; 1137 | stripeMaterialProperty: typeof Cesium["StripeMaterialProperty"]; 1138 | stripeOrientation: typeof Cesium["StripeOrientation"]; 1139 | styleExpression: typeof Cesium["StyleExpression"]; 1140 | sun: typeof Cesium["Sun"]; 1141 | sunLight: typeof Cesium["SunLight"]; 1142 | sunPostProcess: typeof Cesium["SunPostProcess"]; 1143 | svgPathBindingHandler: typeof Cesium["SvgPathBindingHandler"]; 1144 | taskProcessor: typeof Cesium["TaskProcessor"]; 1145 | terrainData: typeof Cesium["TerrainData"]; 1146 | terrainEncoding: typeof Cesium["TerrainEncoding"]; 1147 | terrainFillMesh: typeof Cesium["TerrainFillMesh"]; 1148 | terrainMesh: typeof Cesium["TerrainMesh"]; 1149 | terrainOffsetProperty: typeof Cesium["TerrainOffsetProperty"]; 1150 | terrainProvider: typeof Cesium["TerrainProvider"]; 1151 | terrainQuantization: typeof Cesium["TerrainQuantization"]; 1152 | terrainState: typeof Cesium["TerrainState"]; 1153 | texture: typeof Cesium["Texture"]; 1154 | textureAtlas: typeof Cesium["TextureAtlas"]; 1155 | textureCache: typeof Cesium["TextureCache"]; 1156 | textureMagnificationFilter: typeof Cesium["TextureMagnificationFilter"]; 1157 | textureMinificationFilter: typeof Cesium["TextureMinificationFilter"]; 1158 | textureWrap: typeof Cesium["TextureWrap"]; 1159 | tileAvailability: typeof Cesium["TileAvailability"]; 1160 | tileBoundingRegion: typeof Cesium["TileBoundingRegion"]; 1161 | tileBoundingSphere: typeof Cesium["TileBoundingSphere"]; 1162 | tileBoundingVolume: typeof Cesium["TileBoundingVolume"]; 1163 | tileCoordinatesImageryProvider: typeof Cesium["TileCoordinatesImageryProvider"]; 1164 | tileDiscardPolicy: typeof Cesium["TileDiscardPolicy"]; 1165 | tileEdge: typeof Cesium["TileEdge"]; 1166 | tileImagery: typeof Cesium["TileImagery"]; 1167 | tileMapServiceImageryProvider: typeof Cesium["TileMapServiceImageryProvider"]; 1168 | tileOrientedBoundingBox: typeof Cesium["TileOrientedBoundingBox"]; 1169 | tileProviderError: typeof Cesium["TileProviderError"]; 1170 | tileReplacementQueue: typeof Cesium["TileReplacementQueue"]; 1171 | tileSelectionResult: typeof Cesium["TileSelectionResult"]; 1172 | tileState: typeof Cesium["TileState"]; 1173 | tileset3DTileContent: typeof Cesium["Tileset3DTileContent"]; 1174 | tilingScheme: typeof Cesium["TilingScheme"]; 1175 | timeConstants: typeof Cesium["TimeConstants"]; 1176 | timeDynamicImagery: typeof Cesium["TimeDynamicImagery"]; 1177 | timeDynamicPointCloud: typeof Cesium["TimeDynamicPointCloud"]; 1178 | timeInterval: typeof Cesium["TimeInterval"]; 1179 | timeIntervalCollection: typeof Cesium["TimeIntervalCollection"]; 1180 | timeIntervalCollectionPositionProperty: typeof Cesium["TimeIntervalCollectionPositionProperty"]; 1181 | timeIntervalCollectionProperty: typeof Cesium["TimeIntervalCollectionProperty"]; 1182 | timeStandard: typeof Cesium["TimeStandard"]; 1183 | timeline: typeof Cesium["Timeline"]; 1184 | timelineHighlightRange: typeof Cesium["TimelineHighlightRange"]; 1185 | timelineTrack: typeof Cesium["TimelineTrack"]; 1186 | tipsify: typeof Cesium["Tipsify"]; 1187 | toggleButtonViewModel: typeof Cesium["ToggleButtonViewModel"]; 1188 | tonemapper: typeof Cesium["Tonemapper"]; 1189 | transforms: typeof Cesium["Transforms"]; 1190 | translationRotationScale: typeof Cesium["TranslationRotationScale"]; 1191 | tridiagonalSystemSolver: typeof Cesium["TridiagonalSystemSolver"]; 1192 | trustedServers: typeof Cesium["TrustedServers"]; 1193 | tween: typeof Cesium["Tween"]; 1194 | tweenCollection: typeof Cesium["TweenCollection"]; 1195 | uniformState: typeof Cesium["UniformState"]; 1196 | uri: typeof Cesium["Uri"]; 1197 | urlTemplateImageryProvider: typeof Cesium["UrlTemplateImageryProvider"]; 1198 | version: typeof Cesium["VERSION"]; 1199 | vrButton: typeof Cesium["VRButton"]; 1200 | vrButtonViewModel: typeof Cesium["VRButtonViewModel"]; 1201 | vrTheWorldTerrainProvider: typeof Cesium["VRTheWorldTerrainProvider"]; 1202 | vector3DTileBatch: typeof Cesium["Vector3DTileBatch"]; 1203 | vector3DTileContent: typeof Cesium["Vector3DTileContent"]; 1204 | vector3DTileGeometry: typeof Cesium["Vector3DTileGeometry"]; 1205 | vector3DTilePoints: typeof Cesium["Vector3DTilePoints"]; 1206 | vector3DTilePolygons: typeof Cesium["Vector3DTilePolygons"]; 1207 | vector3DTilePolylines: typeof Cesium["Vector3DTilePolylines"]; 1208 | vector3DTilePrimitive: typeof Cesium["Vector3DTilePrimitive"]; 1209 | velocityOrientationProperty: typeof Cesium["VelocityOrientationProperty"]; 1210 | velocityVectorProperty: typeof Cesium["VelocityVectorProperty"]; 1211 | vertexArray: typeof Cesium["VertexArray"]; 1212 | vertexArrayFacade: typeof Cesium["VertexArrayFacade"]; 1213 | vertexFormat: typeof Cesium["VertexFormat"]; 1214 | verticalOrigin: typeof Cesium["VerticalOrigin"]; 1215 | videoSynchronizer: typeof Cesium["VideoSynchronizer"]; 1216 | view: typeof Cesium["View"]; 1217 | viewer: typeof Cesium["Viewer"]; 1218 | viewportQuad: typeof Cesium["ViewportQuad"]; 1219 | visibility: typeof Cesium["Visibility"]; 1220 | visualizer: typeof Cesium["Visualizer"]; 1221 | wallGeometry: typeof Cesium["WallGeometry"]; 1222 | wallGeometryLibrary: typeof Cesium["WallGeometryLibrary"]; 1223 | wallGeometryUpdater: typeof Cesium["WallGeometryUpdater"]; 1224 | wallGraphics: typeof Cesium["WallGraphics"]; 1225 | wallOutlineGeometry: typeof Cesium["WallOutlineGeometry"]; 1226 | webGlConstants: typeof Cesium["WebGLConstants"]; 1227 | webMapServiceImageryProvider: typeof Cesium["WebMapServiceImageryProvider"]; 1228 | webMapTileServiceImageryProvider: typeof Cesium["WebMapTileServiceImageryProvider"]; 1229 | webMercatorProjection: typeof Cesium["WebMercatorProjection"]; 1230 | webMercatorTilingScheme: typeof Cesium["WebMercatorTilingScheme"]; 1231 | weightSpline: typeof Cesium["WeightSpline"]; 1232 | windingOrder: typeof Cesium["WindingOrder"]; 1233 | }; -------------------------------------------------------------------------------- /src/hooks.tsx: -------------------------------------------------------------------------------- 1 | import { useEffect, useCallback } from "react"; 2 | 3 | import { useViewer } from "./context"; 4 | 5 | export const usePostUpdate = (callback, dependencyArray) => { 6 | const viewer = useViewer(); 7 | const memoisedCallback = useCallback(callback, dependencyArray); 8 | 9 | useEffect(() => { 10 | if (viewer != null) { 11 | const { scene } = viewer; 12 | return scene.postUpdate.addEventListener(memoisedCallback); 13 | // returns a function to remove the event listener 14 | } 15 | }, [callback, viewer]); 16 | }; 17 | 18 | export const usePostRender = (callback, dependencyArray) => { 19 | const viewer = useViewer(); 20 | const memoisedCallback = useCallback(callback, dependencyArray); 21 | 22 | useEffect(() => { 23 | if (viewer != null) { 24 | const { scene } = viewer; 25 | return scene.postRender.addEventListener(memoisedCallback); 26 | // returns a function to remove the event listener 27 | } 28 | }, [callback, viewer]); 29 | }; 30 | 31 | export const usePreUpdate = (callback, dependencyArray) => { 32 | const viewer = useViewer(); 33 | const memoisedCallback = useCallback(callback, dependencyArray); 34 | 35 | useEffect(() => { 36 | if (viewer != null) { 37 | const { scene } = viewer; 38 | return scene.preUpdate.addEventListener(memoisedCallback); 39 | // returns a function to remove the event listener 40 | } 41 | }, [callback, viewer]); 42 | }; 43 | 44 | export const usePreRender = (callback, dependencyArray) => { 45 | const viewer = useViewer(); 46 | const memoisedCallback = useCallback(callback, dependencyArray); 47 | 48 | useEffect(() => { 49 | if (viewer != null) { 50 | const { scene } = viewer; 51 | return scene.preRender.addEventListener(memoisedCallback); 52 | // returns a function to remove the event listener 53 | } 54 | }, [callback, viewer]); 55 | }; 56 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | export { Viewer } from "./viewer"; 2 | 3 | export { 4 | usePostRender, 5 | usePostUpdate, 6 | usePreRender, 7 | usePreUpdate, 8 | } from "./hooks"; 9 | 10 | export { useViewer } from "./context"; 11 | 12 | export * from "./types"; 13 | -------------------------------------------------------------------------------- /src/reconciler/append-child.ts: -------------------------------------------------------------------------------- 1 | import { Reconciler, CesiumObject, Detach } from "./types"; 2 | import { Entity, DataSource, Viewer, Primitive } from "cesium"; 3 | 4 | import { error001, error002 } from "../utils/errors"; 5 | 6 | const defaultAttach = ( 7 | container: CesiumObject, 8 | child: CesiumObject 9 | ): Detach => { 10 | const containerType = container.constructor.name; 11 | const childType = child.constructor.name; 12 | 13 | switch (containerType) { 14 | case "CustomDataSource": 15 | case "GeoJsonDataSource": { 16 | switch (childType) { 17 | case "Entity": 18 | (container as DataSource).entities.add(child as Entity); 19 | return (container, child) => 20 | (container as DataSource).entities.remove(child as Entity); 21 | default: 22 | throw error002; 23 | } 24 | } 25 | case "Viewer": { 26 | switch (childType) { 27 | case "Entity": 28 | (container as Viewer).entities.add(child as Entity); 29 | return (container, child) => 30 | (container as Viewer).entities.remove(child as Entity); 31 | case "GeoJsonDataSource": 32 | case "CustomDataSource": 33 | (container as Viewer).dataSources.add(child as DataSource); 34 | return (container, child) => 35 | (container as Viewer).dataSources.remove(child as DataSource, true); 36 | 37 | case "Cesium3DTileset": 38 | (container as Viewer).scene.primitives.add(child as Primitive); 39 | return (container, child) => 40 | (container as Viewer).scene.primitives.remove(child as Primitive); 41 | 42 | default: 43 | throw error002(containerType, childType); 44 | } 45 | } 46 | 47 | default: 48 | throw error002(containerType, childType); 49 | } 50 | }; 51 | 52 | export const appendChild = ((containerNode, childNode) => { 53 | const { cesiumObject: container } = containerNode; 54 | const { cesiumObject: child, attach = defaultAttach } = childNode; 55 | switch (typeof attach) { 56 | case "string": 57 | container[attach] = child; 58 | break; 59 | 60 | case "function": 61 | childNode.detach = attach(container, child); 62 | break; 63 | default: 64 | throw error001; 65 | } 66 | }) as Reconciler["appendChild"]; 67 | -------------------------------------------------------------------------------- /src/reconciler/commit-update.ts: -------------------------------------------------------------------------------- 1 | import { updateCesiumObject } from "../utils/update-cesium-object"; 2 | import { Reconciler } from "./types"; 3 | 4 | export const commitUpdate = (( 5 | instance, 6 | updatePayload, 7 | type, 8 | oldProps, 9 | newProps: React.PropsWithChildren<{ 10 | args?: any; 11 | onUpdate?: any; 12 | [key: string]: any; 13 | }> 14 | ) => { 15 | const { cesiumObject } = instance; 16 | const { children, args, onUpdate, ...props } = newProps; 17 | 18 | updateCesiumObject(cesiumObject, oldProps, props); 19 | 20 | if (typeof onUpdate === "function") { 21 | onUpdate(cesiumObject); 22 | } 23 | }) as Reconciler["commitUpdate"]; 24 | -------------------------------------------------------------------------------- /src/reconciler/create-instance.ts: -------------------------------------------------------------------------------- 1 | import { upperFirst } from "lodash/fp"; 2 | import * as Cesium from "cesium"; 3 | import { error004, error005 } from "../utils/errors"; 4 | import { isFunction, isNil } from "lodash/fp"; 5 | 6 | import { updateCesiumObject } from "../utils/update-cesium-object"; 7 | 8 | import { Reconciler } from "./types"; 9 | 10 | export const createInstance = (( 11 | type, 12 | props, 13 | rootContainerInstance, 14 | getChildHostContext, 15 | internalInstanceHandle 16 | ) => { 17 | const { args = [], constructFrom, attach } = props; 18 | 19 | const name = upperFirst(type); 20 | const target = Cesium[name]; 21 | 22 | let cesiumObject; 23 | 24 | if (isNil(target)) { 25 | throw error004(name); 26 | } else if (isNil(constructFrom)) { 27 | cesiumObject = new target(...args); 28 | } else if (isFunction(target[constructFrom])) { 29 | cesiumObject = target[constructFrom](...args); 30 | } else { 31 | throw error005(constructFrom, target); 32 | } 33 | 34 | updateCesiumObject(cesiumObject, {}, props); 35 | return { cesiumObject, attach: attach }; 36 | }) as Reconciler["createInstance"]; 37 | -------------------------------------------------------------------------------- /src/reconciler/finalize-initial-children.ts: -------------------------------------------------------------------------------- 1 | import { Reconciler } from "./types"; 2 | 3 | export const finalizeInitialChildren = (() => 4 | false) as Reconciler["finalizeInitialChildren"]; 5 | -------------------------------------------------------------------------------- /src/reconciler/get-child-host-context.ts: -------------------------------------------------------------------------------- 1 | // Not used as of today, feel free to implement something cool instead of this 2 | export const getChildHostContext = ( 3 | parentHostContext, 4 | type, 5 | rootContainerInstance 6 | ) => { 7 | return typeof parentHostContext === "string" 8 | ? parentHostContext + "." + type 9 | : type; 10 | }; 11 | -------------------------------------------------------------------------------- /src/reconciler/get-public-instance.ts: -------------------------------------------------------------------------------- 1 | import { Reconciler } from "./types"; 2 | 3 | export const getPublicInstance = ((instance) => { 4 | return instance.cesiumObject; 5 | }) as Reconciler["getPublicInstance"]; 6 | -------------------------------------------------------------------------------- /src/reconciler/get-root-host-context.ts: -------------------------------------------------------------------------------- 1 | // Not used as of today, feel free to implement something cool instead of this 2 | export const getRootHostContext = (rootContainerInstance) => 3 | rootContainerInstance; 4 | -------------------------------------------------------------------------------- /src/reconciler/index.ts: -------------------------------------------------------------------------------- 1 | import ReactReconciler from "react-reconciler"; 2 | 3 | import { appendChild } from "./append-child"; 4 | import { commitUpdate } from "./commit-update"; 5 | import { createInstance } from "./create-instance"; 6 | import { finalizeInitialChildren } from "./finalize-initial-children"; 7 | import { getChildHostContext } from "./get-child-host-context"; 8 | import { getPublicInstance } from "./get-public-instance"; 9 | import { getRootHostContext } from "./get-root-host-context"; 10 | import { insertBefore } from "./insert-before"; 11 | import { prepareUpdate } from "./prepare-update"; 12 | import { removeChild } from "./remove-child"; 13 | import { shouldSetTextContent } from "./should-set-text-content"; 14 | 15 | const instances = new Map(); 16 | import { 17 | Type, 18 | Props, 19 | Container, 20 | Instance, 21 | TextInstance, 22 | HydratableInstance, 23 | PublicInstance, 24 | HostContext, 25 | UpdatePayload, 26 | ChildSet, 27 | TimeoutHandle, 28 | NoTimeout, 29 | } from "./types"; 30 | 31 | const reconciler = ReactReconciler< 32 | Type, 33 | Props, 34 | Container, 35 | Instance, 36 | TextInstance, 37 | HydratableInstance, 38 | PublicInstance, 39 | HostContext, 40 | UpdatePayload, 41 | ChildSet, 42 | TimeoutHandle, 43 | NoTimeout 44 | >({ 45 | supportsMutation: true, 46 | 47 | appendChild, 48 | appendInitialChild: appendChild, 49 | commitUpdate, 50 | createInstance, 51 | finalizeInitialChildren, 52 | getChildHostContext, 53 | getPublicInstance, 54 | getRootHostContext, 55 | insertBefore, 56 | insertInContainerBefore: insertBefore, 57 | prepareUpdate, 58 | removeChild, 59 | shouldSetTextContent, 60 | 61 | appendChildToContainer() {}, 62 | // createTextInstance() {}, 63 | prepareForCommit() {}, 64 | removeChildFromContainer() {}, 65 | replaceContainerChildren() {}, 66 | resetAfterCommit() {}, 67 | // @ts-ignore 68 | switchInstance() {}, 69 | }); 70 | 71 | export function render(what: React.ReactNode, where: HTMLElement) { 72 | let container; 73 | if (instances.has(where)) { 74 | container = instances.get(where); 75 | } else { 76 | container = reconciler.createContainer(where, false, false); 77 | instances.set(where, container); 78 | } 79 | 80 | reconciler.updateContainer(what, container, null, () => null); 81 | return reconciler.getPublicRootInstance(container); 82 | } 83 | -------------------------------------------------------------------------------- /src/reconciler/insert-before.ts: -------------------------------------------------------------------------------- 1 | import { appendChild } from "./append-child"; 2 | import { Reconciler } from "./types"; 3 | 4 | export const insertBefore = ((parentInstance, child, beforeChild) => { 5 | //TODO: Handle ordering (for example for layers) 6 | if (child) { 7 | appendChild(parentInstance, child); 8 | } 9 | }) as Reconciler["insertBefore"]; 10 | -------------------------------------------------------------------------------- /src/reconciler/prepare-update.ts: -------------------------------------------------------------------------------- 1 | import { Reconciler } from "./types"; 2 | 3 | export const prepareUpdate = (( 4 | instance, 5 | type, 6 | oldProps: object, 7 | newProps: object, 8 | rootContainerInstance, 9 | host 10 | ) => { 11 | const oldKeys = Object.keys(oldProps); 12 | const newKeys = Object.keys(newProps); 13 | 14 | // keys have same length 15 | if (oldKeys.length !== newKeys.length) { 16 | return true; 17 | } // keys are the same 18 | else if (oldKeys.some((value, index) => newKeys[index] !== value)) { 19 | return true; 20 | } else { 21 | return oldKeys 22 | .filter((key) => key !== "children") 23 | .some((key) => oldProps[key] !== newProps[key]); 24 | } 25 | }) as Reconciler["prepareUpdate"]; 26 | -------------------------------------------------------------------------------- /src/reconciler/remove-child.ts: -------------------------------------------------------------------------------- 1 | import { isString } from "lodash/fp"; 2 | import { destroyObject } from "cesium"; 3 | import { error003 } from "../utils/errors"; 4 | import { isFunction } from "lodash/fp"; 5 | 6 | import { Reconciler } from "./types"; 7 | 8 | export const removeChild = (( 9 | { cesiumObject: container }, 10 | { cesiumObject: child, attach, detach } 11 | ) => { 12 | if (isFunction(detach)) { 13 | detach(container, child); 14 | } else if (isString(attach)) { 15 | container[attach] = null; 16 | } else { 17 | throw error003(container.constructor.name, child.constructor.name); 18 | } 19 | 20 | destroyObject(child); 21 | }) as Reconciler["removeChild"]; 22 | -------------------------------------------------------------------------------- /src/reconciler/should-set-text-content.ts: -------------------------------------------------------------------------------- 1 | import { Reconciler } from "./types"; 2 | 3 | export const shouldSetTextContent = (() => { 4 | return false; 5 | }) as Reconciler["shouldSetTextContent"]; 6 | -------------------------------------------------------------------------------- /src/reconciler/types.ts: -------------------------------------------------------------------------------- 1 | import { PropsWithChildren } from "react"; 2 | import { HostConfig } from "react-reconciler"; 3 | 4 | //FIXME: Maybe something more explicit 5 | export type CesiumObject = object; 6 | 7 | export type Detach = (container: CesiumObject, child: CesiumObject) => void; 8 | export type Attach = 9 | | string 10 | | ((container: CesiumObject, child: CesiumObject) => Detach); 11 | 12 | // Types for React-reconciler 13 | export type Type = string; 14 | 15 | export type Props = PropsWithChildren<{ 16 | args?: any[]; 17 | attach?: Attach; 18 | onUpdate?: any; 19 | constructFrom: string; 20 | [key: string]: any; 21 | }>; 22 | 23 | export type Container = CesiumObject; 24 | 25 | export type Instance = { 26 | cesiumObject: CesiumObject; 27 | attach?: Attach; 28 | detach: (container: Container, child: Container) => void; 29 | }; 30 | 31 | export type TextInstance = null; 32 | 33 | export type HydratableInstance = Instance; 34 | 35 | export type PublicInstance = Instance["cesiumObject"]; 36 | 37 | export type HostContext = any; 38 | 39 | export type UpdatePayload = boolean; 40 | 41 | //FIXME: No idea what this is 42 | export type ChildSet = unknown; 43 | export type TimeoutHandle = unknown; 44 | export type NoTimeout = -1; 45 | 46 | export type Reconciler = HostConfig< 47 | Type, 48 | Props, 49 | Container, 50 | Instance, 51 | TextInstance, 52 | HydratableInstance, 53 | PublicInstance, 54 | HostContext, 55 | UpdatePayload, 56 | ChildSet, 57 | TimeoutHandle, 58 | NoTimeout 59 | >; 60 | -------------------------------------------------------------------------------- /src/stories/data-source.stories.tsx: -------------------------------------------------------------------------------- 1 | import React, { useEffect, useRef, useState } from "react"; 2 | import { Cartesian3, Color, GeoJsonDataSource } from "cesium"; 3 | import { Viewer } from "../viewer"; 4 | 5 | import "../types"; 6 | 7 | require("cesium/Widgets/widgets.css"); 8 | 9 | export default { 10 | title: "Data Source", 11 | component: Viewer, 12 | }; 13 | 14 | const UsaGeojson = () => { 15 | const geojsonRef = useRef(null); 16 | 17 | useEffect(() => { 18 | geojsonRef.current.load(process.env.PUBLIC_URL + "./us-states.topojson"); 19 | }, [geojsonRef.current]); 20 | 21 | return ; 22 | }; 23 | 24 | export const GeoJson = () => ( 25 | 26 | 27 | 28 | ); 29 | 30 | const pos2 = Cartesian3.fromDegrees(-114.0, 30.0, 300000.0); 31 | const pos3 = Cartesian3.fromDegrees(-114.0, 20.0, 300000.0); 32 | 33 | const dimensions = new Cartesian3(400000.0, 300000.0, 500000.0); 34 | 35 | const greenWithOpacity = Color.GREEN.withAlpha(0.5); 36 | 37 | const BlinkingCollection = () => { 38 | const [show, setShow] = useState(true); 39 | 40 | useEffect(() => { 41 | const interval = setInterval(() => { 42 | setShow((current) => !current); 43 | }, 1500); 44 | 45 | return () => clearInterval(interval); 46 | }, []); 47 | 48 | return ( 49 | 50 | 51 | 55 | 60 | 61 | 62 | 67 | 68 | 69 | 78 | 79 | 80 | ); 81 | }; 82 | 83 | export const CustomDataSource = () => ( 84 | 85 | 86 | 87 | ); 88 | -------------------------------------------------------------------------------- /src/stories/entity.stories.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import { Color } from "cesium"; 3 | import { Viewer } from "../viewer"; 4 | 5 | import "../types"; 6 | 7 | require("cesium/Widgets/widgets.css"); 8 | 9 | export default { 10 | title: "Entity", 11 | component: Viewer, 12 | }; 13 | 14 | const greenWithOpacity = Color.GREEN.withAlpha(0.5); 15 | 16 | export const Various = () => ( 17 | 18 | 19 | 23 | 24 | 25 | 26 | 27 | 28 | 33 | 34 | 35 | 36 | 37 | 38 | 43 | 51 | 52 | 53 | ); 54 | -------------------------------------------------------------------------------- /src/stories/model.stories.tsx: -------------------------------------------------------------------------------- 1 | import React, { useRef, useMemo } from "react"; 2 | import { 3 | Cartesian3, 4 | ExtrapolationType, 5 | JulianDate, 6 | SampledPositionProperty, 7 | } from "cesium"; 8 | import { Viewer } from "../viewer"; 9 | import { usePreRender } from "../hooks"; 10 | 11 | import "../types"; 12 | 13 | require("cesium/Widgets/widgets.css"); 14 | 15 | export default { 16 | title: "Model", 17 | component: Viewer, 18 | }; 19 | 20 | const PlaneModel = () => { 21 | const previousDate = useRef(JulianDate.now()); 22 | 23 | const actualPosition = useRef<[number, number, number]>([ 24 | -114.0, 25 | 30.0, 26 | 1500000.0, 27 | ]); 28 | 29 | const samples = useMemo(() => new SampledPositionProperty(), []); 30 | 31 | usePreRender((_scene, time) => { 32 | const increment = JulianDate.secondsDifference(time, previousDate.current); 33 | 34 | samples.addSample(time, Cartesian3.fromDegrees(...actualPosition.current)); 35 | 36 | samples.backwardExtrapolationType = ExtrapolationType.EXTRAPOLATE; 37 | samples.forwardExtrapolationType = ExtrapolationType.EXTRAPOLATE; 38 | 39 | actualPosition.current = [ 40 | actualPosition.current[0] + increment * 5, 41 | actualPosition.current[1], 42 | actualPosition.current[2], 43 | ]; 44 | 45 | previousDate.current = time.clone(); 46 | }, []); 47 | 48 | return ( 49 | 53 | 54 | 55 | ); 56 | }; 57 | 58 | export const Plane = () => ( 59 | 60 | 61 | 62 | ); 63 | -------------------------------------------------------------------------------- /src/stories/remove-child.stories.tsx: -------------------------------------------------------------------------------- 1 | import React, { useEffect, useState } from "react"; 2 | import { Color, IonResource, Ion } from "cesium"; 3 | import { Viewer } from "../viewer"; 4 | 5 | import "../types"; 6 | 7 | require("cesium/Widgets/widgets.css"); 8 | if (typeof process.env.CESIUM_ION_ACCESS_TOKEN === "string") 9 | Ion.defaultAccessToken = process.env.CESIUM_ION_ACCESS_TOKEN; 10 | 11 | export default { 12 | title: "Remove child", 13 | component: Viewer, 14 | }; 15 | 16 | const useBlink = (duration = 1500) => { 17 | const [show, setShow] = useState(true); 18 | 19 | useEffect(() => { 20 | const interval = setInterval(() => { 21 | setShow((current) => !current); 22 | }, duration); 23 | 24 | return () => clearInterval(interval); 25 | }, []); 26 | 27 | return show; 28 | }; 29 | 30 | export const Single = () => { 31 | const show = useBlink(); 32 | return ( 33 | 34 | {show && ( 35 | 36 | 40 | 41 | 45 | 46 | 47 | )} 48 | 49 | ); 50 | }; 51 | 52 | export const Collection = () => { 53 | const show = useBlink(); 54 | return ( 55 | 56 | {show && ( 57 | 58 | 59 | 67 | 68 | 72 | 73 | 74 | 75 | )} 76 | 77 | ); 78 | }; 79 | 80 | export const Property = () => { 81 | const show = useBlink(); 82 | const show2 = useBlink(3000); 83 | return ( 84 | 85 | 86 | 87 | 91 | {show && ( 92 | 95 | 99 | 100 | )} 101 | 102 | 103 | 104 | ); 105 | }; 106 | 107 | export const Tileset = () => { 108 | const show = useBlink(5000); 109 | 110 | return ( 111 | 112 | {show && ( 113 | 119 | 127 | 128 | )} 129 | 130 | ); 131 | }; 132 | -------------------------------------------------------------------------------- /src/stories/tileset.stories.tsx: -------------------------------------------------------------------------------- 1 | import React, { useEffect } from "react"; 2 | import { 3 | Cartesian3, 4 | createWorldTerrain, 5 | HeadingPitchRoll, 6 | Ion, 7 | IonResource, 8 | } from "cesium"; 9 | import { Viewer, useViewer } from "../viewer"; 10 | 11 | import "../types"; 12 | 13 | require("cesium/Widgets/widgets.css"); 14 | if (typeof process.env.CESIUM_ION_ACCESS_TOKEN === "string") 15 | Ion.defaultAccessToken = process.env.CESIUM_ION_ACCESS_TOKEN; 16 | 17 | export default { 18 | title: "3D Tiles", 19 | component: Viewer, 20 | }; 21 | 22 | const ZoomTo = () => { 23 | const viewer = useViewer(); 24 | 25 | useEffect(() => { 26 | viewer && 27 | viewer.scene.camera.setView({ 28 | destination: new Cartesian3( 29 | 4401744.644145314, 30 | 225051.41078911052, 31 | 4595420.374784433 32 | ), 33 | orientation: new HeadingPitchRoll( 34 | 5.646733805039757, 35 | -0.276607153839886, 36 | 6.281110875400085 37 | ), 38 | }); 39 | }, [viewer]); 40 | return null; 41 | }; 42 | 43 | export const Tileset = () => ( 44 | 46 | 47 | 53 | 61 | 62 | 63 | ); 64 | -------------------------------------------------------------------------------- /src/stories/viewer.stories.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import { Viewer } from "../viewer"; 3 | 4 | require("cesium/Widgets/widgets.css"); 5 | 6 | export default { 7 | title: "Viewer", 8 | component: Viewer, 9 | }; 10 | 11 | export const Basic = () => ; 12 | 13 | export const LowResolution = () => ( 14 | 15 | ); 16 | -------------------------------------------------------------------------------- /src/types.ts: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import * as Cesium from "cesium"; 3 | 4 | import { MappingExported, MappingTypeofExport } from "./generated-mapping"; 5 | 6 | export declare namespace ReactCesiumFiber { 7 | type IfEquals = (() => T extends X 8 | ? 1 9 | : 2) extends () => T extends Y ? 1 : 2 10 | ? A 11 | : B; 12 | 13 | type WritableKeys = { 14 | [P in keyof T]-?: IfEquals< 15 | { [Q in P]: T[P] }, 16 | { -readonly [Q in P]: T[P] }, 17 | P 18 | >; 19 | }[keyof T]; 20 | 21 | type Writable = Pick>; 22 | 23 | type NonFunctionKeys = { 24 | [K in keyof T]: T[K] extends Function ? never : K; 25 | }[keyof T]; 26 | 27 | type WithoutFunctionKeys = Pick>; 28 | 29 | // set the values of type `property` to type any 30 | type TransformProperty = { 31 | [P in keyof Object]: Object[P] extends Cesium.Property 32 | ? Replacement 33 | : Object[P]; 34 | }; 35 | 36 | type Overwrite = Omit> & O; 37 | 38 | type NodeProps = { 39 | args?: ConstructorOptions; 40 | constructFrom?: string; 41 | attach?: 42 | | string 43 | | (( 44 | container: Container, 45 | child: Child 46 | ) => (container: Container, child: Child) => void); 47 | onUpdate?: (...args: any[]) => void; 48 | children?: React.ReactNode; 49 | ref?: React.Ref; 50 | key?: React.Key; 51 | }; 52 | 53 | type ComponentWithProperties = NodeProps< 54 | ConstructorOptions 55 | > & 56 | Partial>>; 57 | 58 | type Component = TransformProperty< 59 | ComponentWithProperties 60 | >; 61 | 62 | type IntrinsicElements = { 63 | [T in keyof MappingExported]: ReactCesiumFiber.Component< 64 | MappingExported[T], 65 | ConstructorParameters 66 | >; 67 | }; 68 | } 69 | 70 | declare global { 71 | namespace JSX { 72 | interface IntrinsicElements extends ReactCesiumFiber.IntrinsicElements {} 73 | } 74 | } 75 | 76 | // A way more elegant solution that avoid generating a mapping 77 | // However, it does not work as typescript doesn't provide a way 78 | // to change the case of a key. 79 | // The problem is that we can have all the JSX intrinsic elements types 80 | // Directly from the one exported in Cesium but in CapitalizedCamelCase ... 81 | 82 | // type UpperCamelCaseType = { 83 | // [T in UpperCamelCaseKeys]: ReactCesiumFiber.Component< 84 | // typeof Cesium[T], 85 | // ConstructorParameters 86 | // >; 87 | // }; 88 | 89 | // type UpperCamelCaseKeys = { 90 | // [T in keyof typeof Cesium]: typeof Cesium[T] extends new (...args: any) => any 91 | // ? T 92 | // : never; 93 | // }[keyof typeof Cesium]; 94 | -------------------------------------------------------------------------------- /src/utils/__tests__/generate-types.ts: -------------------------------------------------------------------------------- 1 | import { 2 | isFirstLetterCapitalized, 3 | convertMappingExported, 4 | convertMappingTypeOf, 5 | convertAllValues, 6 | } from "../generate-types"; 7 | 8 | describe("isFirstLetterCapitalized", () => { 9 | test("empty", () => { 10 | expect(isFirstLetterCapitalized("")).toEqual(false); 11 | //@ts-ignore 12 | expect(isFirstLetterCapitalized()).toEqual(false); 13 | //@ts-ignore 14 | expect(isFirstLetterCapitalized(null)).toEqual(false); 15 | }); 16 | 17 | test("simple", () => { 18 | expect(isFirstLetterCapitalized("a")).toEqual(false); 19 | expect(isFirstLetterCapitalized("A")).toEqual(true); 20 | }); 21 | 22 | test("full word", () => { 23 | expect(isFirstLetterCapitalized("word")).toEqual(false); 24 | expect(isFirstLetterCapitalized("Word")).toEqual(true); 25 | }); 26 | }); 27 | 28 | describe("convert single lines", () => { 29 | test("convertMappingExported", () => { 30 | expect(convertMappingExported("test")).toEqual(" test: Cesium.test;"); 31 | }); 32 | 33 | test("convertMappingTypeOf", () => { 34 | expect(convertMappingTypeOf("test")).toEqual( 35 | ' test: typeof Cesium["test"];' 36 | ); 37 | }); 38 | }); 39 | 40 | describe("convertAllValues", () => { 41 | test("type", () => { 42 | expect(typeof convertAllValues).toEqual("function"); 43 | }); 44 | 45 | test("simple", () => { 46 | expect(convertAllValues(["test"])).toEqual(`// @ts-nocheck 47 | // Generated Code, do not edit manually 48 | import * as Cesium from \"cesium\"; 49 | 50 | export type MappingExported = { 51 | test: Cesium.test; 52 | }; 53 | 54 | export type MappingTypeofExport = { 55 | test: typeof Cesium[\"test\"]; 56 | };`); 57 | }); 58 | }); 59 | -------------------------------------------------------------------------------- /src/utils/__tests__/update-cesium-object.ts: -------------------------------------------------------------------------------- 1 | import { 2 | hasSetter, 3 | forEachSetterOf, 4 | updateCesiumObject, 5 | } from "../update-cesium-object"; 6 | 7 | describe("hasSetter", () => { 8 | test("type", () => { 9 | expect(typeof hasSetter).toEqual("function"); 10 | }); 11 | 12 | test("simple object", () => { 13 | expect(hasSetter("setter", {})).toEqual(false); 14 | expect(hasSetter("setter", { setter: 1 })).toEqual(false); 15 | }); 16 | 17 | test("with setter", () => { 18 | const obj = { 19 | set setter(value) {}, 20 | }; 21 | 22 | expect(hasSetter("setter", obj)).toEqual(true); 23 | expect(hasSetter("notASetter", obj)).toEqual(false); 24 | }); 25 | }); 26 | describe("forEachSetterOf", () => { 27 | test("type", () => { 28 | expect(typeof forEachSetterOf).toEqual("function"); 29 | }); 30 | 31 | test("simple example", () => { 32 | const referenceObject = { 33 | set setter(value) {}, 34 | }; 35 | 36 | const mutableArray = []; 37 | forEachSetterOf((key) => mutableArray.push(key), referenceObject, { 38 | setter: "a", 39 | }); 40 | 41 | expect(mutableArray).toEqual(["setter"]); 42 | }); 43 | 44 | test("empty object", () => { 45 | const referenceObject = { 46 | set setter(value) {}, 47 | }; 48 | 49 | const mutableArray = []; 50 | forEachSetterOf((key) => mutableArray.push(key), referenceObject, {}); 51 | 52 | expect(mutableArray).toEqual([]); 53 | }); 54 | 55 | test("use value", () => { 56 | const referenceObject = { 57 | set setter(value) {}, 58 | }; 59 | 60 | let mutableObject = {}; 61 | forEachSetterOf( 62 | (key, value) => (mutableObject[key] = value), 63 | referenceObject, 64 | { 65 | setter: "a", 66 | setter2: "b", 67 | } 68 | ); 69 | 70 | expect(mutableObject).toEqual({ setter: "a" }); 71 | }); 72 | 73 | test("with multiple setters value", () => { 74 | const referenceObject = { 75 | set setter1(value) { 76 | this.setters.push(value); 77 | }, 78 | set setter2(value) { 79 | this.setters.push(value); 80 | }, 81 | setters: [], 82 | }; 83 | 84 | let mutableObject = {}; 85 | forEachSetterOf( 86 | (key, value) => (referenceObject[key] = value), 87 | referenceObject, 88 | { 89 | setter1: "a", 90 | setter2: "b", 91 | setter3: "c", 92 | } 93 | ); 94 | 95 | expect(referenceObject).toEqual({ 96 | setter1: undefined, 97 | setter2: undefined, 98 | setters: ["a", "b"], 99 | }); 100 | }); 101 | }); 102 | 103 | describe("updateCesiumObject", () => { 104 | test("type", () => { 105 | expect(typeof updateCesiumObject).toEqual("function"); 106 | }); 107 | 108 | test("simple object", () => { 109 | class CesiumObject { 110 | set setter1(value) { 111 | this.setters.push(value); 112 | } 113 | set setter2(value) { 114 | this.setters.push(value); 115 | } 116 | 117 | setters = []; 118 | } 119 | const cesiumObject = new CesiumObject(); 120 | updateCesiumObject( 121 | cesiumObject, 122 | { 123 | setter1: "d", 124 | setter2: "e", 125 | setter3: "f", 126 | }, 127 | { 128 | setter1: "a", 129 | setter2: "b", 130 | setter3: "c", 131 | } 132 | ); 133 | 134 | expect(cesiumObject).toEqual({ 135 | setter1: undefined, 136 | setter2: undefined, 137 | setters: ["a", "b"], 138 | }); 139 | }); 140 | 141 | test("Don't update same props", () => { 142 | class CesiumObject { 143 | set setter1(value) { 144 | this.setters.push(value); 145 | } 146 | set setter2(value) { 147 | this.setters.push(value); 148 | } 149 | 150 | setters = []; 151 | } 152 | const cesiumObject = new CesiumObject(); 153 | updateCesiumObject( 154 | cesiumObject, 155 | { 156 | setter1: "a", 157 | setter2: "e", 158 | setter3: "f", 159 | }, 160 | { 161 | setter1: "a", 162 | setter2: "b", 163 | setter3: "c", 164 | } 165 | ); 166 | 167 | expect(cesiumObject).toEqual({ 168 | setter1: undefined, 169 | setter2: undefined, 170 | setters: ["b"], 171 | }); 172 | }); 173 | }); 174 | -------------------------------------------------------------------------------- /src/utils/errors.ts: -------------------------------------------------------------------------------- 1 | const header = (number) => `[react-cesium-fiber] Error${number} - `; 2 | 3 | export const error001 = new Error(header("001") + 'Unsupported "attach" type.'); 4 | export const error002 = (containerType, childType) => 5 | new Error( 6 | header("002") + 7 | `Couldn't add this child to this container. You can specify how to attach this type of child ("${childType}") to this type of container ("${containerType}") using the "attach" props.` 8 | ); 9 | export const error003 = (containerType, childType) => 10 | new Error( 11 | header("003") + 12 | `Couldn't remove this child from this container. You can specify how to detach this type of child ("${childType}") from this type of container ("${containerType}") using the "attach" props.` 13 | ); 14 | export const error004 = (name) => 15 | new Error(header("004") + `${name} is not exported by cesium.`); 16 | export const error005 = (constructorName, objectName) => 17 | new Error( 18 | header("005") + `${constructorName} is not a constructor for ${objectName}` 19 | ); 20 | -------------------------------------------------------------------------------- /src/utils/generate-types.ts: -------------------------------------------------------------------------------- 1 | import * as Cesium from "cesium"; 2 | import { map, join, split, head, upperCase, camelCase } from "lodash/fp"; 3 | import { writeFileSync } from "fs"; 4 | 5 | export const isFirstLetterCapitalized = (key: string) => { 6 | const firstLetter = head(split("", key)); 7 | return upperCase(firstLetter) === firstLetter; 8 | }; 9 | 10 | export const convertMappingExported = (key1: string): string => { 11 | return ` ${camelCase(key1)}: Cesium.${key1};`; 12 | }; 13 | 14 | export const convertMappingTypeOf = (key1: string): string => { 15 | return ` ${camelCase(key1)}: typeof Cesium["${key1}"];`; 16 | }; 17 | 18 | export const convertAllValues = (keys: string[]) => { 19 | return `// @ts-nocheck 20 | // Generated Code, do not edit manually 21 | import * as Cesium from "cesium"; 22 | 23 | export type MappingExported = { 24 | ${join( 25 | "\n", 26 | map((key: string) => convertMappingExported(key), keys) 27 | )} 28 | }; 29 | 30 | export type MappingTypeofExport = { 31 | ${join( 32 | "\n", 33 | map((key: string) => convertMappingTypeOf(key), keys) 34 | )} 35 | };`; 36 | }; 37 | 38 | // We don't want to test those functions 39 | /* istanbul ignore next */ 40 | /** 41 | * This functions generates a file containing 2 mappings necessary in order to 42 | * have proper typing of react-cesium-fiber elements. 43 | * 44 | * It needs to be updated on every release of CesiumJs. 45 | * Maybe we should put those types in a different package in order to avoid tying 46 | * react-cesium-fiber releases with cesium ones. 47 | */ 48 | export const generateTypes = () => 49 | writeFileSync( 50 | "./src/generated-mapping.ts", 51 | convertAllValues(Object.keys(Cesium).filter(isFirstLetterCapitalized)) 52 | ); 53 | 54 | /* istanbul ignore next */ 55 | if (require.main === module) { 56 | generateTypes(); 57 | console.log("mapping types generated!"); 58 | } 59 | -------------------------------------------------------------------------------- /src/utils/update-cesium-object.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Determines if an object as a setter for a given key 3 | * 4 | * @param object 5 | * @param key 6 | * @returns (boolean) `true` if the object has a setter for the given key. 7 | * else return `false` 8 | */ 9 | export const hasSetter = (key: string, object: object): boolean => 10 | Object.getOwnPropertyDescriptor(object, key)?.set != null; 11 | 12 | export const forEachSetterOf = ( 13 | iteratee: (key: string, value: any) => void, 14 | referenceObject: object, 15 | object: object 16 | ): void => { 17 | Object.entries(object) 18 | .filter(([key]) => hasSetter(key, referenceObject)) 19 | .forEach(([key, value]) => iteratee(key, value)); 20 | }; 21 | 22 | /** 23 | * 24 | * This code checks, for every given props, 25 | * if the cesium entity has a setter for the prop. 26 | * If it has one, it sets the value to the cesium object, 27 | * but it only sets it if it changed from the previous props. 28 | * 29 | * @param cesiumObject The cesium object to update 30 | * @param props The props potentially containing new changes 31 | */ 32 | export const updateCesiumObject = ( 33 | cesiumObject: object, 34 | oldProps: object = {}, 35 | props: object 36 | ): void => { 37 | forEachSetterOf( 38 | (key, value) => { 39 | if (oldProps[key] !== value) { 40 | cesiumObject[key] = value; 41 | } 42 | }, 43 | Object.getPrototypeOf(cesiumObject), 44 | props 45 | ); 46 | }; 47 | -------------------------------------------------------------------------------- /src/viewer.tsx: -------------------------------------------------------------------------------- 1 | import React, { useRef, useLayoutEffect, useState, forwardRef } from "react"; 2 | import { Viewer as CesiumViewer } from "cesium"; 3 | import { render } from "./reconciler"; 4 | 5 | import { ViewerProvider, useViewer } from "./context"; 6 | 7 | import { ReactCesiumFiber } from "./types"; 8 | 9 | const defaultArgs = [{}] as [ConstructorParameters[1]]; 10 | const defaultStyle = {}; 11 | 12 | // forward ref ? 13 | export const Viewer = forwardRef(function ViewerWithoutRef( 14 | { 15 | children, 16 | args = defaultArgs, 17 | style = defaultStyle, 18 | className, 19 | ...viewerProps 20 | }: ReactCesiumFiber.Component< 21 | CesiumViewer, 22 | [ConstructorParameters[1]] 23 | > & { 24 | style?: React.CSSProperties; 25 | className?: string; 26 | }, 27 | ref 28 | ): React.ReactElement { 29 | const containerRef = useRef(null); 30 | if (ref) { 31 | if ("current" in ref) { 32 | ref.current = containerRef.current; 33 | } else if (typeof ref === "function") { 34 | ref(containerRef.current); 35 | } 36 | } 37 | const [viewer, setViewer] = useState(null); 38 | 39 | useLayoutEffect(() => { 40 | if (containerRef.current) { 41 | const wrapped = ( 42 | 43 | {children} 44 | 45 | ); 46 | const returned = render(wrapped, containerRef.current); 47 | 48 | if (viewer == null && returned != null) { 49 | setViewer(returned); 50 | } 51 | } 52 | }, [children, containerRef.current, viewer]); 53 | 54 | return
; 55 | }); 56 | 57 | export { useViewer }; 58 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "include": ["./src/*"], 3 | "compilerOptions": { 4 | "strict": false, 5 | "esModuleInterop": true, 6 | "lib": ["dom", "esnext"], 7 | "jsx": "react", 8 | "target": "es5", 9 | "allowJs": true, 10 | "skipLibCheck": true, 11 | "allowSyntheticDefaultImports": true, 12 | "forceConsistentCasingInFileNames": true, 13 | "module": "commonjs", 14 | "moduleResolution": "node", 15 | "resolveJsonModule": true, 16 | "isolatedModules": true, 17 | "noEmit": false, 18 | "declaration": true, 19 | "outDir": "lib" 20 | } 21 | } 22 | --------------------------------------------------------------------------------