{"version":3,"file":"main.js","mappings":"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","sources":["./src/app/_services/AESEncryptDecrypt.service.ts","./src/app/_services/http.service.ts","./src/app/app.component.ts","./src/app/app.component.html","./src/app/app.module.ts","./src/app/engine1/engine1.component.ts","./src/app/engine1/engine1.component.html","./src/app/engine/engine.component.ts","./src/app/engine/engine.component.html","./src/app/engine/engine.service.ts","./src/app/engine/stars/stars.component.ts","./src/app/engine/stars/stars.component.html","./src/app/engine/stars/stars.service.ts","./src/app/source/Main.ts","./src/app/source/MapView.ts","./src/app/source/geometries/MapNodeGeometry.ts","./src/app/source/geometries/MapNodeHeightGeometry.ts","./src/app/source/geometries/MapSphereNodeGeometry.ts","./src/app/source/lod/LODFrustum.ts","./src/app/source/lod/LODRadial.ts","./src/app/source/lod/LODRaycast.ts","./src/app/source/nodes/MapHeightNode.ts","./src/app/source/nodes/MapHeightNodeShader.ts","./src/app/source/nodes/MapMartiniHeightNode.ts","./src/app/source/nodes/MapNode.ts","./src/app/source/nodes/MapPlaneNode.ts","./src/app/source/nodes/MapSphereNode.ts","./src/app/source/nodes/Martini.ts","./src/app/source/providers/BingMapsProvider.ts","./src/app/source/providers/DebugProvider.ts","./src/app/source/providers/GoogleMapsProvider.ts","./src/app/source/providers/HeightDebugProvider.ts","./src/app/source/providers/HereMapsProvider.ts","./src/app/source/providers/MapBoxProvider.ts","./src/app/source/providers/MapProvider.ts","./src/app/source/providers/MapTilerProvider.ts","./src/app/source/providers/OpenMapTilesProvider.ts","./src/app/source/providers/OpenStreetMapsProvider.ts","./src/app/source/utils/CancelablePromise.ts","./src/app/source/utils/CanvasUtils.ts","./src/app/source/utils/Geolocation.ts","./src/app/source/utils/GeolocationUtils.ts","./src/app/source/utils/TextureUtils.ts","./src/app/source/utils/UnitsUtils.ts","./src/app/source/utils/XHRUtils.ts","./src/app/ui/ui-infobar-bottom/ui-infobar-bottom.component.ts","./src/app/ui/ui-infobar-bottom/ui-infobar-bottom.component.html","./src/app/ui/ui-infobar-top/ui-infobar-top.component.ts","./src/app/ui/ui-sidebar-left/ui-sidebar-left.component.ts","./src/app/ui/ui-sidebar-right/ui-sidebar-right.component.ts","./src/app/ui/ui.component.ts","./src/app/ui/ui.component.html","./src/app/ui/uitextbox/uitextbox.component.ts","./src/environments/environment.prod.ts","./src/environments/environment.ts","./src/main.ts","./src/assets/shaders/atmosphereFragment.glsl","./src/assets/shaders/atmosphereVertex.glsl","./src/assets/shaders/fragment.glsl","./src/assets/shaders/vertex.glsl","ignored|C:\\Development\\Globe\\Globe\\node_modules\\crypto-js|crypto"],"sourcesContent":["import { Injectable } from '@angular/core';\r\nimport * as CryptoJS from 'crypto-js';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class AESEncryptDecryptService {\r\n\r\n secretKey = \"035CD262-F9CF-9C01-1DDB6D2B29D0\";\r\n constructor() { }\r\n\r\n encrypt(value : string) : string{\r\n return CryptoJS.AES.encrypt(value, this.secretKey.trim()).toString();\r\n }\r\n\r\n decrypt(textToDecrypt : string): string{\r\n return CryptoJS.AES.decrypt(textToDecrypt, this.secretKey.trim()).toString(CryptoJS.enc.Utf8);\r\n }\r\n}","import { Injectable, Inject } from '@angular/core';\r\nimport { HttpClient, HttpRequest } from '@angular/common/http';\r\nimport { Observable } from 'rxjs';\r\nimport { environment } from 'src/environments/environment.prod';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class HttpService {\r\n actionUrl = '';\r\n constructor(private http: HttpClient) {\r\n this.actionUrl =environment.apiUrl;\r\n }\r\n\r\n public getAll(apiUrl: string): Observable {\r\n return this.http.get(this.actionUrl + apiUrl);\r\n }\r\n\r\n public getById(apiUrl: string, id: number): Observable {\r\n return this.http.get(this.actionUrl + apiUrl + id);\r\n }\r\n\r\n public post(apiUrl: string, data: T): Observable {\r\n console.log(this.actionUrl + apiUrl);\r\n console.log(data);\r\n return this.http.post(this.actionUrl + apiUrl, data);\r\n }\r\n\r\n public update(apiUrl: string, id: number, data: T): Observable {\r\n return this.http\r\n .put(this.actionUrl + apiUrl + id, data);\r\n }\r\n\r\n public delete(apiUrl: string, id: number): Observable {\r\n return this.http.delete(this.actionUrl + apiUrl + id);\r\n }\r\n\r\n public getmethod(apiUrl: string): Observable {\r\n return this.http.get(apiUrl);\r\n }\r\n\r\n public getWithoutAll(apiUrl: string): any {\r\n return this.http.get(this.actionUrl + apiUrl);\r\n }\r\n}\r\n\r\n\r\n","import {Component} from '@angular/core';\n\n@Component({\n selector: 'app-root',\n templateUrl: './app.component.html',\n styles: [`\n .disabled-pointer-events {\n pointer-events: none;\n }\n`]\n})\nexport class AppComponent {\n disablePointerEvents = false;\n\n onMouseEnter() {\n console.log('asd');\n this.disablePointerEvents = true;\n }\n\n onMouseLeave() {\n console.log('asdfgdfg');\n this.disablePointerEvents = false;\n }\n}\n","\n
\n \n \n
\n\n
\n \n \n \n \n \n
\n \n\n \n
\n\n\n \n ","import {NgModule} from '@angular/core';\nimport {BrowserModule} from '@angular/platform-browser';\nimport {AppComponent} from './app.component';\nimport {EngineComponent} from './engine/engine.component';\nimport {UiInfobarBottomComponent} from './ui/ui-infobar-bottom/ui-infobar-bottom.component';\nimport {UiInfobarTopComponent} from './ui/ui-infobar-top/ui-infobar-top.component';\nimport {UiSidebarLeftComponent} from './ui/ui-sidebar-left/ui-sidebar-left.component';\nimport {UiSidebarRightComponent} from './ui/ui-sidebar-right/ui-sidebar-right.component';\nimport {UiComponent} from './ui/ui.component';\nimport { StarsComponent } from './engine/stars/stars.component';\nimport { Engine1Component } from './engine1/engine1.component';\nimport { HttpClientModule } from '@angular/common/http';\nimport { NgxSliderModule } from '@angular-slider/ngx-slider';\nimport { UitextboxComponent } from './ui/uitextbox/uitextbox.component';\n\n@NgModule({\n declarations: [\n AppComponent,\n EngineComponent,\n UiComponent,\n UiInfobarBottomComponent,\n UiInfobarTopComponent,\n UiSidebarLeftComponent,\n UiSidebarRightComponent,\n StarsComponent,\n Engine1Component,\n UitextboxComponent\n ],\n imports: [\n BrowserModule,\n HttpClientModule,\n NgxSliderModule\n ],\n providers: [],\n bootstrap: [\n AppComponent\n ],\n \n})\nexport class AppModule {\n}\n","import { Component, ElementRef, HostListener, OnInit, ViewChild } from '@angular/core';\nimport {WebGLRenderer, Scene, Color, TextureLoader, Mesh, SphereGeometry, MeshBasicMaterial, PerspectiveCamera, MOUSE, AmbientLight, Raycaster, Vector2} from 'three';\nimport {MapControls} from 'three/examples/jsm/controls/OrbitControls.js';\nimport {UnitsUtils, BingMapsProvider, MapView} from '../source/Main';\nimport * as THREE from 'three';\n\n@Component({\n selector: 'app-engine1',\n templateUrl: './engine1.component.html',\n styleUrls: ['./engine1.component.scss']\n})\nexport class Engine1Component implements OnInit {\n SPHERE = 0;\n active=this.SPHERE;\n private frameId: number = null;\n // Planar earth scene\n PLANE = 1;\n raycaster = new Raycaster();\n// List of scenes\nscenes:any;\n@ViewChild('rendererCanvas', {static: true})\n public rendererCanvas: ElementRef;\n renderer: WebGLRenderer;\n\n constructor() { }\n\n ngOnInit(): void {\n this.renderer = new WebGLRenderer({\n canvas: this.rendererCanvas.nativeElement,\n antialias: true\n });\n\tthis.scenes=[this.createWorldScene(), this.createMapScene()];\n this.animate();\n }\n @HostListener('window:resize', ['$event'])\n onResize(event) {\n var width = window.innerWidth;\n var height = window.innerHeight;\n \n this.renderer.setSize(width, height);\n \n for (let i = 0; i < this.scenes.length; i++) \n {\n const s = this.scenes[i];\n s.camera.aspect = width / height;\n s.camera.updateProjectionMatrix();\n }\n }\n\n createWorldScene(): any\n{\n\tvar scene = new Scene();\n\tscene.background = new Color(0x000000);\n \n\t// Globe\n\tvar loader = new TextureLoader();\n\tloader.load('./assets/img/globe.jpeg', function(texture) \n\t{\n\t\tvar sphere = new Mesh(new SphereGeometry(UnitsUtils.EARTH_RADIUS, 256, 256), new MeshBasicMaterial({map: texture}));\n\t\tscene.add(sphere);\n\t});\n\n\tvar camera = new PerspectiveCamera(60, 1, 0.01, 1e8);\n \n\tvar controls = new MapControls(camera, this.rendererCanvas.nativeElement);\n\tcontrols.minDistance = UnitsUtils.EARTH_RADIUS + 3e4;\n\tcontrols.maxDistance = UnitsUtils.EARTH_RADIUS * 1e1;\n\tcontrols.enablePan = false;\n\tcontrols.zoomSpeed = 0.7;\n\tcontrols.rotateSpeed = 0.3; \n\tcontrols.mouseButtons = {\n\t\tLEFT: MOUSE.ROTATE,\n\t\tMIDDLE: MOUSE.DOLLY,\n\t\tRIGHT: MOUSE.PAN\n\t};\n\n\t// Set initial camera position \n\tcamera.position.set(0, 0, UnitsUtils.EARTH_RADIUS + 1e7);\n\n\treturn {camera: camera, controls: controls, scene: scene};\n}\n\ncreateMapScene(): any\n{\n\tvar camera = new PerspectiveCamera(60, 1, 0.01, 1e12);\n\n\tvar controls = new MapControls(camera, this.rendererCanvas.nativeElement);\n\tcontrols.minDistance = 1.0;\n\tcontrols.zoomSpeed = 1.0;\n\n\tvar scene = new Scene();\n\tscene.background = new Color(0x444444);\n\n\tvar provider = new BingMapsProvider('', BingMapsProvider.AERIAL); // new OpenStreetMapsProvider()\n\n\tvar map = new MapView(MapView.PLANAR, provider);\n\tscene.add(map);\n\tmap.updateMatrixWorld(true);\n\n\tscene.add(new AmbientLight(0x777777));\n\n\treturn {camera: camera, controls: controls, scene: scene};\n}\n\nanimate(): void\n{\n\t//requestAnimationFrame(this.animate);\n this.frameId = requestAnimationFrame(() => {\n\t\tthis.animate();\n\t });\n\tconst s = this.scenes[this.active];\n\n\ts.controls.update();\n\tthis.renderer.render(s.scene, s.camera);\n\n\tconst toggleDistance = 2e6;\n\n\tif (this.active === this.SPHERE) \n\t{\n\t\t// Get distance to the surface of earth\n\t\tconst distance = s.controls.getDistance() - UnitsUtils.EARTH_RADIUS;\n\t\tif (distance < toggleDistance) \n\t\t{\n\t\t\t// Set raycaster to the camera center.\n\t\t\tconst pointer = new Vector2(0.0, 0.0);\n\t\t\tthis.raycaster.setFromCamera(pointer, s.camera);\n \n\t\t\t// Raycast from center of the camera to the sphere surface\n\t\t\tconst intersects = this.raycaster.intersectObjects(s.scene.children);\n\t\t\tif (intersects.length > 0) \n\t\t\t{\n\t\t\t\tconst point = intersects[0].point;\n\n\t\t\t\t// Get coordinates from sphere surface\n\t\t\t\tconst pos = UnitsUtils.vectorToDatums(point);\n \n\t\t\t\tconst planeScene = this.scenes[this.PLANE];\n\n\t\t\t\t// Calculate plane coordinates\n\t\t\t\tvar coords = UnitsUtils.datumsToSpherical(pos.latitude, pos.longitude);\n\t\t\t\tplaneScene.controls.target.set(coords.x, 0, -coords.y);\n\t\t\t\tplaneScene.camera.position.set(coords.x, distance, -coords.y);\n\n\t\t\t\tconsole.log('Geo-Three: Switched scene from sphere to plane.', point, pos, coords);\n\n\t\t\t\t// Change scene to \"plane\" earth\n\t\t\t\tthis.active = this.PLANE;\n\t\t\t}\n\t\t}\n\t}\n\telse if (this.active === this.PLANE) \n\t{\n\t\tconst distance = s.controls.getDistance();\n\n\t\ts.controls.minPolarAngle = 0;\n\t\ts.controls.maxPolarAngle = Math.PI / 2;\n\n\t\ts.controls.minAzimuthAngle = -Math.PI;\n\t\ts.controls.maxAzimuthAngle = Math.PI;\n\t\t\n\t\tconst ratio = 0.4;\n\t\tif (distance > toggleDistance * ratio) \n\t\t{\n\t\t\t// Transition progres (0 to 1)\n\t\t\tconst progress = (toggleDistance - distance) / (toggleDistance * (1 - ratio));\n\n\t\t\t// Limit polar angle\n\t\t\ts.controls.maxPolarAngle = progress * Math.PI / 2;\n\t\t\t\n\t\t\t// Limit range of azimuth rotation\n\t\t\ts.controls.minAzimuthAngle = progress * -Math.PI;\n\t\t\ts.controls.maxAzimuthAngle = progress * Math.PI;\n\t\t}\n\n\t\tif (distance > toggleDistance) \n\t\t{\n\t\t\t// Datum coordinates\n\t\t\tconst target = s.controls.target;\n\t\t\tconst coords = UnitsUtils.sphericalToDatums(target.x, -target.z);\n\n\t\t\t// Get sphere surface point from coordinates\n\t\t\tconst dir = UnitsUtils.datumsToVector(coords.latitude, coords.longitude);\n\n\t\t\tconst sphereScene = this.scenes[this.SPHERE];\n\n\t\t\t// Set camera position \n\t\t\tdir.multiplyScalar(UnitsUtils.EARTH_RADIUS + distance);\n\t\t\tsphereScene.camera.position.copy(dir);\n\n\t\t\tconsole.log('Geo-Three: Switched scene from plane to sphere.', s.controls, coords, dir);\n\n\t\t\t// Change to spherical earth model\n\t\t\tthis.active = this.SPHERE;\n\t\t}\n\t}\n}\npublic ngOnDestroy(): void {\n if (this.frameId != null) {\n cancelAnimationFrame(this.frameId);\n }\n if (this.renderer != null) {\n this.renderer.dispose();\n this.renderer = null;\n //this.canvas = null;\n }\n }\n}\n","
\n \n \n
\n \n ","import {Component, ElementRef, HostListener, OnInit, ViewChild} from '@angular/core';\nimport {EngineService} from './engine.service';\n\n@Component({\n selector: 'app-engine',\n templateUrl: './engine.component.html'\n})\nexport class EngineComponent implements OnInit {\n\n @ViewChild('rendererCanvas', {static: true})\n public rendererCanvas: ElementRef;\n @ViewChild('rendererCanvas1', {static: true})\n public rendererCanvas1: ElementRef;\n lastMove:any=[0,0];\n public constructor(private engServ: EngineService) {\n }\n\n public ngOnInit(): void {\n this.engServ.createScene(this.rendererCanvas);\n this.engServ.animate();\n\n // this.engServ.createScene1(this.rendererCanvas1);\n // this.engServ.animate1();\n }\n // @HostListener('document:mousemove', ['$event']) \n // onMouseMove(e) {\n // //console.log(e);\n // this.engServ.mouse.x=(e.clientX/innerWidth)*2-1;\n // this.engServ.mouse.y=-(e.clientY/innerHeight)*2+1;\n // }\n // @HostListener('document:mousedown', ['$event']) \n // onMouseDown(e) {\n // this.engServ.E.down=!0;\n // this.engServ.E.xPrev=e.clientX;\n // this.engServ.E.yPrev=e.clientY/innerHeight;\n\n // }\n // @HostListener('document:mousedown', ['$event']) \n // onMouseMove(e) {\n \n\n\n // if(!e) return;\n // this.engServ.mousePosition.x = 2 * (e.clientX / window.innerWidth) - 1;\n // this.engServ.mousePosition.y = 1 - 2 * (e.clientY / window.innerHeight);\n//this.engServ.onMouseMove();\n\n\n\n\n\n\n\n\n\n // this.engServ.E.x=(e.clientX/innerWidth)*20-1;\n // this.engServ.E.y=-(e.clientY/innerHeight)*20+1;\n\n // if (innerWidth >= 1280) \n // this.engServ.E.x = (e.clientX - innerWidth / 2) / (innerWidth / 2) * 2 - 1, \n // this.engServ.E.y = -e.clientY / innerHeight * 2 + 1;\n // else {\n // var o = e.getBoundingClientRect().top;\n // this.engServ.E.x = e.clientX / innerWidth * 2 - 1, \n // this.engServ.E.y = -(e.clientY - o) / innerHeight * 2 + 1, \n // console.log(this.engServ.E.y)\n // }\n\n // this.engServ.E.x1 = e.clientX - this.engServ.E.xPrev;\n // this.engServ.E.y1 = e.clientY - this.engServ.E.yPrev;\n \n\n\n\n // const moveX = ( e.clientX - this.lastMove[0]);\n // const moveY = ( e.clientY - this.lastMove[1]);\n // //rotate the globe based on distance of mouse moves (x and y) \n // this.engServ.E.y += ( moveX * .05);\n // this.engServ.E.x += ( moveY * .05);\n\n // //store new position in lastMove\n // this.lastMove[0] = e.clientX;\n // this.lastMove[1] = e.clientY;\n // e.preventDefault();\n //}\n // @HostListener('document:mouseup', ['$event']) \n // onMouseUp(e) {\n // this.engServ.E.down=!1;\n \n // }\n // @HostListener('document:mousedown', ['$event']) \n // onMouseMove(e) {\n // console.log(e);\n // this.engServ.E.x=(e.clientX/innerWidth)*20-1;\n // this.engServ.E.y=-(e.clientY/innerHeight)*20+1;\n \n // }\n// @HostListener('window:resize', ['$event'])\n// onResize(event) {\n// console.log(event.target.innerWidth);\n// this.engServ.resize();\n// }\n@HostListener('window:DOMContentLoaded', ['$event'])\nDOMContentLoaded() {\n this.engServ.render();\n}\n@HostListener('window:dblclick', ['$event'])\nonDblclick(event) {\nconsole.log(event.target.innerWidth);\n this.engServ.onDoubleClick(event.clientX,event.clientY);\n}\n}\n","
\n \n \n \n\n\n
\n\n\n","import gsap from \"gsap\";\nimport * as THREE from 'three';\n\nimport {ElementRef, Injectable, NgZone, OnDestroy} from '@angular/core';\nimport vertexShader from '../../assets/shaders/vertex.glsl';\nimport fragmentShader from '../../assets/shaders/fragment.glsl';\nimport atmosphereVertexShader from '../../assets/shaders/atmosphereVertex.glsl';\nimport atmosphereFragmentShader from '../../assets/shaders/atmosphereFragment.glsl';\nimport { OrbitControls } from \"three-orbitcontrols-ts\";\n//import { Map } from \"@maptiler/sdk\";\n\nexport { THREE };\n@Injectable({providedIn: 'root'})\nexport class EngineService implements OnDestroy {\nprivate controls=null;\n\n private canvas: HTMLCanvasElement;\n private renderer: THREE.WebGLRenderer;\n private camera: THREE.PerspectiveCamera;\n private scene: THREE.Scene;\n private light: THREE.AmbientLight;\n vertexShader:string;\n fragmentShader:string;\n atmosphereVertexShader:string;\n atmosphereFragmentShader:string;\n private sphere: THREE.Mesh;\n private group=new THREE.Group();\n //private starGeometry= new THREE.BufferGeometry();\n private frameId: number = null;\n //map: Map | undefined;\n initialState = { lng: 139.753, lat: 35.6844, zoom: 14 };\n\n data=[\n {\n \"country\" : \"Albania\",\n \"alpha2\" : \"AL\",\n \"alpha3\" : \"ALB\",\n \"numeric\" : 8,\n \"latitude\" : 41,\n \"longitude\" : 20\n },\n {\n \"country\" : \"Algeria\",\n \"alpha2\" : \"DZ\",\n \"alpha3\" : \"DZA\",\n \"numeric\" : 12,\n \"latitude\" : 28,\n \"longitude\" : 3\n },\n {\n \"country\" : \"American Samoa\",\n \"alpha2\" : \"AS\",\n \"alpha3\" : \"ASM\",\n \"numeric\" : 16,\n \"latitude\" : -14.3333,\n \"longitude\" : -170\n },\n {\n \"country\" : \"Andorra\",\n \"alpha2\" : \"AD\",\n \"alpha3\" : \"AND\",\n \"numeric\" : 20,\n \"latitude\" : 42.5,\n \"longitude\" : 1.6\n },\n {\n \"country\" : \"Angola\",\n \"alpha2\" : \"AO\",\n \"alpha3\" : \"AGO\",\n \"numeric\" : 24,\n \"latitude\" : -12.5,\n \"longitude\" : 18.5\n },\n {\n \"country\" : \"Anguilla\",\n \"alpha2\" : \"AI\",\n \"alpha3\" : \"AIA\",\n \"numeric\" : 660,\n \"latitude\" : 18.25,\n \"longitude\" : -63.1667\n },\n {\n \"country\" : \"Antarctica\",\n \"alpha2\" : \"AQ\",\n \"alpha3\" : \"ATA\",\n \"numeric\" : 10,\n \"latitude\" : -90,\n \"longitude\" : 0\n },\n {\n \"country\" : \"Antigua and Barbuda\",\n \"alpha2\" : \"AG\",\n \"alpha3\" : \"ATG\",\n \"numeric\" : 28,\n \"latitude\" : 17.05,\n \"longitude\" : -61.8\n },\n {\n \"country\" : \"Argentina\",\n \"alpha2\" : \"AR\",\n \"alpha3\" : \"ARG\",\n \"numeric\" : 32,\n \"latitude\" : -34,\n \"longitude\" : -64\n },\n {\n \"country\" : \"Armenia\",\n \"alpha2\" : \"AM\",\n \"alpha3\" : \"ARM\",\n \"numeric\" : 51,\n \"latitude\" : 40,\n \"longitude\" : 45\n },\n {\n \"country\" : \"Aruba\",\n \"alpha2\" : \"AW\",\n \"alpha3\" : \"ABW\",\n \"numeric\" : 533,\n \"latitude\" : 12.5,\n \"longitude\" : -69.9667\n },\n {\n \"country\" : \"Australia\",\n \"alpha2\" : \"AU\",\n \"alpha3\" : \"AUS\",\n \"numeric\" : 36,\n \"latitude\" : -27,\n \"longitude\" : 133\n },\n {\n \"country\" : \"Austria\",\n \"alpha2\" : \"AT\",\n \"alpha3\" : \"AUT\",\n \"numeric\" : 40,\n \"latitude\" : 47.3333,\n \"longitude\" : 13.3333\n },\n {\n \"country\" : \"Azerbaijan\",\n \"alpha2\" : \"AZ\",\n \"alpha3\" : \"AZE\",\n \"numeric\" : 31,\n \"latitude\" : 40.5,\n \"longitude\" : 47.5\n },\n {\n \"country\" : \"Bahamas\",\n \"alpha2\" : \"BS\",\n \"alpha3\" : \"BHS\",\n \"numeric\" : 44,\n \"latitude\" : 24.25,\n \"longitude\" : -76\n },\n {\n \"country\" : \"Bahrain\",\n \"alpha2\" : \"BH\",\n \"alpha3\" : \"BHR\",\n \"numeric\" : 48,\n \"latitude\" : 26,\n \"longitude\" : 50.55\n },\n {\n \"country\" : \"Bangladesh\",\n \"alpha2\" : \"BD\",\n \"alpha3\" : \"BGD\",\n \"numeric\" : 50,\n \"latitude\" : 24,\n \"longitude\" : 90\n },\n {\n \"country\" : \"Barbados\",\n \"alpha2\" : \"BB\",\n \"alpha3\" : \"BRB\",\n \"numeric\" : 52,\n \"latitude\" : 13.1667,\n \"longitude\" : -59.5333\n },\n {\n \"country\" : \"Belarus\",\n \"alpha2\" : \"BY\",\n \"alpha3\" : \"BLR\",\n \"numeric\" : 112,\n \"latitude\" : 53,\n \"longitude\" : 28\n },\n {\n \"country\" : \"Belgium\",\n \"alpha2\" : \"BE\",\n \"alpha3\" : \"BEL\",\n \"numeric\" : 56,\n \"latitude\" : 50.8333,\n \"longitude\" : 4\n },\n {\n \"country\" : \"Belize\",\n \"alpha2\" : \"BZ\",\n \"alpha3\" : \"BLZ\",\n \"numeric\" : 84,\n \"latitude\" : 17.25,\n \"longitude\" : -88.75\n },\n {\n \"country\" : \"Benin\",\n \"alpha2\" : \"BJ\",\n \"alpha3\" : \"BEN\",\n \"numeric\" : 204,\n \"latitude\" : 9.5,\n \"longitude\" : 2.25\n },\n {\n \"country\" : \"Bermuda\",\n \"alpha2\" : \"BM\",\n \"alpha3\" : \"BMU\",\n \"numeric\" : 60,\n \"latitude\" : 32.3333,\n \"longitude\" : -64.75\n },\n {\n \"country\" : \"Bhutan\",\n \"alpha2\" : \"BT\",\n \"alpha3\" : \"BTN\",\n \"numeric\" : 64,\n \"latitude\" : 27.5,\n \"longitude\" : 90.5\n },\n {\n \"country\" : \"Bolivia, Plurinational State of\",\n \"alpha2\" : \"BO\",\n \"alpha3\" : \"BOL\",\n \"numeric\" : 68,\n \"latitude\" : -17,\n \"longitude\" : -65\n },\n {\n \"country\" : \"Bosnia and Herzegovina\",\n \"alpha2\" : \"BA\",\n \"alpha3\" : \"BIH\",\n \"numeric\" : 70,\n \"latitude\" : 44,\n \"longitude\" : 18\n },\n {\n \"country\" : \"Botswana\",\n \"alpha2\" : \"BW\",\n \"alpha3\" : \"BWA\",\n \"numeric\" : 72,\n \"latitude\" : -22,\n \"longitude\" : 24\n },\n {\n \"country\" : \"Bouvet Island\",\n \"alpha2\" : \"BV\",\n \"alpha3\" : \"BVT\",\n \"numeric\" : 74,\n \"latitude\" : -54.4333,\n \"longitude\" : 3.4\n },\n {\n \"country\" : \"Brazil\",\n \"alpha2\" : \"BR\",\n \"alpha3\" : \"BRA\",\n \"numeric\" : 76,\n \"latitude\" : -10,\n \"longitude\" : -55\n },\n {\n \"country\" : \"British Indian Ocean Territory\",\n \"alpha2\" : \"IO\",\n \"alpha3\" : \"IOT\",\n \"numeric\" : 86,\n \"latitude\" : -6,\n \"longitude\" : 71.5\n },\n {\n \"country\" : \"Brunei Darussalam\",\n \"alpha2\" : \"BN\",\n \"alpha3\" : \"BRN\",\n \"numeric\" : 96,\n \"latitude\" : 4.5,\n \"longitude\" : 114.6667\n },\n {\n \"country\" : \"Bulgaria\",\n \"alpha2\" : \"BG\",\n \"alpha3\" : \"BGR\",\n \"numeric\" : 100,\n \"latitude\" : 43,\n \"longitude\" : 25\n },\n {\n \"country\" : \"Burkina Faso\",\n \"alpha2\" : \"BF\",\n \"alpha3\" : \"BFA\",\n \"numeric\" : 854,\n \"latitude\" : 13,\n \"longitude\" : -2\n },\n {\n \"country\" : \"Burundi\",\n \"alpha2\" : \"BI\",\n \"alpha3\" : \"BDI\",\n \"numeric\" : 108,\n \"latitude\" : -3.5,\n \"longitude\" : 30\n },\n {\n \"country\" : \"Cambodia\",\n \"alpha2\" : \"KH\",\n \"alpha3\" : \"KHM\",\n \"numeric\" : 116,\n \"latitude\" : 13,\n \"longitude\" : 105\n },\n {\n \"country\" : \"Cameroon\",\n \"alpha2\" : \"CM\",\n \"alpha3\" : \"CMR\",\n \"numeric\" : 120,\n \"latitude\" : 6,\n \"longitude\" : 12\n },\n {\n \"country\" : \"Canada\",\n \"alpha2\" : \"CA\",\n \"alpha3\" : \"CAN\",\n \"numeric\" : 124,\n \"latitude\" : 60,\n \"longitude\" : -95\n },\n {\n \"country\" : \"Cape Verde\",\n \"alpha2\" : \"CV\",\n \"alpha3\" : \"CPV\",\n \"numeric\" : 132,\n \"latitude\" : 16,\n \"longitude\" : -24\n },\n {\n \"country\" : \"Cayman Islands\",\n \"alpha2\" : \"KY\",\n \"alpha3\" : \"CYM\",\n \"numeric\" : 136,\n \"latitude\" : 19.5,\n \"longitude\" : -80.5\n },\n {\n \"country\" : \"Central African Republic\",\n \"alpha2\" : \"CF\",\n \"alpha3\" : \"CAF\",\n \"numeric\" : 140,\n \"latitude\" : 7,\n \"longitude\" : 21\n },\n {\n \"country\" : \"Chad\",\n \"alpha2\" : \"TD\",\n \"alpha3\" : \"TCD\",\n \"numeric\" : 148,\n \"latitude\" : 15,\n \"longitude\" : 19\n },\n {\n \"country\" : \"Chile\",\n \"alpha2\" : \"CL\",\n \"alpha3\" : \"CHL\",\n \"numeric\" : 152,\n \"latitude\" : -30,\n \"longitude\" : -71\n },\n {\n \"country\" : \"China\",\n \"alpha2\" : \"CN\",\n \"alpha3\" : \"CHN\",\n \"numeric\" : 156,\n \"latitude\" : 35,\n \"longitude\" : 105\n },\n {\n \"country\" : \"Christmas Island\",\n \"alpha2\" : \"CX\",\n \"alpha3\" : \"CXR\",\n \"numeric\" : 162,\n \"latitude\" : -10.5,\n \"longitude\" : 105.6667\n },\n {\n \"country\" : \"Cocos (Keeling) Islands\",\n \"alpha2\" : \"CC\",\n \"alpha3\" : \"CCK\",\n \"numeric\" : 166,\n \"latitude\" : -12.5,\n \"longitude\" : 96.8333\n },\n {\n \"country\" : \"Colombia\",\n \"alpha2\" : \"CO\",\n \"alpha3\" : \"COL\",\n \"numeric\" : 170,\n \"latitude\" : 4,\n \"longitude\" : -72\n },\n {\n \"country\" : \"Comoros\",\n \"alpha2\" : \"KM\",\n \"alpha3\" : \"COM\",\n \"numeric\" : 174,\n \"latitude\" : -12.1667,\n \"longitude\" : 44.25\n },\n {\n \"country\" : \"Congo\",\n \"alpha2\" : \"CG\",\n \"alpha3\" : \"COG\",\n \"numeric\" : 178,\n \"latitude\" : -1,\n \"longitude\" : 15\n },\n {\n \"country\" : \"Congo, the Democratic Republic of the\",\n \"alpha2\" : \"CD\",\n \"alpha3\" : \"COD\",\n \"numeric\" : 180,\n \"latitude\" : 0,\n \"longitude\" : 25\n },\n {\n \"country\" : \"Cook Islands\",\n \"alpha2\" : \"CK\",\n \"alpha3\" : \"COK\",\n \"numeric\" : 184,\n \"latitude\" : -21.2333,\n \"longitude\" : -159.7667\n },\n {\n \"country\" : \"Costa Rica\",\n \"alpha2\" : \"CR\",\n \"alpha3\" : \"CRI\",\n \"numeric\" : 188,\n \"latitude\" : 10,\n \"longitude\" : -84\n },\n {\n \"country\" : \"Côte d'Ivoire\",\n \"alpha2\" : \"CI\",\n \"alpha3\" : \"CIV\",\n \"numeric\" : 384,\n \"latitude\" : 8,\n \"longitude\" : -5\n },\n {\n \"country\" : \"Croatia\",\n \"alpha2\" : \"HR\",\n \"alpha3\" : \"HRV\",\n \"numeric\" : 191,\n \"latitude\" : 45.1667,\n \"longitude\" : 15.5\n },\n {\n \"country\" : \"Cuba\",\n \"alpha2\" : \"CU\",\n \"alpha3\" : \"CUB\",\n \"numeric\" : 192,\n \"latitude\" : 21.5,\n \"longitude\" : -80\n },\n {\n \"country\" : \"Cyprus\",\n \"alpha2\" : \"CY\",\n \"alpha3\" : \"CYP\",\n \"numeric\" : 196,\n \"latitude\" : 35,\n \"longitude\" : 33\n },\n {\n \"country\" : \"Czech Republic\",\n \"alpha2\" : \"CZ\",\n \"alpha3\" : \"CZE\",\n \"numeric\" : 203,\n \"latitude\" : 49.75,\n \"longitude\" : 15.5\n },\n {\n \"country\" : \"Denmark\",\n \"alpha2\" : \"DK\",\n \"alpha3\" : \"DNK\",\n \"numeric\" : 208,\n \"latitude\" : 56,\n \"longitude\" : 10\n },\n {\n \"country\" : \"Djibouti\",\n \"alpha2\" : \"DJ\",\n \"alpha3\" : \"DJI\",\n \"numeric\" : 262,\n \"latitude\" : 11.5,\n \"longitude\" : 43\n },\n {\n \"country\" : \"Dominica\",\n \"alpha2\" : \"DM\",\n \"alpha3\" : \"DMA\",\n \"numeric\" : 212,\n \"latitude\" : 15.4167,\n \"longitude\" : -61.3333\n },\n {\n \"country\" : \"Dominican Republic\",\n \"alpha2\" : \"DO\",\n \"alpha3\" : \"DOM\",\n \"numeric\" : 214,\n \"latitude\" : 19,\n \"longitude\" : -70.6667\n },\n {\n \"country\" : \"Ecuador\",\n \"alpha2\" : \"EC\",\n \"alpha3\" : \"ECU\",\n \"numeric\" : 218,\n \"latitude\" : -2,\n \"longitude\" : -77.5\n },\n {\n \"country\" : \"Egypt\",\n \"alpha2\" : \"EG\",\n \"alpha3\" : \"EGY\",\n \"numeric\" : 818,\n \"latitude\" : 27,\n \"longitude\" : 30\n },\n {\n \"country\" : \"El Salvador\",\n \"alpha2\" : \"SV\",\n \"alpha3\" : \"SLV\",\n \"numeric\" : 222,\n \"latitude\" : 13.8333,\n \"longitude\" : -88.9167\n },\n {\n \"country\" : \"Equatorial Guinea\",\n \"alpha2\" : \"GQ\",\n \"alpha3\" : \"GNQ\",\n \"numeric\" : 226,\n \"latitude\" : 2,\n \"longitude\" : 10\n },\n {\n \"country\" : \"Eritrea\",\n \"alpha2\" : \"ER\",\n \"alpha3\" : \"ERI\",\n \"numeric\" : 232,\n \"latitude\" : 15,\n \"longitude\" : 39\n },\n {\n \"country\" : \"Estonia\",\n \"alpha2\" : \"EE\",\n \"alpha3\" : \"EST\",\n \"numeric\" : 233,\n \"latitude\" : 59,\n \"longitude\" : 26\n },\n {\n \"country\" : \"Ethiopia\",\n \"alpha2\" : \"ET\",\n \"alpha3\" : \"ETH\",\n \"numeric\" : 231,\n \"latitude\" : 8,\n \"longitude\" : 38\n },\n {\n \"country\" : \"Falkland Islands (Malvinas)\",\n \"alpha2\" : \"FK\",\n \"alpha3\" : \"FLK\",\n \"numeric\" : 238,\n \"latitude\" : -51.75,\n \"longitude\" : -59\n },\n {\n \"country\" : \"Faroe Islands\",\n \"alpha2\" : \"FO\",\n \"alpha3\" : \"FRO\",\n \"numeric\" : 234,\n \"latitude\" : 62,\n \"longitude\" : -7\n },\n {\n \"country\" : \"Fiji\",\n \"alpha2\" : \"FJ\",\n \"alpha3\" : \"FJI\",\n \"numeric\" : 242,\n \"latitude\" : -18,\n \"longitude\" : 175\n },\n {\n \"country\" : \"Finland\",\n \"alpha2\" : \"FI\",\n \"alpha3\" : \"FIN\",\n \"numeric\" : 246,\n \"latitude\" : 64,\n \"longitude\" : 26\n },\n {\n \"country\" : \"France\",\n \"alpha2\" : \"FR\",\n \"alpha3\" : \"FRA\",\n \"numeric\" : 250,\n \"latitude\" : 46,\n \"longitude\" : 2\n },\n {\n \"country\" : \"French Guiana\",\n \"alpha2\" : \"GF\",\n \"alpha3\" : \"GUF\",\n \"numeric\" : 254,\n \"latitude\" : 4,\n \"longitude\" : -53\n },\n {\n \"country\" : \"French Polynesia\",\n \"alpha2\" : \"PF\",\n \"alpha3\" : \"PYF\",\n \"numeric\" : 258,\n \"latitude\" : -15,\n \"longitude\" : -140\n },\n {\n \"country\" : \"French Southern Territories\",\n \"alpha2\" : \"TF\",\n \"alpha3\" : \"ATF\",\n \"numeric\" : 260,\n \"latitude\" : -43,\n \"longitude\" : 67\n },\n {\n \"country\" : \"Gabon\",\n \"alpha2\" : \"GA\",\n \"alpha3\" : \"GAB\",\n \"numeric\" : 266,\n \"latitude\" : -1,\n \"longitude\" : 11.75\n },\n {\n \"country\" : \"Gambia\",\n \"alpha2\" : \"GM\",\n \"alpha3\" : \"GMB\",\n \"numeric\" : 270,\n \"latitude\" : 13.4667,\n \"longitude\" : -16.5667\n },\n {\n \"country\" : \"Georgia\",\n \"alpha2\" : \"GE\",\n \"alpha3\" : \"GEO\",\n \"numeric\" : 268,\n \"latitude\" : 42,\n \"longitude\" : 43.5\n },\n {\n \"country\" : \"Germany\",\n \"alpha2\" : \"DE\",\n \"alpha3\" : \"DEU\",\n \"numeric\" : 276,\n \"latitude\" : 51,\n \"longitude\" : 9\n },\n {\n \"country\" : \"Ghana\",\n \"alpha2\" : \"GH\",\n \"alpha3\" : \"GHA\",\n \"numeric\" : 288,\n \"latitude\" : 8,\n \"longitude\" : -2\n },\n {\n \"country\" : \"Gibraltar\",\n \"alpha2\" : \"GI\",\n \"alpha3\" : \"GIB\",\n \"numeric\" : 292,\n \"latitude\" : 36.1833,\n \"longitude\" : -5.3667\n },\n {\n \"country\" : \"Greece\",\n \"alpha2\" : \"GR\",\n \"alpha3\" : \"GRC\",\n \"numeric\" : 300,\n \"latitude\" : 39,\n \"longitude\" : 22\n },\n {\n \"country\" : \"Greenland\",\n \"alpha2\" : \"GL\",\n \"alpha3\" : \"GRL\",\n \"numeric\" : 304,\n \"latitude\" : 72,\n \"longitude\" : -40\n },\n {\n \"country\" : \"Grenada\",\n \"alpha2\" : \"GD\",\n \"alpha3\" : \"GRD\",\n \"numeric\" : 308,\n \"latitude\" : 12.1167,\n \"longitude\" : -61.6667\n },\n {\n \"country\" : \"Guadeloupe\",\n \"alpha2\" : \"GP\",\n \"alpha3\" : \"GLP\",\n \"numeric\" : 312,\n \"latitude\" : 16.25,\n \"longitude\" : -61.5833\n },\n {\n \"country\" : \"Guam\",\n \"alpha2\" : \"GU\",\n \"alpha3\" : \"GUM\",\n \"numeric\" : 316,\n \"latitude\" : 13.4667,\n \"longitude\" : 144.7833\n },\n {\n \"country\" : \"Guatemala\",\n \"alpha2\" : \"GT\",\n \"alpha3\" : \"GTM\",\n \"numeric\" : 320,\n \"latitude\" : 15.5,\n \"longitude\" : -90.25\n },\n {\n \"country\" : \"Guernsey\",\n \"alpha2\" : \"GG\",\n \"alpha3\" : \"GGY\",\n \"numeric\" : 831,\n \"latitude\" : 49.5,\n \"longitude\" : -2.56\n },\n {\n \"country\" : \"Guinea\",\n \"alpha2\" : \"GN\",\n \"alpha3\" : \"GIN\",\n \"numeric\" : 324,\n \"latitude\" : 11,\n \"longitude\" : -10\n },\n {\n \"country\" : \"Guinea-Bissau\",\n \"alpha2\" : \"GW\",\n \"alpha3\" : \"GNB\",\n \"numeric\" : 624,\n \"latitude\" : 12,\n \"longitude\" : -15\n },\n {\n \"country\" : \"Guyana\",\n \"alpha2\" : \"GY\",\n \"alpha3\" : \"GUY\",\n \"numeric\" : 328,\n \"latitude\" : 5,\n \"longitude\" : -59\n },\n {\n \"country\" : \"Haiti\",\n \"alpha2\" : \"HT\",\n \"alpha3\" : \"HTI\",\n \"numeric\" : 332,\n \"latitude\" : 19,\n \"longitude\" : -72.4167\n },\n {\n \"country\" : \"Heard Island and McDonald Islands\",\n \"alpha2\" : \"HM\",\n \"alpha3\" : \"HMD\",\n \"numeric\" : 334,\n \"latitude\" : -53.1,\n \"longitude\" : 72.5167\n },\n {\n \"country\" : \"Holy See (Vatican City State)\",\n \"alpha2\" : \"VA\",\n \"alpha3\" : \"VAT\",\n \"numeric\" : 336,\n \"latitude\" : 41.9,\n \"longitude\" : 12.45\n },\n {\n \"country\" : \"Honduras\",\n \"alpha2\" : \"HN\",\n \"alpha3\" : \"HND\",\n \"numeric\" : 340,\n \"latitude\" : 15,\n \"longitude\" : -86.5\n },\n {\n \"country\" : \"Hong Kong\",\n \"alpha2\" : \"HK\",\n \"alpha3\" : \"HKG\",\n \"numeric\" : 344,\n \"latitude\" : 22.25,\n \"longitude\" : 114.1667\n },\n {\n \"country\" : \"Hungary\",\n \"alpha2\" : \"HU\",\n \"alpha3\" : \"HUN\",\n \"numeric\" : 348,\n \"latitude\" : 47,\n \"longitude\" : 20\n },\n {\n \"country\" : \"Iceland\",\n \"alpha2\" : \"IS\",\n \"alpha3\" : \"ISL\",\n \"numeric\" : 352,\n \"latitude\" : 65,\n \"longitude\" : -18\n },\n {\n \"country\" : \"India\",\n \"alpha2\" : \"IN\",\n \"alpha3\" : \"IND\",\n \"numeric\" : 356,\n \"latitude\" : 20,\n \"longitude\" : 77\n },\n {\n \"country\" : \"Indonesia\",\n \"alpha2\" : \"ID\",\n \"alpha3\" : \"IDN\",\n \"numeric\" : 360,\n \"latitude\" : -5,\n \"longitude\" : 120\n },\n {\n \"country\" : \"Iran, Islamic Republic of\",\n \"alpha2\" : \"IR\",\n \"alpha3\" : \"IRN\",\n \"numeric\" : 364,\n \"latitude\" : 32,\n \"longitude\" : 53\n },\n {\n \"country\" : \"Iraq\",\n \"alpha2\" : \"IQ\",\n \"alpha3\" : \"IRQ\",\n \"numeric\" : 368,\n \"latitude\" : 33,\n \"longitude\" : 44\n },\n {\n \"country\" : \"Ireland\",\n \"alpha2\" : \"IE\",\n \"alpha3\" : \"IRL\",\n \"numeric\" : 372,\n \"latitude\" : 53,\n \"longitude\" : -8\n },\n {\n \"country\" : \"Isle of Man\",\n \"alpha2\" : \"IM\",\n \"alpha3\" : \"IMN\",\n \"numeric\" : 833,\n \"latitude\" : 54.23,\n \"longitude\" : -4.55\n },\n {\n \"country\" : \"Israel\",\n \"alpha2\" : \"IL\",\n \"alpha3\" : \"ISR\",\n \"numeric\" : 376,\n \"latitude\" : 31.5,\n \"longitude\" : 34.75\n },\n {\n \"country\" : \"Italy\",\n \"alpha2\" : \"IT\",\n \"alpha3\" : \"ITA\",\n \"numeric\" : 380,\n \"latitude\" : 42.8333,\n \"longitude\" : 12.8333\n },\n {\n \"country\" : \"Jamaica\",\n \"alpha2\" : \"JM\",\n \"alpha3\" : \"JAM\",\n \"numeric\" : 388,\n \"latitude\" : 18.25,\n \"longitude\" : -77.5\n },\n {\n \"country\" : \"Japan\",\n \"alpha2\" : \"JP\",\n \"alpha3\" : \"JPN\",\n \"numeric\" : 392,\n \"latitude\" : 36,\n \"longitude\" : 138\n },\n {\n \"country\" : \"Jersey\",\n \"alpha2\" : \"JE\",\n \"alpha3\" : \"JEY\",\n \"numeric\" : 832,\n \"latitude\" : 49.21,\n \"longitude\" : -2.13\n },\n {\n \"country\" : \"Jordan\",\n \"alpha2\" : \"JO\",\n \"alpha3\" : \"JOR\",\n \"numeric\" : 400,\n \"latitude\" : 31,\n \"longitude\" : 36\n },\n {\n \"country\" : \"Kazakhstan\",\n \"alpha2\" : \"KZ\",\n \"alpha3\" : \"KAZ\",\n \"numeric\" : 398,\n \"latitude\" : 48,\n \"longitude\" : 68\n },\n {\n \"country\" : \"Kenya\",\n \"alpha2\" : \"KE\",\n \"alpha3\" : \"KEN\",\n \"numeric\" : 404,\n \"latitude\" : 1,\n \"longitude\" : 38\n },\n {\n \"country\" : \"Kiribati\",\n \"alpha2\" : \"KI\",\n \"alpha3\" : \"KIR\",\n \"numeric\" : 296,\n \"latitude\" : 1.4167,\n \"longitude\" : 173\n },\n {\n \"country\" : \"Korea, Democratic People's Republic of\",\n \"alpha2\" : \"KP\",\n \"alpha3\" : \"PRK\",\n \"numeric\" : 408,\n \"latitude\" : 40,\n \"longitude\" : 127\n },\n {\n \"country\" : \"Korea, Republic of\",\n \"alpha2\" : \"KR\",\n \"alpha3\" : \"KOR\",\n \"numeric\" : 410,\n \"latitude\" : 37,\n \"longitude\" : 127.5\n },\n {\n \"country\" : \"Kuwait\",\n \"alpha2\" : \"KW\",\n \"alpha3\" : \"KWT\",\n \"numeric\" : 414,\n \"latitude\" : 29.3375,\n \"longitude\" : 47.6581\n },\n {\n \"country\" : \"Kyrgyzstan\",\n \"alpha2\" : \"KG\",\n \"alpha3\" : \"KGZ\",\n \"numeric\" : 417,\n \"latitude\" : 41,\n \"longitude\" : 75\n },\n {\n \"country\" : \"Lao People's Democratic Republic\",\n \"alpha2\" : \"LA\",\n \"alpha3\" : \"LAO\",\n \"numeric\" : 418,\n \"latitude\" : 18,\n \"longitude\" : 105\n },\n {\n \"country\" : \"Latvia\",\n \"alpha2\" : \"LV\",\n \"alpha3\" : \"LVA\",\n \"numeric\" : 428,\n \"latitude\" : 57,\n \"longitude\" : 25\n },\n {\n \"country\" : \"Lebanon\",\n \"alpha2\" : \"LB\",\n \"alpha3\" : \"LBN\",\n \"numeric\" : 422,\n \"latitude\" : 33.8333,\n \"longitude\" : 35.8333\n },\n {\n \"country\" : \"Lesotho\",\n \"alpha2\" : \"LS\",\n \"alpha3\" : \"LSO\",\n \"numeric\" : 426,\n \"latitude\" : -29.5,\n \"longitude\" : 28.5\n },\n {\n \"country\" : \"Liberia\",\n \"alpha2\" : \"LR\",\n \"alpha3\" : \"LBR\",\n \"numeric\" : 430,\n \"latitude\" : 6.5,\n \"longitude\" : -9.5\n },\n {\n \"country\" : \"Libyan Arab Jamahiriya\",\n \"alpha2\" : \"LY\",\n \"alpha3\" : \"LBY\",\n \"numeric\" : 434,\n \"latitude\" : 25,\n \"longitude\" : 17\n },\n {\n \"country\" : \"Liechtenstein\",\n \"alpha2\" : \"LI\",\n \"alpha3\" : \"LIE\",\n \"numeric\" : 438,\n \"latitude\" : 47.1667,\n \"longitude\" : 9.5333\n },\n {\n \"country\" : \"Lithuania\",\n \"alpha2\" : \"LT\",\n \"alpha3\" : \"LTU\",\n \"numeric\" : 440,\n \"latitude\" : 56,\n \"longitude\" : 24\n },\n {\n \"country\" : \"Luxembourg\",\n \"alpha2\" : \"LU\",\n \"alpha3\" : \"LUX\",\n \"numeric\" : 442,\n \"latitude\" : 49.75,\n \"longitude\" : 6.1667\n },\n {\n \"country\" : \"Macao\",\n \"alpha2\" : \"MO\",\n \"alpha3\" : \"MAC\",\n \"numeric\" : 446,\n \"latitude\" : 22.1667,\n \"longitude\" : 113.55\n },\n {\n \"country\" : \"Macedonia, the former Yugoslav Republic of\",\n \"alpha2\" : \"MK\",\n \"alpha3\" : \"MKD\",\n \"numeric\" : 807,\n \"latitude\" : 41.8333,\n \"longitude\" : 22\n },\n {\n \"country\" : \"Madagascar\",\n \"alpha2\" : \"MG\",\n \"alpha3\" : \"MDG\",\n \"numeric\" : 450,\n \"latitude\" : -20,\n \"longitude\" : 47\n },\n {\n \"country\" : \"Malawi\",\n \"alpha2\" : \"MW\",\n \"alpha3\" : \"MWI\",\n \"numeric\" : 454,\n \"latitude\" : -13.5,\n \"longitude\" : 34\n },\n {\n \"country\" : \"Malaysia\",\n \"alpha2\" : \"MY\",\n \"alpha3\" : \"MYS\",\n \"numeric\" : 458,\n \"latitude\" : 2.5,\n \"longitude\" : 112.5\n },\n {\n \"country\" : \"Maldives\",\n \"alpha2\" : \"MV\",\n \"alpha3\" : \"MDV\",\n \"numeric\" : 462,\n \"latitude\" : 3.25,\n \"longitude\" : 73\n },\n {\n \"country\" : \"Mali\",\n \"alpha2\" : \"ML\",\n \"alpha3\" : \"MLI\",\n \"numeric\" : 466,\n \"latitude\" : 17,\n \"longitude\" : -4\n },\n {\n \"country\" : \"Malta\",\n \"alpha2\" : \"MT\",\n \"alpha3\" : \"MLT\",\n \"numeric\" : 470,\n \"latitude\" : 35.8333,\n \"longitude\" : 14.5833\n },\n {\n \"country\" : \"Marshall Islands\",\n \"alpha2\" : \"MH\",\n \"alpha3\" : \"MHL\",\n \"numeric\" : 584,\n \"latitude\" : 9,\n \"longitude\" : 168\n },\n {\n \"country\" : \"Martinique\",\n \"alpha2\" : \"MQ\",\n \"alpha3\" : \"MTQ\",\n \"numeric\" : 474,\n \"latitude\" : 14.6667,\n \"longitude\" : -61\n },\n {\n \"country\" : \"Mauritania\",\n \"alpha2\" : \"MR\",\n \"alpha3\" : \"MRT\",\n \"numeric\" : 478,\n \"latitude\" : 20,\n \"longitude\" : -12\n },\n {\n \"country\" : \"Mauritius\",\n \"alpha2\" : \"MU\",\n \"alpha3\" : \"MUS\",\n \"numeric\" : 480,\n \"latitude\" : -20.2833,\n \"longitude\" : 57.55\n },\n {\n \"country\" : \"Mayotte\",\n \"alpha2\" : \"YT\",\n \"alpha3\" : \"MYT\",\n \"numeric\" : 175,\n \"latitude\" : -12.8333,\n \"longitude\" : 45.1667\n },\n {\n \"country\" : \"Mexico\",\n \"alpha2\" : \"MX\",\n \"alpha3\" : \"MEX\",\n \"numeric\" : 484,\n \"latitude\" : 23,\n \"longitude\" : -102\n },\n {\n \"country\" : \"Micronesia, Federated States of\",\n \"alpha2\" : \"FM\",\n \"alpha3\" : \"FSM\",\n \"numeric\" : 583,\n \"latitude\" : 6.9167,\n \"longitude\" : 158.25\n },\n {\n \"country\" : \"Moldova, Republic of\",\n \"alpha2\" : \"MD\",\n \"alpha3\" : \"MDA\",\n \"numeric\" : 498,\n \"latitude\" : 47,\n \"longitude\" : 29\n },\n {\n \"country\" : \"Monaco\",\n \"alpha2\" : \"MC\",\n \"alpha3\" : \"MCO\",\n \"numeric\" : 492,\n \"latitude\" : 43.7333,\n \"longitude\" : 7.4\n },\n {\n \"country\" : \"Mongolia\",\n \"alpha2\" : \"MN\",\n \"alpha3\" : \"MNG\",\n \"numeric\" : 496,\n \"latitude\" : 46,\n \"longitude\" : 105\n },\n {\n \"country\" : \"Montenegro\",\n \"alpha2\" : \"ME\",\n \"alpha3\" : \"MNE\",\n \"numeric\" : 499,\n \"latitude\" : 42,\n \"longitude\" : 19\n },\n {\n \"country\" : \"Montserrat\",\n \"alpha2\" : \"MS\",\n \"alpha3\" : \"MSR\",\n \"numeric\" : 500,\n \"latitude\" : 16.75,\n \"longitude\" : -62.2\n },\n {\n \"country\" : \"Morocco\",\n \"alpha2\" : \"MA\",\n \"alpha3\" : \"MAR\",\n \"numeric\" : 504,\n \"latitude\" : 32,\n \"longitude\" : -5\n },\n {\n \"country\" : \"Mozambique\",\n \"alpha2\" : \"MZ\",\n \"alpha3\" : \"MOZ\",\n \"numeric\" : 508,\n \"latitude\" : -18.25,\n \"longitude\" : 35\n },\n {\n \"country\" : \"Myanmar\",\n \"alpha2\" : \"MM\",\n \"alpha3\" : \"MMR\",\n \"numeric\" : 104,\n \"latitude\" : 22,\n \"longitude\" : 98\n },\n {\n \"country\" : \"Namibia\",\n \"alpha2\" : \"NA\",\n \"alpha3\" : \"NAM\",\n \"numeric\" : 516,\n \"latitude\" : -22,\n \"longitude\" : 17\n },\n {\n \"country\" : \"Nauru\",\n \"alpha2\" : \"NR\",\n \"alpha3\" : \"NRU\",\n \"numeric\" : 520,\n \"latitude\" : -0.5333,\n \"longitude\" : 166.9167\n },\n {\n \"country\" : \"Nepal\",\n \"alpha2\" : \"NP\",\n \"alpha3\" : \"NPL\",\n \"numeric\" : 524,\n \"latitude\" : 28,\n \"longitude\" : 84\n },\n {\n \"country\" : \"Netherlands\",\n \"alpha2\" : \"NL\",\n \"alpha3\" : \"NLD\",\n \"numeric\" : 528,\n \"latitude\" : 52.5,\n \"longitude\" : 5.75\n },\n {\n \"country\" : \"Netherlands Antilles\",\n \"alpha2\" : \"AN\",\n \"alpha3\" : \"ANT\",\n \"numeric\" : 530,\n \"latitude\" : 12.25,\n \"longitude\" : -68.75\n },\n {\n \"country\" : \"New Caledonia\",\n \"alpha2\" : \"NC\",\n \"alpha3\" : \"NCL\",\n \"numeric\" : 540,\n \"latitude\" : -21.5,\n \"longitude\" : 165.5\n },\n {\n \"country\" : \"New Zealand\",\n \"alpha2\" : \"NZ\",\n \"alpha3\" : \"NZL\",\n \"numeric\" : 554,\n \"latitude\" : -41,\n \"longitude\" : 174\n },\n {\n \"country\" : \"Nicaragua\",\n \"alpha2\" : \"NI\",\n \"alpha3\" : \"NIC\",\n \"numeric\" : 558,\n \"latitude\" : 13,\n \"longitude\" : -85\n },\n {\n \"country\" : \"Niger\",\n \"alpha2\" : \"NE\",\n \"alpha3\" : \"NER\",\n \"numeric\" : 562,\n \"latitude\" : 16,\n \"longitude\" : 8\n },\n {\n \"country\" : \"Nigeria\",\n \"alpha2\" : \"NG\",\n \"alpha3\" : \"NGA\",\n \"numeric\" : 566,\n \"latitude\" : 10,\n \"longitude\" : 8\n },\n {\n \"country\" : \"Niue\",\n \"alpha2\" : \"NU\",\n \"alpha3\" : \"NIU\",\n \"numeric\" : 570,\n \"latitude\" : -19.0333,\n \"longitude\" : -169.8667\n },\n {\n \"country\" : \"Norfolk Island\",\n \"alpha2\" : \"NF\",\n \"alpha3\" : \"NFK\",\n \"numeric\" : 574,\n \"latitude\" : -29.0333,\n \"longitude\" : 167.95\n },\n {\n \"country\" : \"Northern Mariana Islands\",\n \"alpha2\" : \"MP\",\n \"alpha3\" : \"MNP\",\n \"numeric\" : 580,\n \"latitude\" : 15.2,\n \"longitude\" : 145.75\n },\n {\n \"country\" : \"Norway\",\n \"alpha2\" : \"NO\",\n \"alpha3\" : \"NOR\",\n \"numeric\" : 578,\n \"latitude\" : 62,\n \"longitude\" : 10\n },\n {\n \"country\" : \"Oman\",\n \"alpha2\" : \"OM\",\n \"alpha3\" : \"OMN\",\n \"numeric\" : 512,\n \"latitude\" : 21,\n \"longitude\" : 57\n },\n {\n \"country\" : \"Pakistan\",\n \"alpha2\" : \"PK\",\n \"alpha3\" : \"PAK\",\n \"numeric\" : 586,\n \"latitude\" : 30,\n \"longitude\" : 70\n },\n {\n \"country\" : \"Palau\",\n \"alpha2\" : \"PW\",\n \"alpha3\" : \"PLW\",\n \"numeric\" : 585,\n \"latitude\" : 7.5,\n \"longitude\" : 134.5\n },\n {\n \"country\" : \"Palestinian Territory, Occupied\",\n \"alpha2\" : \"PS\",\n \"alpha3\" : \"PSE\",\n \"numeric\" : 275,\n \"latitude\" : 32,\n \"longitude\" : 35.25\n },\n {\n \"country\" : \"Panama\",\n \"alpha2\" : \"PA\",\n \"alpha3\" : \"PAN\",\n \"numeric\" : 591,\n \"latitude\" : 9,\n \"longitude\" : -80\n },\n {\n \"country\" : \"Papua New Guinea\",\n \"alpha2\" : \"PG\",\n \"alpha3\" : \"PNG\",\n \"numeric\" : 598,\n \"latitude\" : -6,\n \"longitude\" : 147\n },\n {\n \"country\" : \"Paraguay\",\n \"alpha2\" : \"PY\",\n \"alpha3\" : \"PRY\",\n \"numeric\" : 600,\n \"latitude\" : -23,\n \"longitude\" : -58\n },\n {\n \"country\" : \"Peru\",\n \"alpha2\" : \"PE\",\n \"alpha3\" : \"PER\",\n \"numeric\" : 604,\n \"latitude\" : -10,\n \"longitude\" : -76\n },\n {\n \"country\" : \"Philippines\",\n \"alpha2\" : \"PH\",\n \"alpha3\" : \"PHL\",\n \"numeric\" : 608,\n \"latitude\" : 13,\n \"longitude\" : 122\n },\n {\n \"country\" : \"Pitcairn\",\n \"alpha2\" : \"PN\",\n \"alpha3\" : \"PCN\",\n \"numeric\" : 612,\n \"latitude\" : -24.7,\n \"longitude\" : -127.4\n },\n {\n \"country\" : \"Poland\",\n \"alpha2\" : \"PL\",\n \"alpha3\" : \"POL\",\n \"numeric\" : 616,\n \"latitude\" : 52,\n \"longitude\" : 20\n },\n {\n \"country\" : \"Portugal\",\n \"alpha2\" : \"PT\",\n \"alpha3\" : \"PRT\",\n \"numeric\" : 620,\n \"latitude\" : 39.5,\n \"longitude\" : -8\n },\n {\n \"country\" : \"Puerto Rico\",\n \"alpha2\" : \"PR\",\n \"alpha3\" : \"PRI\",\n \"numeric\" : 630,\n \"latitude\" : 18.25,\n \"longitude\" : -66.5\n },\n {\n \"country\" : \"Qatar\",\n \"alpha2\" : \"QA\",\n \"alpha3\" : \"QAT\",\n \"numeric\" : 634,\n \"latitude\" : 25.5,\n \"longitude\" : 51.25\n },\n {\n \"country\" : \"Réunion\",\n \"alpha2\" : \"RE\",\n \"alpha3\" : \"REU\",\n \"numeric\" : 638,\n \"latitude\" : -21.1,\n \"longitude\" : 55.6\n },\n {\n \"country\" : \"Romania\",\n \"alpha2\" : \"RO\",\n \"alpha3\" : \"ROU\",\n \"numeric\" : 642,\n \"latitude\" : 46,\n \"longitude\" : 25\n },\n {\n \"country\" : \"Russian Federation\",\n \"alpha2\" : \"RU\",\n \"alpha3\" : \"RUS\",\n \"numeric\" : 643,\n \"latitude\" : 60,\n \"longitude\" : 100\n },\n {\n \"country\" : \"Rwanda\",\n \"alpha2\" : \"RW\",\n \"alpha3\" : \"RWA\",\n \"numeric\" : 646,\n \"latitude\" : -2,\n \"longitude\" : 30\n },\n {\n \"country\" : \"Saint Helena, Ascension and Tristan da Cunha\",\n \"alpha2\" : \"SH\",\n \"alpha3\" : \"SHN\",\n \"numeric\" : 654,\n \"latitude\" : -15.9333,\n \"longitude\" : -5.7\n },\n {\n \"country\" : \"Saint Kitts and Nevis\",\n \"alpha2\" : \"KN\",\n \"alpha3\" : \"KNA\",\n \"numeric\" : 659,\n \"latitude\" : 17.3333,\n \"longitude\" : -62.75\n },\n {\n \"country\" : \"Saint Lucia\",\n \"alpha2\" : \"LC\",\n \"alpha3\" : \"LCA\",\n \"numeric\" : 662,\n \"latitude\" : 13.8833,\n \"longitude\" : -61.1333\n },\n {\n \"country\" : \"Saint Pierre and Miquelon\",\n \"alpha2\" : \"PM\",\n \"alpha3\" : \"SPM\",\n \"numeric\" : 666,\n \"latitude\" : 46.8333,\n \"longitude\" : -56.3333\n },\n {\n \"country\" : \"Saint Vincent and the Grenadines\",\n \"alpha2\" : \"VC\",\n \"alpha3\" : \"VCT\",\n \"numeric\" : 670,\n \"latitude\" : 13.25,\n \"longitude\" : -61.2\n },\n {\n \"country\" : \"Samoa\",\n \"alpha2\" : \"WS\",\n \"alpha3\" : \"WSM\",\n \"numeric\" : 882,\n \"latitude\" : -13.5833,\n \"longitude\" : -172.3333\n },\n {\n \"country\" : \"San Marino\",\n \"alpha2\" : \"SM\",\n \"alpha3\" : \"SMR\",\n \"numeric\" : 674,\n \"latitude\" : 43.7667,\n \"longitude\" : 12.4167\n },\n {\n \"country\" : \"Sao Tome and Principe\",\n \"alpha2\" : \"ST\",\n \"alpha3\" : \"STP\",\n \"numeric\" : 678,\n \"latitude\" : 1,\n \"longitude\" : 7\n },\n {\n \"country\" : \"Saudi Arabia\",\n \"alpha2\" : \"SA\",\n \"alpha3\" : \"SAU\",\n \"numeric\" : 682,\n \"latitude\" : 25,\n \"longitude\" : 45\n },\n {\n \"country\" : \"Senegal\",\n \"alpha2\" : \"SN\",\n \"alpha3\" : \"SEN\",\n \"numeric\" : 686,\n \"latitude\" : 14,\n \"longitude\" : -14\n },\n {\n \"country\" : \"Serbia\",\n \"alpha2\" : \"RS\",\n \"alpha3\" : \"SRB\",\n \"numeric\" : 688,\n \"latitude\" : 44,\n \"longitude\" : 21\n },\n {\n \"country\" : \"Seychelles\",\n \"alpha2\" : \"SC\",\n \"alpha3\" : \"SYC\",\n \"numeric\" : 690,\n \"latitude\" : -4.5833,\n \"longitude\" : 55.6667\n },\n {\n \"country\" : \"Sierra Leone\",\n \"alpha2\" : \"SL\",\n \"alpha3\" : \"SLE\",\n \"numeric\" : 694,\n \"latitude\" : 8.5,\n \"longitude\" : -11.5\n },\n {\n \"country\" : \"Singapore\",\n \"alpha2\" : \"SG\",\n \"alpha3\" : \"SGP\",\n \"numeric\" : 702,\n \"latitude\" : 1.3667,\n \"longitude\" : 103.8\n },\n {\n \"country\" : \"Slovakia\",\n \"alpha2\" : \"SK\",\n \"alpha3\" : \"SVK\",\n \"numeric\" : 703,\n \"latitude\" : 48.6667,\n \"longitude\" : 19.5\n },\n {\n \"country\" : \"Slovenia\",\n \"alpha2\" : \"SI\",\n \"alpha3\" : \"SVN\",\n \"numeric\" : 705,\n \"latitude\" : 46,\n \"longitude\" : 15\n },\n {\n \"country\" : \"Solomon Islands\",\n \"alpha2\" : \"SB\",\n \"alpha3\" : \"SLB\",\n \"numeric\" : 90,\n \"latitude\" : -8,\n \"longitude\" : 159\n },\n {\n \"country\" : \"Somalia\",\n \"alpha2\" : \"SO\",\n \"alpha3\" : \"SOM\",\n \"numeric\" : 706,\n \"latitude\" : 10,\n \"longitude\" : 49\n },\n {\n \"country\" : \"South Africa\",\n \"alpha2\" : \"ZA\",\n \"alpha3\" : \"ZAF\",\n \"numeric\" : 710,\n \"latitude\" : -29,\n \"longitude\" : 24\n },\n {\n \"country\" : \"South Georgia and the South Sandwich Islands\",\n \"alpha2\" : \"GS\",\n \"alpha3\" : \"SGS\",\n \"numeric\" : 239,\n \"latitude\" : -54.5,\n \"longitude\" : -37\n },\n {\n \"country\" : \"Spain\",\n \"alpha2\" : \"ES\",\n \"alpha3\" : \"ESP\",\n \"numeric\" : 724,\n \"latitude\" : 40,\n \"longitude\" : -4\n },\n {\n \"country\" : \"Sri Lanka\",\n \"alpha2\" : \"LK\",\n \"alpha3\" : \"LKA\",\n \"numeric\" : 144,\n \"latitude\" : 7,\n \"longitude\" : 81\n },\n {\n \"country\" : \"Sudan\",\n \"alpha2\" : \"SD\",\n \"alpha3\" : \"SDN\",\n \"numeric\" : 736,\n \"latitude\" : 15,\n \"longitude\" : 30\n },\n {\n \"country\" : \"Suriname\",\n \"alpha2\" : \"SR\",\n \"alpha3\" : \"SUR\",\n \"numeric\" : 740,\n \"latitude\" : 4,\n \"longitude\" : -56\n },\n {\n \"country\" : \"Svalbard and Jan Mayen\",\n \"alpha2\" : \"SJ\",\n \"alpha3\" : \"SJM\",\n \"numeric\" : 744,\n \"latitude\" : 78,\n \"longitude\" : 20\n },\n {\n \"country\" : \"Swaziland\",\n \"alpha2\" : \"SZ\",\n \"alpha3\" : \"SWZ\",\n \"numeric\" : 748,\n \"latitude\" : -26.5,\n \"longitude\" : 31.5\n },\n {\n \"country\" : \"Sweden\",\n \"alpha2\" : \"SE\",\n \"alpha3\" : \"SWE\",\n \"numeric\" : 752,\n \"latitude\" : 62,\n \"longitude\" : 15\n },\n {\n \"country\" : \"Switzerland\",\n \"alpha2\" : \"CH\",\n \"alpha3\" : \"CHE\",\n \"numeric\" : 756,\n \"latitude\" : 47,\n \"longitude\" : 8\n },\n {\n \"country\" : \"Syrian Arab Republic\",\n \"alpha2\" : \"SY\",\n \"alpha3\" : \"SYR\",\n \"numeric\" : 760,\n \"latitude\" : 35,\n \"longitude\" : 38\n },\n {\n \"country\" : \"Taiwan, Province of China\",\n \"alpha2\" : \"TW\",\n \"alpha3\" : \"TWN\",\n \"numeric\" : 158,\n \"latitude\" : 23.5,\n \"longitude\" : 121\n },\n {\n \"country\" : \"Tajikistan\",\n \"alpha2\" : \"TJ\",\n \"alpha3\" : \"TJK\",\n \"numeric\" : 762,\n \"latitude\" : 39,\n \"longitude\" : 71\n },\n {\n \"country\" : \"Tanzania, United Republic of\",\n \"alpha2\" : \"TZ\",\n \"alpha3\" : \"TZA\",\n \"numeric\" : 834,\n \"latitude\" : -6,\n \"longitude\" : 35\n },\n {\n \"country\" : \"Thailand\",\n \"alpha2\" : \"TH\",\n \"alpha3\" : \"THA\",\n \"numeric\" : 764,\n \"latitude\" : 15,\n \"longitude\" : 100\n },\n {\n \"country\" : \"Timor-Leste\",\n \"alpha2\" : \"TL\",\n \"alpha3\" : \"TLS\",\n \"numeric\" : 626,\n \"latitude\" : -8.55,\n \"longitude\" : 125.5167\n },\n {\n \"country\" : \"Togo\",\n \"alpha2\" : \"TG\",\n \"alpha3\" : \"TGO\",\n \"numeric\" : 768,\n \"latitude\" : 8,\n \"longitude\" : 1.1667\n },\n {\n \"country\" : \"Tokelau\",\n \"alpha2\" : \"TK\",\n \"alpha3\" : \"TKL\",\n \"numeric\" : 772,\n \"latitude\" : -9,\n \"longitude\" : -172\n },\n {\n \"country\" : \"Tonga\",\n \"alpha2\" : \"TO\",\n \"alpha3\" : \"TON\",\n \"numeric\" : 776,\n \"latitude\" : -20,\n \"longitude\" : -175\n },\n {\n \"country\" : \"Trinidad and Tobago\",\n \"alpha2\" : \"TT\",\n \"alpha3\" : \"TTO\",\n \"numeric\" : 780,\n \"latitude\" : 11,\n \"longitude\" : -61\n },\n {\n \"country\" : \"Tunisia\",\n \"alpha2\" : \"TN\",\n \"alpha3\" : \"TUN\",\n \"numeric\" : 788,\n \"latitude\" : 34,\n \"longitude\" : 9\n },\n {\n \"country\" : \"Turkey\",\n \"alpha2\" : \"TR\",\n \"alpha3\" : \"TUR\",\n \"numeric\" : 792,\n \"latitude\" : 39,\n \"longitude\" : 35\n },\n {\n \"country\" : \"Turkmenistan\",\n \"alpha2\" : \"TM\",\n \"alpha3\" : \"TKM\",\n \"numeric\" : 795,\n \"latitude\" : 40,\n \"longitude\" : 60\n },\n {\n \"country\" : \"Turks and Caicos Islands\",\n \"alpha2\" : \"TC\",\n \"alpha3\" : \"TCA\",\n \"numeric\" : 796,\n \"latitude\" : 21.75,\n \"longitude\" : -71.5833\n },\n {\n \"country\" : \"Tuvalu\",\n \"alpha2\" : \"TV\",\n \"alpha3\" : \"TUV\",\n \"numeric\" : 798,\n \"latitude\" : -8,\n \"longitude\" : 178\n },\n {\n \"country\" : \"Uganda\",\n \"alpha2\" : \"UG\",\n \"alpha3\" : \"UGA\",\n \"numeric\" : 800,\n \"latitude\" : 1,\n \"longitude\" : 32\n },\n {\n \"country\" : \"Ukraine\",\n \"alpha2\" : \"UA\",\n \"alpha3\" : \"UKR\",\n \"numeric\" : 804,\n \"latitude\" : 49,\n \"longitude\" : 32\n },\n {\n \"country\" : \"United Arab Emirates\",\n \"alpha2\" : \"AE\",\n \"alpha3\" : \"ARE\",\n \"numeric\" : 784,\n \"latitude\" : 24,\n \"longitude\" : 54\n },\n {\n \"country\" : \"United Kingdom\",\n \"alpha2\" : \"GB\",\n \"alpha3\" : \"GBR\",\n \"numeric\" : 826,\n \"latitude\" : 54,\n \"longitude\" : -2\n },\n {\n \"country\" : \"United States\",\n \"alpha2\" : \"US\",\n \"alpha3\" : \"USA\",\n \"numeric\" : 840,\n \"latitude\" : 38,\n \"longitude\" : -97\n },\n {\n \"country\" : \"United States Minor Outlying Islands\",\n \"alpha2\" : \"UM\",\n \"alpha3\" : \"UMI\",\n \"numeric\" : 581,\n \"latitude\" : 19.2833,\n \"longitude\" : 166.6\n },\n {\n \"country\" : \"Uruguay\",\n \"alpha2\" : \"UY\",\n \"alpha3\" : \"URY\",\n \"numeric\" : 858,\n \"latitude\" : -33,\n \"longitude\" : -56\n },\n {\n \"country\" : \"Uzbekistan\",\n \"alpha2\" : \"UZ\",\n \"alpha3\" : \"UZB\",\n \"numeric\" : 860,\n \"latitude\" : 41,\n \"longitude\" : 64\n },\n {\n \"country\" : \"Vanuatu\",\n \"alpha2\" : \"VU\",\n \"alpha3\" : \"VUT\",\n \"numeric\" : 548,\n \"latitude\" : -16,\n \"longitude\" : 167\n },\n {\n \"country\" : \"Venezuela, Bolivarian Republic of\",\n \"alpha2\" : \"VE\",\n \"alpha3\" : \"VEN\",\n \"numeric\" : 862,\n \"latitude\" : 8,\n \"longitude\" : -66\n },\n {\n \"country\" : \"Viet Nam\",\n \"alpha2\" : \"VN\",\n \"alpha3\" : \"VNM\",\n \"numeric\" : 704,\n \"latitude\" : 16,\n \"longitude\" : 106\n },\n {\n \"country\" : \"Virgin Islands, British\",\n \"alpha2\" : \"VG\",\n \"alpha3\" : \"VGB\",\n \"numeric\" : 92,\n \"latitude\" : 18.5,\n \"longitude\" : -64.5\n },\n {\n \"country\" : \"Virgin Islands, U.S.\",\n \"alpha2\" : \"VI\",\n \"alpha3\" : \"VIR\",\n \"numeric\" : 850,\n \"latitude\" : 18.3333,\n \"longitude\" : -64.8333\n },\n {\n \"country\" : \"Wallis and Futuna\",\n \"alpha2\" : \"WF\",\n \"alpha3\" : \"WLF\",\n \"numeric\" : 876,\n \"latitude\" : -13.3,\n \"longitude\" : -176.2\n },\n {\n \"country\" : \"Western Sahara\",\n \"alpha2\" : \"EH\",\n \"alpha3\" : \"ESH\",\n \"numeric\" : 732,\n \"latitude\" : 24.5,\n \"longitude\" : -13\n },\n {\n \"country\" : \"Yemen\",\n \"alpha2\" : \"YE\",\n \"alpha3\" : \"YEM\",\n \"numeric\" : 887,\n \"latitude\" : 15,\n \"longitude\" : 48\n },\n {\n \"country\" : \"Zambia\",\n \"alpha2\" : \"ZM\",\n \"alpha3\" : \"ZMB\",\n \"numeric\" : 894,\n \"latitude\" : -15,\n \"longitude\" : 30\n },\n {\n \"country\" : \"Zimbabwe\",\n \"alpha2\" : \"ZW\",\n \"alpha3\" : \"ZWE\",\n \"numeric\" : 716,\n \"latitude\" : -20,\n \"longitude\" : 30\n },\n {\n \"country\" : \"Afghanistan\",\n \"alpha2\" : \"AF\",\n \"alpha3\" : \"AFG\",\n \"numeric\" : 4,\n \"latitude\" : 33,\n \"longitude\" : 65\n }\n ];\n\n\n\n\n//mousePosition = new THREE.Vector3(0, 0, 0.5);\n\n public constructor(private ngZone: NgZone) {\n this.scene = new THREE.Scene();\n this.camera = new THREE.PerspectiveCamera(\n 95, window.innerWidth/window.innerHeight, 0.1, 1000\n );\n \n //this.addMarker();\n }\n\n public ngOnDestroy(): void {\n if (this.frameId != null) {\n cancelAnimationFrame(this.frameId);\n }\n if (this.renderer != null) {\n this.renderer.dispose();\n this.renderer = null;\n this.canvas = null;\n }\n }\n\n public createScene(canvas: ElementRef): void {\n // The first step is to get the reference of the canvas element from our HTML document\n this.controls = new OrbitControls(this.camera,this.canvas);\n this.canvas = canvas.nativeElement;\n\n // this.map = new Map({\n // container: this.canvas,\n // style: `https://api.maptiler.com/maps/streets/style.json?key=BQu1QmXyms0ayFsDKgwn`,\n // center: [this.initialState.lng, this.initialState.lat],\n // zoom: this.initialState.zoom\n // });\n this.renderer = new THREE.WebGLRenderer({\n canvas: this.canvas,\n alpha: true, // transparent background\n antialias: true // smooth edges\n });\n\n this.renderer.setSize(window.innerWidth, window.innerHeight);\n this.renderer.setPixelRatio(window.devicePixelRatio);\n this.camera.lookAt(this.scene.position);\n this.camera.position.set(0,0,10);\n\n this.controls.autoRotate = false;\n this.controls.autoRotateSpeed = 0.03;\n this.controls.enableDamping = true;\n this.controls.dampingFactor = 0.1;\n this.controls.rotateSpeed = 0.1;\n this.controls.minDistance = 1;\n this.controls.maxDistance = 200;\n this.controls.maxPolarAngle = Math.PI/2 - .04;\n\n this.scene.add(this.camera);\n this.onDemandLight();\n this.onDemandGlobe();\n this.onDemandAtmosphere();\n this.configControls();\n this.controls = new OrbitControls(this.camera,this.canvas,window);\n // this.OnDemendStars();\n const camera1 = new THREE.OrthographicCamera( window.innerWidth/ - 2, window.innerWidth / 2, window.innerHeight / 2, window.innerHeight / - 2, 1, 1000 );\n this.scene.add( camera1 );\n this.controls.maxZoom=2;\n this.controls.minZoom=1;\n this.controls.zoomSpeed=2;\n this.controls.dollyIn(1);\n this.controls.dollyOut(2);\n this.controls.enableZoom=true;\n this.controls.zoomChanged=true;\n this.controls.saveState();\n this.controls.target.set(0, 0, 0);\n this.controls.update();\n this.camera.updateProjectionMatrix();\n this.addMarker();\n\n }\n\n public createScene1(canvas: ElementRef): void {\n // The first step is to get the reference of the canvas element from our HTML document\n \n this.canvas = canvas.nativeElement;\n this.renderer = new THREE.WebGLRenderer({\n canvas: this.canvas,\n alpha: true, // transparent background\n antialias: true // smooth edges\n });\n\n this.renderer.setSize(window.innerWidth, window.innerHeight);\n this.renderer.setPixelRatio(window.devicePixelRatio);\n this.camera.lookAt(this.scene.position);\n this.camera.position.set(0,0,10);\n\n this.scene.add(this.camera);\n this.onDemandLight();\n this.onDemandGlobe();\n this.onDemandAtmosphere();\n this.OnDemendStars();\n }\n\n public animate(): void {\n // We have to run this outside angular zones,\n // because it could trigger heavy changeDetection cycles.\n this.ngZone.runOutsideAngular(() => {\n if (document.readyState !== 'loading') {\n this.render();\n } else {\n window.addEventListener('DOMContentLoaded', () => {\n this.render();\n });\n }\n });\n }\n\n public render(): void {\n this.frameId = requestAnimationFrame(() => {\n this.render();\n });\n\n this.sphere.rotation.x += 0.001;\n this.sphere.rotation.y += 0.001;\n //this.sphere.rotation.y += 0.003;\n\n // gsap.to(this.group.rotation,{\n // x:this.mousePosition.y* 0.05,\n // y:this.mousePosition.x* 0.05,\n // duration:2\n // })\n // this.group.rotation.y=this.mouse.x*0.5;\n\n\n\n\n // this.controls.update();\n //this.configControls();\n this.renderer.render(this.scene, this.camera);\n //this.configControls();\n }\n\n\n public resize(): void {\n const width = 400;//window.innerWidth;\n const height = 300;//window.innerHeight;\n\n this.camera.aspect = width / height;\n this.camera.updateProjectionMatrix();\n\n this.renderer.setSize(width, height);\n }\n\n onDoubleClick(clientX:any,clientY:any){\n var x = (clientX / window.innerWidth) * 2 - 1;\n var y = -(clientY / window.innerHeight) * 2 + 1;\n var dir = new THREE.Vector3(x, y, -1)\n dir.unproject(this.camera)\n\n var ray = new THREE.Raycaster(this.camera.position, dir.sub(this.camera.position).normalize())\n var intersects = ray.intersectObject(this.sphere);\n if ( intersects.length > 0 )\n {\n alert(\"hit\");\n }\n }\n\nonMouseMove(){\n}\nconfigControls() {\n const camera1 = new THREE.OrthographicCamera( window.innerWidth/ - 2, window.innerWidth / 2, window.innerHeight / 2, window.innerHeight / - 2, 1, 1000 );\n this.controls = new OrbitControls(camera1, this.canvas);\n this.controls.autoRotate = false;\n this.controls.enableZoom = true;\n this.controls.enablePan = true;\n this.controls.maxPolarAngle=Math.PI/2;\n this.controls.update();\n}\n\n//Create Stars\nOnDemendStars(){\n const starGeometry= new THREE.BufferGeometry();\n const starMaterial= new THREE.PointsMaterial({\n color:0xffffff\n });\n\nconst startVertices=[];\nfor(let i=0;i<10000;i++){\nconst x=(Math.random()-0.5)*2000;\nconst y=(Math.random()-0.5)*2000;\nconst z=-(Math.random())*1000;\nstartVertices.push(x,y,z);\n}\nstarGeometry.setAttribute('position', new THREE.Float32BufferAttribute(startVertices,3));\n\n const stars= new THREE.Points(starGeometry,starMaterial);\n this.scene.add(stars);\n\n}\n// Create Atmosphere\nonDemandAtmosphere(){\n\n const atmosphere=new THREE.Mesh(new THREE.SphereGeometry(5,50,50),\n new THREE.ShaderMaterial(\n {\n vertexShader:atmosphereVertexShader,\n fragmentShader:atmosphereFragmentShader,\n blending:THREE.AdditiveBlending,side:THREE.BackSide\n }\n )\n )\n atmosphere.scale.set(1.1,1.1,1.1);\n this.scene.add(atmosphere);\n}\n//Create Globe\nonDemandGlobe(){\n //let sphere= new THREE.Mesh();\n const geometry = new THREE.SphereGeometry(5,50,50);\n const shadow= new THREE.ShaderMaterial(\n {\n vertexShader,\n fragmentShader,\n uniforms:{\n globeTexture:{\n value:new THREE.TextureLoader().load('./assets/img/globe.jpeg')\n }\n }\n }\n )\n // const material = new THREE.MeshBasicMaterial({\n // // color: 0xff0000\n // map:new THREE.TextureLoader().load('./assets/img/globe.jpeg')\n // });\n this.sphere = new THREE.Mesh(geometry, shadow);\n //this.scene.add(this.sphere);\n\n\n this.group.add(this.sphere);\nthis.scene.add(this.group);\n}\n//Add soft light\nonDemandLight(){\n // soft white light\n this.light = new THREE.AmbientLight(0x404040);\n this.light.position.z = 10;\n this.scene.add(this.light);\n}\n\naddMarker(){\n this.data.forEach(element => {\n console.log(element);\n var c = this.sphere.rotation.y;\n var d = element.longitude * (Math.PI / 180)%(2 * Math.PI);\n var e = Math.PI / 2 * -1;\n this.sphere.rotation.y = c % (2 * Math.PI);\n this.sphere.rotation.x = element.latitude * (Math.PI / 180) % Math.PI;\n this.sphere.rotation.y= d+e;\n });\n\n}\n\n}\n","import { Component, ElementRef, OnInit, ViewChild } from '@angular/core';\nimport { EngineService } from '../engine.service';\nimport { StarsService } from './stars.service';\n\n@Component({\n selector: 'app-stars',\n templateUrl: './stars.component.html',\n styleUrls: ['./stars.component.scss']\n})\nexport class StarsComponent implements OnInit {\n\n @ViewChild('rendererStarCanvas', {static: true})\n public rendererCanvas: ElementRef;\n public constructor(private engServ: StarsService) {\n }\n\n public ngOnInit(): void {\n \n this.engServ.createScene(this.rendererCanvas);\n this.engServ.animate();\n }\n}\n","
\n \n
\n\n ","import * as THREE from 'three';\nimport {ElementRef, Injectable, NgZone, OnDestroy} from '@angular/core';\nimport vertexShader from '../../../assets/shaders/vertex.glsl';\nimport fragmentShader from '../../../assets/shaders/fragment.glsl';\nimport atmosphereVertexShader from '../../../assets/shaders/atmosphereVertex.glsl';\nimport atmosphereFragmentShader from '../../../assets/shaders/atmosphereFragment.glsl';\nimport { OrbitControls } from \"three-orbitcontrols-ts\";\n\n\nexport { THREE };\n\n@Injectable({providedIn: 'root'})\nexport class StarsService implements OnDestroy {\n private controls=null;\n private canvas: HTMLCanvasElement;\n private renderer: THREE.WebGLRenderer;\n private camera: THREE.PerspectiveCamera;\n private scene: THREE.Scene;\n private light: THREE.AmbientLight;\n vertexShader:string;\n fragmentShader:string;\n atmosphereVertexShader:string;\n atmosphereFragmentShader:string;\n private sphere: THREE.Mesh;\n private group=new THREE.Group();\n //private starGeometry= new THREE.BufferGeometry();\n private frameId: number = null;\n//mousePosition = new THREE.Vector3(0, 0, 0.5);\n\n public constructor(private ngZone: NgZone) {\n this.scene = new THREE.Scene();\n this.camera = new THREE.PerspectiveCamera(\n 95, window.innerWidth/window.innerHeight, 0.1, 1000\n );\n \n //this.addMarker();\n }\n\n public ngOnDestroy(): void {\n if (this.frameId != null) {\n cancelAnimationFrame(this.frameId);\n }\n if (this.renderer != null) {\n this.renderer.dispose();\n this.renderer = null;\n this.canvas = null;\n }\n }\n\n public createScene(canvas: ElementRef): void {\n // The first step is to get the reference of the canvas element from our HTML document\n this.canvas = canvas.nativeElement;\n\n this.renderer = new THREE.WebGLRenderer({\n canvas: this.canvas,\n alpha: true, // transparent background\n antialias: true // smooth edges\n });\n\n this.renderer.setSize(window.innerWidth, window.innerHeight);\n this.renderer.setPixelRatio(window.devicePixelRatio);\n this.camera.lookAt(this.scene.position);\n this.camera.position.set(0,0,10);\n\n this.controls.autoRotate = true;\n this.controls.autoRotateSpeed = 0.03;\n this.controls.enableDamping = true;\n this.controls.dampingFactor = 0.1;\n this.controls.rotateSpeed = 0.1;\n this.controls.minDistance = 1;\n this.controls.maxDistance = 200;\n this.controls.maxPolarAngle = Math.PI/2 - .04;\n\n this.scene.add(this.camera);\n this.onDemandLight();\n this.onDemandGlobe();\n this.onDemandAtmosphere();\n this.configControls();\n this.controls = new OrbitControls(this.camera,this.canvas,window);\n this.OnDemendStars();\n const camera1 = new THREE.OrthographicCamera( window.innerWidth/ - 2, window.innerWidth / 2, window.innerHeight / 2, window.innerHeight / - 2, 1, 1000 );\n this.scene.add( camera1 );\n this.controls.maxZoom=2;\n this.controls.minZoom=1;\n this.controls.zoomSpeed=2;\n this.controls.dollyIn(1);\n this.controls.dollyOut(2);\n this.controls.enableZoom=true;\n this.controls.zoomChanged=true;\n this.controls.saveState();\n this.controls.target.set(0, 0, 0);\n this.controls.update();\n this.camera.updateProjectionMatrix();\n//this.addMarker();\n\n }\n\n public animate(): void {\n // We have to run this outside angular zones,\n // because it could trigger heavy changeDetection cycles.\n this.ngZone.runOutsideAngular(() => {\n if (document.readyState !== 'loading') {\n this.render();\n } else {\n window.addEventListener('DOMContentLoaded', () => {\n this.render();\n });\n }\n });\n }\n\n public render(): void {\n this.frameId = requestAnimationFrame(() => {\n this.render();\n });\n\n // this.sphere.rotation.x += 0.001;\n // this.sphere.rotation.y += 0.001;\n //this.sphere.rotation.y += 0.003;\n\n // gsap.to(this.group.rotation,{\n // x:this.mousePosition.y* 0.05,\n // y:this.mousePosition.x* 0.05,\n // duration:2\n // })\n // this.group.rotation.y=this.mouse.x*0.5;\n\n\n\n\n // this.controls.update();\n //this.configControls();\n this.renderer.render(this.scene, this.camera);\n //this.configControls();\n }\n\n\n public resize(): void {\n const width = window.innerWidth;\n const height = window.innerHeight;\n\n this.camera.aspect = width / height;\n this.camera.updateProjectionMatrix();\n\n this.renderer.setSize(width, height);\n }\n\n onDoubleClick(clientX:any,clientY:any){\n var x = (clientX / window.innerWidth) * 2 - 1;\n var y = -(clientY / window.innerHeight) * 2 + 1;\n var dir = new THREE.Vector3(x, y, -1)\n dir.unproject(this.camera)\n\n var ray = new THREE.Raycaster(this.camera.position, dir.sub(this.camera.position).normalize())\n var intersects = ray.intersectObject(this.sphere);\n if ( intersects.length > 0 )\n {\n // alert(\"hit\");\n }\n }\n\n// onMouseMove(){\n// }\nconfigControls() {\n // const camera1 = new THREE.OrthographicCamera( window.innerWidth/ - 2, window.innerWidth / 2, window.innerHeight / 2, window.innerHeight / - 2, 1, 1000 );\n // this.controls = new OrbitControls(camera1, this.canvas);\n this.controls.autoRotate = false;\n this.controls.enableZoom = true;\n this.controls.enablePan = true;\n this.controls.maxPolarAngle=Math.PI/2;\n this.controls.update();\n}\n\n//Create Stars\nOnDemendStars(){\n const starGeometry= new THREE.BufferGeometry();\n const starMaterial= new THREE.PointsMaterial({\n color:0xffffff\n });\n\nconst startVertices=[];\nfor(let i=0;i<10000;i++){\nconst x=(Math.random()-0.5)*2000;\nconst y=(Math.random()-0.5)*2000;\nconst z=-(Math.random())*1000;\nstartVertices.push(x,y,z);\n}\nstarGeometry.setAttribute('position', new THREE.Float32BufferAttribute(startVertices,3));\n\n const stars= new THREE.Points(starGeometry,starMaterial);\n this.scene.add(stars);\n\n}\n// Create Atmosphere\nonDemandAtmosphere(){\n\n const atmosphere=new THREE.Mesh(new THREE.SphereGeometry(5,50,50),\n new THREE.ShaderMaterial(\n {\n vertexShader:atmosphereVertexShader,\n fragmentShader:atmosphereFragmentShader,\n blending:THREE.AdditiveBlending,side:THREE.BackSide\n }\n )\n )\n atmosphere.scale.set(1.1,1.1,1.1);\n this.scene.add(atmosphere);\n}\n//Create Globe\nonDemandGlobe(){\n //let sphere= new THREE.Mesh();\n const geometry = new THREE.SphereGeometry(5,50,50);\n const shadow= new THREE.ShaderMaterial(\n {\n vertexShader,\n fragmentShader,\n uniforms:{\n globeTexture:{\n value:new THREE.TextureLoader().load('./assets/img/globe.jpeg')\n }\n }\n }\n )\n // const material = new THREE.MeshBasicMaterial({\n // // color: 0xff0000\n // map:new THREE.TextureLoader().load('./assets/img/globe.jpeg')\n // });\n this.sphere = new THREE.Mesh(geometry, shadow);\n //this.scene.add(this.sphere);\n\n\n this.group.add(this.sphere);\nthis.scene.add(this.group);\n}\n//Add soft light\nonDemandLight(){\n // soft white light\n this.light = new THREE.AmbientLight(0x404040);\n this.light.position.z = 10;\n this.scene.add(this.light);\n}\n}\n","export {MapView} from './MapView';\n\nexport {LODControl} from './lod/LODControl';\nexport {LODRadial} from './lod/LODRadial';\nexport {LODFrustum} from './lod/LODFrustum';\nexport {LODRaycast} from './lod/LODRaycast';\n\nexport {BingMapsProvider} from './providers/BingMapsProvider';\nexport {GoogleMapsProvider} from './providers/GoogleMapsProvider';\nexport {HereMapsProvider} from './providers/HereMapsProvider';\nexport {MapBoxProvider} from './providers/MapBoxProvider';\nexport {MapProvider} from './providers/MapProvider';\nexport {MapTilerProvider} from './providers/MapTilerProvider';\nexport {OpenMapTilesProvider} from './providers/OpenMapTilesProvider';\nexport {OpenStreetMapsProvider} from './providers/OpenStreetMapsProvider';\nexport {DebugProvider} from './providers/DebugProvider';\nexport {HeightDebugProvider} from './providers/HeightDebugProvider';\n\nexport {MapNodeGeometry} from './geometries/MapNodeGeometry';\nexport {MapNodeHeightGeometry} from './geometries/MapNodeHeightGeometry';\nexport {MapSphereNodeGeometry} from './geometries/MapSphereNodeGeometry';\n\nexport {MapNode} from './nodes/MapNode';\nexport {MapHeightNode} from './nodes/MapHeightNode';\nexport {MapPlaneNode} from './nodes/MapPlaneNode';\nexport {MapSphereNode} from './nodes/MapSphereNode';\nexport {MapHeightNodeShader} from './nodes/MapHeightNodeShader';\n\nexport {UnitsUtils} from './utils/UnitsUtils';\nexport {CanvasUtils} from './utils/CanvasUtils';\nexport {Geolocation} from './utils/Geolocation';\nexport {GeolocationUtils} from './utils/GeolocationUtils';\nexport {CancelablePromise} from './utils/CancelablePromise';\nexport {XHRUtils} from './utils/XHRUtils';\nexport {TextureUtils} from './utils/TextureUtils';\n","import {BufferGeometry, Camera, Group, Material, Mesh, MeshBasicMaterial, Object3D, Raycaster, Scene, WebGLRenderer} from 'three';\nimport {OpenStreetMapsProvider} from './providers/OpenStreetMapsProvider';\nimport {MapNode} from './nodes/MapNode';\nimport {MapHeightNode} from './nodes/MapHeightNode';\nimport {MapPlaneNode} from './nodes/MapPlaneNode';\nimport {MapSphereNode} from './nodes/MapSphereNode';\nimport {MapHeightNodeShader} from './nodes/MapHeightNodeShader';\nimport {LODRaycast} from './lod/LODRaycast';\nimport {MapProvider} from './providers/MapProvider';\nimport {LODControl} from './lod/LODControl';\nimport {MapMartiniHeightNode} from './nodes/MapMartiniHeightNode';\n\n/**\n * Map viewer is used to read and display map tiles from a server.\n *\n * It was designed to work with a OpenMapTiles but can also be used with another map tiles.\n *\n * The map is drawn in plane map nodes using a quad tree that is subdivided as necessary to guaratee good map quality.\n */\nexport class MapView extends Mesh \n{\n\t/**\n\t * Planar map projection.\n\t */\n\tpublic static PLANAR: number = 200;\n\n\t/**\n\t * Spherical map projection.\n\t */\n\tpublic static SPHERICAL: number = 201;\n\n\t/**\n\t * Planar map projection with height deformation.\n\t */\n\tpublic static HEIGHT: number = 202;\n\n\t/**\n\t * Planar map projection with height deformation using the GPU for height generation.\n\t */\n\tpublic static HEIGHT_SHADER: number = 203;\n\n\t/**\n\t * RTIN map mode.\n\t */\n\tpublic static MARTINI: number = 204;\n\n\t/**\n\t * Map of the map node types available.\n\t */\n\tpublic static mapModes: Map = new Map([\n\t\t[MapView.PLANAR, MapPlaneNode],\n\t\t[MapView.SPHERICAL, MapSphereNode],\n\t\t[MapView.HEIGHT, MapHeightNode],\n\t\t[MapView.HEIGHT_SHADER, MapHeightNodeShader],\n\t\t[MapView.MARTINI, MapMartiniHeightNode]\n\t]);\n\n\t/**\n\t * LOD control object used to defined how tiles are loaded in and out of memory.\n\t */\n\tpublic lod: LODControl = null;\n\n\t/**\n\t * Map tile color layer provider.\n\t */\n\tpublic provider: MapProvider = null;\n\n\t/**\n\t * Map height (terrain elevation) layer provider.\n\t * \n\t * Only used for HEIGHT, HEIGHT_SHADER and MARTINI map modes.\n\t */\n\tpublic heightProvider: MapProvider = null;\n\n\t/**\n\t * Define the type of map node in use, defined how the map is presented.\n\t *\n\t * Should only be set on creation.\n\t */\n\tpublic root: MapNode = null;\n\n\t/**\n\t * Indicate if the nodes should cache its children when it is simplified. Nodes that are no longer in use should be kept in memory.\n\t * \n\t * Usefull for fast moving scenarios to prevent reparsing data in fast moving scenes.\n\t * \n\t * Should only be used if the child generation process is time consuming. Should be kept off unless required.\n\t */\n\tpublic cacheTiles: boolean = false;\n\n\t/**\n\t * Constructor for the map view objects.\n\t *\n\t * @param root - Map view node modes can be SPHERICAL, HEIGHT or PLANAR. PLANAR is used by default. Can also be a custom MapNode instance.\n\t * @param provider - Map color tile provider by default a OSM maps provider is used if none specified.\n\t * @param heightProvider - Map height tile provider, by default no height provider is used.\n\t */\n\tpublic constructor(root: (number | MapNode) = MapView.PLANAR, provider: MapProvider = new OpenStreetMapsProvider(), heightProvider: MapProvider = null) \n\t{\n\t\tsuper(undefined, new MeshBasicMaterial({transparent: true, opacity: 0.0}));\n\n\t\tthis.lod = new LODRaycast();\n\n\t\tthis.provider = provider;\n\t\tthis.heightProvider = heightProvider;\n\n\t\tthis.setRoot(root);\n\t\tthis.preSubdivide();\n\t}\n\n\t/**\n\t * Ajust node configuration depending on the camera distance.\n\t *\n\t * Called everytime automatically before render by the renderer.\n\t */\n\tpublic override onBeforeRender: (renderer: WebGLRenderer, scene: Scene, camera: Camera, geometry: BufferGeometry, material: Material, group: Group)=> void = (renderer, scene, camera, geometry, material, group) => \n\t{\n\t\tthis.lod.updateLOD(this, camera, renderer, scene);\n\t};\n\n\t/**\n\t * Set the root of the map view.\n\t *\n\t * Is set by the constructor by default, can be changed in runtime.\n\t *\n\t * @param root - Map node to be used as root.\n\t */\n\tpublic setRoot(root: (MapNode | number)): void\n\t{\n\t\tif (typeof root === 'number') \n\t\t{\n\t\t\tif (!MapView.mapModes.has(root)) \n\t\t\t{\n\t\t\t\tthrow new Error('Map mode ' + root + ' does is not registered.');\n\t\t\t}\n\n\t\t\tconst rootConstructor = MapView.mapModes.get(root);\n\n\t\t\t// @ts-ignore\n\t\t\troot = new rootConstructor(null, this);\n\t\t}\n\n\t\t// Remove old root\n\t\tif (this.root !== null) \n\t\t{\n\t\t\tthis.remove(this.root);\n\t\t\tthis.root = null;\n\t\t}\n\n\t\t// @ts-ignore\n\t\tthis.root = root;\n\n\t\t// Initialize root node\n\t\tif (this.root !== null) \n\t\t{\n\t\t\t// @ts-ignore\n\t\t\tthis.geometry = this.root.constructor.baseGeometry;\n\t\t\t// @ts-ignore\n\t\t\tthis.scale.copy(this.root.constructor.baseScale);\n\n\t\t\tthis.root.mapView = this;\n\t\t\tthis.add(this.root);\n\t\t\tthis.root.initialize();\n\t\t}\n\t}\n\n\t/**\n\t * Pre-subdivide map tree to create nodes of levels not available in the provider.\n\t * \n\t * Checks for the minimum zoom level in the providers attached to the map view.\n\t */\n\tpublic preSubdivide(): void \n\t{\n\t\tfunction subdivide(node: MapNode, depth: number): void \n\t\t{\n\t\t\tif (depth <= 0) \n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tnode.subdivide();\n\n\t\t\tfor (let i = 0; i < node.children.length; i++) \n\t\t\t{\n\t\t\t\tif (node.children[i] instanceof MapNode) \n\t\t\t\t{\n\t\t\t\t\tconst child = node.children[i] as MapNode;\n\t\t\t\t\tsubdivide(child, depth - 1);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst minZoom = Math.max(this.provider.minZoom, this.heightProvider?.minZoom ?? -Infinity);\n\t\tif (minZoom > 0) \n\t\t{\n\t\t\tsubdivide(this.root, minZoom);\n\t\t}\n\t}\n\n\t/**\n\t * Change the map provider of this map view.\n\t *\n\t * Will discard all the tiles already loaded using the old provider.\n\t */\n\tpublic setProvider(provider: MapProvider): void\n\t{\n\t\tif (provider !== this.provider) \n\t\t{\n\t\t\tthis.provider = provider;\n\t\t\tthis.clear();\n\t\t}\n\t}\n\n\t/**\n\t * Change the map height provider of this map view.\n\t *\n\t * Will discard all the tiles already loaded using the old provider.\n\t */\n\tpublic setHeightProvider(heightProvider: MapProvider): void\n\t{\n\t\tif (heightProvider !== this.heightProvider) \n\t\t{\n\t\t\tthis.heightProvider = heightProvider;\n\t\t\tthis.clear();\n\t\t}\n\t}\n\n\t/**\n\t * Clears all tiles from memory and reloads data. Used when changing the provider.\n\t *\n\t * Should be called manually if any changed to the provider are made without setting the provider.\n\t */\n\tpublic override clear(): any\n\t{\n\t\tthis.traverse(function(children: Object3D): void\n\t\t{\n\t\t\t// @ts-ignore\n\t\t\tif (children.childrenCache) \n\t\t\t{\n\t\t\t\t// @ts-ignore\n\t\t\t\tchildren.childrenCache = null;\n\t\t\t}\n\n\t\t\t// @ts-ignore\n\t\t\tif (children.initialize) \n\t\t\t{\n\t\t\t\t// @ts-ignore\n\t\t\t\tchildren.initialize();\n\t\t\t}\n\t\t});\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Get the minimum zoom level available in the providers attached to the map view.\n\t * \n\t * @returns Minimum zoom level available.\n\t */\n\tpublic minZoom(): number \n\t{\n\t\treturn Math.max(this.provider.minZoom, this.heightProvider?.minZoom ?? -Infinity);\n\t}\n\n\t/**\n\t * Get the maximum zoom level available in the providers attached to the map view.\n\t * \n\t * @returns Maximum zoom level available.\n\t */\n\tpublic maxZoom(): number \n\t{\n\t\treturn Math.min(this.provider.maxZoom, this.heightProvider?.maxZoom ?? Infinity);\n\t}\n\n\t/**\n\t * Get map meta data from server if supported.\n\t */\n\tpublic getMetaData(): void\n\t{\n\t\tthis.provider.getMetaData();\n\t}\n\n\tpublic override raycast(raycaster: Raycaster, intersects: any[]): boolean\n\t{\n\t\treturn false;\n\t}\n}\n","import {BufferGeometry, Float32BufferAttribute} from 'three';\n\n/**\n * Map node geometry is a geometry used to represent the map nodes.\n *\n * Consists of a XZ plane with normals facing +Y.\n * \n * The geometry points start in XZ plane that can be manipulated for example for height adjustment.\n * \n * Geometry can also include skirts to mask off missalignments between tiles.\n */\nexport class MapNodeGeometry extends BufferGeometry\n{\n\t/**\n\t * Map node geometry constructor.\n\t *\n\t * @param width - Width of the node.\n\t * @param height - Height of the node.\n\t * @param widthSegments - Number of subdivisions along the width.\n\t * @param heightSegments - Number of subdivisions along the height.\n\t * @param skirt - Skirt around the plane to mask gaps between tiles.\n\t */\n\tpublic constructor(width: number = 1.0, height: number = 1.0, widthSegments: number = 1.0, heightSegments: number = 1.0, skirt: boolean = false, skirtDepth: number = 10.0)\n\t{\n\t\tsuper();\n\n\t\t// Buffers\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\n\t\t// Build plane\n\t\tMapNodeGeometry.buildPlane(width, height, widthSegments, heightSegments, indices, vertices, normals, uvs);\n\n\t\t// Generate the skirt\n\t\tif (skirt)\n\t\t{\n\t\t\tMapNodeGeometry.buildSkirt(width, height, widthSegments, heightSegments, skirtDepth, indices, vertices, normals, uvs);\n\t\t}\n\n\t\tthis.setIndex(indices);\n\t\tthis.setAttribute('position', new Float32BufferAttribute(vertices, 3));\n\t\tthis.setAttribute('normal', new Float32BufferAttribute(normals, 3));\n\t\tthis.setAttribute('uv', new Float32BufferAttribute(uvs, 2));\n\t}\n\n\tpublic static buildPlane(width: number = 1.0, height: number = 1.0, widthSegments: number = 1.0, heightSegments: number = 1.0, indices: number[], vertices: number[], normals: number[], uvs: number[]): void\n\t{\n\t\t// Half width X \n\t\tconst widthHalf = width / 2;\n\n\t\t// Half width Z\n\t\tconst heightHalf = height / 2;\n\n\t\t// Size of the grid in X\n\t\tconst gridX = widthSegments + 1;\n\n\t\t// Size of the grid in Z\n\t\tconst gridZ = heightSegments + 1;\n\n\t\t// Width of each segment X\n\t\tconst segmentWidth = width / widthSegments;\n\t\t\n\t\t// Height of each segment Z\n\t\tconst segmentHeight = height / heightSegments;\n\n\t\t// Generate vertices, normals and uvs\n\t\tfor (let iz = 0; iz < gridZ; iz++) \n\t\t{\n\t\t\tconst z = iz * segmentHeight - heightHalf;\n\n\t\t\tfor (let ix = 0; ix < gridX; ix++) \n\t\t\t{\n\t\t\t\tconst x = ix * segmentWidth - widthHalf;\n\n\t\t\t\tvertices.push(x, 0, z);\n\t\t\t\tnormals.push(0, 1, 0);\n\t\t\t\tuvs.push(ix / widthSegments, 1 - iz / heightSegments);\n\t\t\t}\n\t\t}\n\n\t\t// Indices\n\t\tfor (let iz = 0; iz < heightSegments; iz++) \n\t\t{\n\t\t\tfor (let ix = 0; ix < widthSegments; ix++) \n\t\t\t{\n\t\t\t\tconst a = ix + gridX * iz;\n\t\t\t\tconst b = ix + gridX * (iz + 1);\n\t\t\t\tconst c = ix + 1 + gridX * (iz + 1);\n\t\t\t\tconst d = ix + 1 + gridX * iz;\n\n\t\t\t\t// Faces\n\t\t\t\tindices.push(a, b, d, b, c, d);\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic static buildSkirt(width: number = 1.0, height: number = 1.0, widthSegments: number = 1.0, heightSegments: number = 1.0, skirtDepth: number, indices: number[], vertices: number[], normals: number[], uvs: number[]): void\n\t{\n\t\t// Half width X \n\t\tconst widthHalf = width / 2;\n\n\t\t// Half width Z\n\t\tconst heightHalf = height / 2;\n\n\t\t// Size of the grid in X\n\t\tconst gridX = widthSegments + 1;\n\n\t\t// Size of the grid in Z\n\t\tconst gridZ = heightSegments + 1;\n\n\t\t// Width of each segment X\n\t\tconst segmentWidth = width / widthSegments;\n\t\t\n\t\t// Height of each segment Z\n\t\tconst segmentHeight = height / heightSegments;\n\n\t\tlet start = vertices.length / 3;\n\n\t\t// Down X\n\t\tfor (let ix = 0; ix < gridX; ix++) \n\t\t{\n\t\t\tconst x = ix * segmentWidth - widthHalf;\n\t\t\tconst z = -heightHalf;\n\n\t\t\tvertices.push(x, -skirtDepth, z);\n\t\t\tnormals.push(0, 1, 0);\n\t\t\tuvs.push(ix / widthSegments, 1);\n\t\t}\n\n\t\t// Indices\n\t\tfor (let ix = 0; ix < widthSegments; ix++) \n\t\t{\n\t\t\tconst a = ix;\n\t\t\tconst d = ix + 1;\n\t\t\tconst b = ix + start;\n\t\t\tconst c = ix + start + 1;\n\t\t\tindices.push(d, b, a, d, c, b);\n\t\t}\n\n\t\tstart = vertices.length / 3;\n\n\t\t// Up X\n\t\tfor (let ix = 0; ix < gridX; ix++) \n\t\t{\n\t\t\tconst x = ix * segmentWidth - widthHalf;\n\t\t\tconst z = heightSegments * segmentHeight - heightHalf;\n\n\t\t\tvertices.push(x, -skirtDepth, z);\n\t\t\tnormals.push(0, 1, 0);\n\t\t\tuvs.push(ix / widthSegments, 0);\n\t\t}\n\t\t\n\t\t// Index of the beginning of the last X row\n\t\tlet offset = gridX * gridZ - widthSegments - 1; \n\n\t\tfor (let ix = 0; ix < widthSegments; ix++) \n\t\t{\n\t\t\tconst a = offset + ix;\n\t\t\tconst d = offset + ix + 1;\n\t\t\tconst b = ix + start;\n\t\t\tconst c = ix + start + 1;\n\t\t\tindices.push(a, b, d, b, c, d);\n\t\t}\n\n\t\tstart = vertices.length / 3;\n\n\t\t// Down Z\n\t\tfor (let iz = 0; iz < gridZ; iz++) \n\t\t{\n\t\t\tconst z = iz * segmentHeight - heightHalf;\n\t\t\tconst x = - widthHalf;\n\n\t\t\tvertices.push(x, -skirtDepth, z);\n\t\t\tnormals.push(0, 1, 0);\n\t\t\tuvs.push(0, 1 - iz / heightSegments);\n\t\t}\n\n\t\tfor (let iz = 0; iz < heightSegments; iz++) \n\t\t{\n\t\t\tconst a = iz * gridZ;\n\t\t\tconst d = (iz + 1) * gridZ;\n\t\t\tconst b = iz + start;\n\t\t\tconst c = iz + start + 1;\n\n\t\t\tindices.push(a, b, d, b, c, d);\n\t\t}\n\n\t\tstart = vertices.length / 3;\n\n\t\t// Up Z\n\t\tfor (let iz = 0; iz < gridZ; iz++) \n\t\t{\n\t\t\tconst z = iz * segmentHeight - heightHalf;\n\t\t\tconst x = widthSegments * segmentWidth - widthHalf;\n\n\t\t\tvertices.push(x, -skirtDepth, z);\n\t\t\tnormals.push(0, 1, 0);\n\n\t\t\tuvs.push(1.0, 1 - iz / heightSegments);\n\t\t}\n\n\t\tfor (let iz = 0; iz < heightSegments; iz++) \n\t\t{\n\t\t\tconst a = iz * gridZ + heightSegments;\n\t\t\tconst d = (iz + 1) * gridZ + heightSegments;\n\t\t\tconst b = iz + start;\n\t\t\tconst c = iz + start + 1;\n\t\t\t\n\t\t\tindices.push(d, b, a, d, c, b);\n\t\t}\n\t}\n}\n","import {BufferGeometry, Float32BufferAttribute, Vector3} from 'three';\nimport {MapNodeGeometry} from './MapNodeGeometry';\n\nexport class MapNodeHeightGeometry extends BufferGeometry\n{\n\t/**\n\t * Map node geometry constructor.\n\t *\n\t * @param width - Width of the node.\n\t * @param height - Height of the node.\n\t * @param widthSegments - Number of subdivisions along the width.\n\t * @param heightSegments - Number of subdivisions along the height.\n\t * @param skirt - Skirt around the plane to mask gaps between tiles.\n\t */\n\tpublic constructor(width: number = 1.0, height: number = 1.0, widthSegments: number = 1.0, heightSegments: number = 1.0, skirt: boolean = false, skirtDepth: number = 10.0, imageData: ImageData = null, calculateNormals: boolean = true)\n\t{\n\t\tsuper();\n\n\t\t// Buffers\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// Build plane\n\t\tMapNodeGeometry.buildPlane(width, height, widthSegments, heightSegments, indices, vertices, normals, uvs);\n\n\t\tconst data = imageData.data;\n\n\t\tfor (let i = 0, j = 0; i < data.length && j < vertices.length; i += 4, j += 3) \n\t\t{\n\t\t\tconst r = data[i];\n\t\t\tconst g = data[i + 1];\n\t\t\tconst b = data[i + 2];\n\n\t\t\t// The value will be composed of the bits RGB\n\t\t\tconst value = (r * 65536 + g * 256 + b) * 0.1 - 1e4;\n\n\t\t\tvertices[j + 1] = value;\n\t\t}\n\n\t\t// Generate the skirt\n\t\tif (skirt)\n\t\t{\n\t\t\tMapNodeGeometry.buildSkirt(width, height, widthSegments, heightSegments, skirtDepth, indices, vertices, normals, uvs);\n\t\t}\n\n\t\tthis.setIndex(indices);\n\t\tthis.setAttribute('position', new Float32BufferAttribute(vertices, 3));\n\t\tthis.setAttribute('normal', new Float32BufferAttribute(normals, 3));\n\t\tthis.setAttribute('uv', new Float32BufferAttribute(uvs, 2));\n\n\t\tif (calculateNormals)\n\t\t{\n\t\t\tthis.computeNormals(widthSegments, heightSegments);\n\t\t}\n\t}\n\n\t/**\n\t * Compute normals for the height geometry.\n\t * \n\t * Only computes normals for the surface of the map geometry. Skirts are not considered.\n\t * \n\t * @param widthSegments - Number of segments in width.\n\t * @param heightSegments - Number of segments in height.\n\t */\n\tpublic computeNormals(widthSegments: number, heightSegments: number): void \n\t{\n\t\tconst positionAttribute = this.getAttribute('position');\n\t\n\t\tif (positionAttribute !== undefined)\n\t\t{\n\t\t\t// Reset existing normals to zero\n\t\t\tlet normalAttribute = this.getAttribute('normal');\n\t\t\tconst normalLength = heightSegments * widthSegments;\n\t\t\tfor (let i = 0; i < normalLength; i++)\n\t\t\t{\n\t\t\t\tnormalAttribute.setXYZ(i, 0, 0, 0);\n\t\t\t}\n\n\t\t\tconst pA = new Vector3(), pB = new Vector3(), pC = new Vector3();\n\t\t\tconst nA = new Vector3(), nB = new Vector3(), nC = new Vector3();\n\t\t\tconst cb = new Vector3(), ab = new Vector3();\n\t\t\t\n\t\t\tconst indexLength = heightSegments * widthSegments * 6;\n\t\t\tfor (let i = 0; i < indexLength ; i += 3)\n\t\t\t{\n\t\t\t\tconst vA = this.index.getX(i + 0);\n\t\t\t\tconst vB = this.index.getX(i + 1);\n\t\t\t\tconst vC = this.index.getX(i + 2);\n\n\t\t\t\tpA.fromBufferAttribute(positionAttribute, vA);\n\t\t\t\tpB.fromBufferAttribute(positionAttribute, vB);\n\t\t\t\tpC.fromBufferAttribute(positionAttribute, vC);\n\n\t\t\t\tcb.subVectors(pC, pB);\n\t\t\t\tab.subVectors(pA, pB);\n\t\t\t\tcb.cross(ab);\n\n\t\t\t\tnA.fromBufferAttribute(normalAttribute, vA);\n\t\t\t\tnB.fromBufferAttribute(normalAttribute, vB);\n\t\t\t\tnC.fromBufferAttribute(normalAttribute, vC);\n\n\t\t\t\tnA.add(cb);\n\t\t\t\tnB.add(cb);\n\t\t\t\tnC.add(cb);\n\n\t\t\t\tnormalAttribute.setXYZ(vA, nA.x, nA.y, nA.z);\n\t\t\t\tnormalAttribute.setXYZ(vB, nB.x, nB.y, nB.z);\n\t\t\t\tnormalAttribute.setXYZ(vC, nC.x, nC.y, nC.z);\n\t\t\t}\n\n\t\t\tthis.normalizeNormals();\n\n\t\t\tnormalAttribute.needsUpdate = true;\n\t\t}\n\t}\n}\n","import {BufferGeometry, Float32BufferAttribute, Vector3} from 'three';\n\n/**\n * Map node geometry is a geometry used to represent the spherical map nodes.\n */\nexport class MapSphereNodeGeometry extends BufferGeometry \n{\n\t/**\n\t * Map sphere geometry constructor.\n\t * \n\t * @param width - Width of the node.\n\t * @param height - Height of the node.\n\t * @param widthSegments - Number of subdivisions along the width.\n\t * @param heightSegments - Number of subdivisions along the height.\n\t */\n\tpublic constructor(radius: number, widthSegments: number, heightSegments: number, phiStart: number, phiLength: number, thetaStart: number, thetaLength: number) \n\t{\n\t\tsuper();\n\n\t\tconst thetaEnd = thetaStart + thetaLength;\n\t\tlet index = 0;\n\t\tconst grid = [];\n\t\tconst vertex = new Vector3();\n\t\tconst normal = new Vector3();\n\n\t\t// Buffers\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// Generate vertices, normals and uvs\n\t\tfor (let iy = 0; iy <= heightSegments; iy++) \n\t\t{\n\t\t\tconst verticesRow = [];\n\t\t\tconst v = iy / heightSegments;\n\n\t\t\tfor (let ix = 0; ix <= widthSegments; ix++) \n\t\t\t{\n\t\t\t\tconst u = ix / widthSegments;\n\n\t\t\t\t// Vertex\n\t\t\t\tvertex.x = -radius * Math.cos(phiStart + u * phiLength) * Math.sin(thetaStart + v * thetaLength);\n\t\t\t\tvertex.y = radius * Math.cos(thetaStart + v * thetaLength);\n\t\t\t\tvertex.z = radius * Math.sin(phiStart + u * phiLength) * Math.sin(thetaStart + v * thetaLength);\n\n\t\t\t\tvertices.push(vertex.x, vertex.y, vertex.z);\n\n\t\t\t\t// Normal\n\t\t\t\tnormal.set(vertex.x, vertex.y, vertex.z).normalize();\n\t\t\t\tnormals.push(normal.x, normal.y, normal.z);\n\n\t\t\t\t// UV\n\t\t\t\tuvs.push(u, 1 - v);\n\t\t\t\tverticesRow.push(index++);\n\t\t\t}\n\n\t\t\tgrid.push(verticesRow);\n\t\t}\n\n\t\t// Indices\n\t\tfor (let iy = 0; iy < heightSegments; iy++) \n\t\t{\n\t\t\tfor (let ix = 0; ix < widthSegments; ix++) \n\t\t\t{\n\t\t\t\tconst a = grid[iy][ix + 1];\n\t\t\t\tconst b = grid[iy][ix];\n\t\t\t\tconst c = grid[iy + 1][ix];\n\t\t\t\tconst d = grid[iy + 1][ix + 1];\n\n\t\t\t\tif (iy !== 0 || thetaStart > 0) \n\t\t\t\t{\n\t\t\t\t\tindices.push(a, b, d);\n\t\t\t\t}\n\n\t\t\t\tif (iy !== heightSegments - 1 || thetaEnd < Math.PI) \n\t\t\t\t{\n\t\t\t\t\tindices.push(b, c, d);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.setIndex(indices);\n\t\tthis.setAttribute('position', new Float32BufferAttribute(vertices, 3));\n\t\tthis.setAttribute('normal', new Float32BufferAttribute(normals, 3));\n\t\tthis.setAttribute('uv', new Float32BufferAttribute(uvs, 2));\n\t}\n}\n","import {LODRadial} from './LODRadial';\nimport {Camera, Frustum, Matrix4, Object3D, Vector3, WebGLRenderer} from 'three';\nimport {MapView} from '../MapView';\n\nconst projection = new Matrix4();\nconst pov = new Vector3();\nconst frustum = new Frustum();\nconst position = new Vector3();\n\n/**\n * Check the planar distance between the nodes center and the view position.\n *\n * Only subdivides elements inside of the camera frustum.\n */\nexport class LODFrustum extends LODRadial \n{\n\t/**\n\t * Distance to subdivide the tiles.\n\t */\n\tpublic override subdivideDistance: number;\n\n\t/**\n\t * Distance to simplify the tiles.\n\t */\n\tpublic override simplifyDistance: number;\n\n\t/**\n\t * If true only the central point of the plane geometry will be used\n\t *\n\t * Otherwise the object bouding sphere will be tested, providing better results for nodes on frustum edge but will lower performance.\n\t */\n\tpublic testCenter: boolean = true;\n\n\t/**\n\t * If set true only the center point of the object is considered. \n\t * \n\t * Otherwise the full bouding box of the objects are considered.\n\t */\n\tpublic pointOnly: boolean = false;\n\n\tpublic constructor(subdivideDistance: number = 120, simplifyDistance: number = 400) \n\t{\n\t\tsuper(subdivideDistance, simplifyDistance);\n\t}\n\n\tpublic override updateLOD(view: MapView, camera: Camera, renderer: WebGLRenderer, scene: Object3D): void\n\t{\n\t\tprojection.multiplyMatrices(camera.projectionMatrix, camera.matrixWorldInverse);\n\t\tfrustum.setFromProjectionMatrix(projection);\n\t\tcamera.getWorldPosition(pov);\n\n\t\tview.children[0].traverse((node: any) => \n\t\t{\n\t\t\tnode.getWorldPosition(position);\n\t\t\tlet distance = pov.distanceTo(position);\n\t\t\tdistance /= Math.pow(2, view.provider.maxZoom - node.level);\n\n\t\t\tconst inFrustum = this.pointOnly ? frustum.containsPoint(position) : frustum.intersectsObject(node);\n\n\t\t\tif (distance < this.subdivideDistance && inFrustum) \n\t\t\t{\n\t\t\t\tnode.subdivide();\n\t\t\t}\n\t\t\telse if (distance > this.simplifyDistance && node.parentNode) \n\t\t\t{\n\t\t\t\tnode.parentNode.simplify();\n\t\t\t}\n\t\t});\n\t}\n}\n","import {LODControl} from './LODControl';\nimport {Camera, Object3D, Vector3, WebGLRenderer} from 'three';\nimport {MapView} from '../MapView';\n\nconst pov = new Vector3();\nconst position = new Vector3();\n\n/**\n * Check the planar distance between the nodes center and the view position.\n *\n * Distance is adjusted with the node level, more consistent results since every node is considered.\n */\nexport class LODRadial implements LODControl \n{\n\t/**\n\t * Minimum ditance to subdivide nodes.\n\t */\n\tpublic subdivideDistance: number;\n\n\t/**\n\t * Minimum ditance to simplify far away nodes that are subdivided.\n\t */\n\tpublic simplifyDistance: number;\n\n\tpublic constructor(subdivideDistance: number = 50, simplifyDistance: number = 300) \n\t{\n\t\tthis.subdivideDistance = subdivideDistance;\n\t\tthis.simplifyDistance = simplifyDistance;\n\t}\n\n\tpublic updateLOD(view: MapView, camera: Camera, renderer: WebGLRenderer, scene: Object3D): void\n\t{\n\t\tcamera.getWorldPosition(pov);\n\n\t\tview.children[0].traverse((node: any) =>\n\t\t{\n\t\t\tnode.getWorldPosition(position);\n\n\t\t\tlet distance = pov.distanceTo(position);\n\t\t\tdistance /= Math.pow(2, view.provider.maxZoom - node.level);\n\n\t\t\tif (distance < this.subdivideDistance) \n\t\t\t{\n\t\t\t\tnode.subdivide();\n\t\t\t}\n\t\t\telse if (distance > this.simplifyDistance && node.parentNode) \n\t\t\t{\n\t\t\t\tnode.parentNode.simplify();\n\t\t\t}\n\t\t});\n\t}\n}\n","import {LODControl} from './LODControl';\nimport {Camera, Object3D, Raycaster, Vector2, Vector3, WebGLRenderer} from 'three';\nimport {MapView} from '../MapView';\n\n/**\n * Use random raycasting to randomly pick n objects to be tested on screen space.\n *\n * Overall the fastest solution but does not include out of screen objects.\n */\nexport class LODRaycast implements LODControl \n{\n\t/**\n\t * Number of rays used to test nodes and subdivide the map.\n\t *\n\t * N rays are cast each frame dependeing on this value to check distance to the visible map nodes. A single ray should be enough for must scenarios.\n\t */\n\tpublic subdivisionRays: number = 1;\n\n\t/**\n\t * Threshold to subdivide the map tiles.\n\t *\n\t * Lower value will subdivide earlier (less zoom required to subdivide).\n\t */\n\tpublic thresholdUp: number = 0.6;\n\n\t/**\n\t * Threshold to simplify the map tiles.\n\t *\n\t * Higher value will simplify earlier.\n\t */\n\tpublic thresholdDown: number = 0.15;\n\n\t/**\n\t * Raycaster object used to cast rays into the world and check for hits.\n\t */\n\tpublic raycaster: Raycaster = new Raycaster();\n\n\t/**\n\t * Normalized mouse coordinates.\n\t */\n\tpublic mouse: Vector2 = new Vector2();\n\n\t/**\n\t * Consider the distance powered to level of the node.\n\t */\n\tpublic powerDistance: boolean = false;\n\n\t/**\n\t * Consider the scale of the node when calculating the distance.\n\t * \n\t * If distance is not considered threshold values should be absolute distances.\n\t */\n\tpublic scaleDistance: boolean = true;\n\n\tpublic updateLOD(view: MapView, camera: Camera, renderer: WebGLRenderer, scene: Object3D): void\n\t{\n\t\tconst intersects = [];\n\n\t\tfor (let t = 0; t < this.subdivisionRays; t++) \n\t\t{\n\t\t\t// Generate random point in viewport\n\t\t\tthis.mouse.set(Math.random() * 2 - 1, Math.random() * 2 - 1);\n\n\t\t\t// Check intersection\n\t\t\tthis.raycaster.setFromCamera(this.mouse, camera);\n\t\t\tthis.raycaster.intersectObjects(view.children, true, intersects);\n\t\t}\n\n\t\tfor (let i = 0; i < intersects.length; i++) \n\t\t{\n\t\t\tconst node = intersects[i].object;\n\t\t\tlet distance = intersects[i].distance;\n\n\t\t\tif (this.powerDistance) \n\t\t\t{\n\t\t\t\tdistance = Math.pow(distance * 2, node.level);\n\t\t\t}\n\n\t\t\tif (this.scaleDistance) \n\t\t\t{\n\t\t\t\t// Get scale from transformation matrix directly\n\t\t\t\tconst matrix = node.matrixWorld.elements;\n\t\t\t\tconst vector = new Vector3(matrix[0], matrix[1], matrix[2]);\n\t\t\t\tdistance = vector.length() / distance;\n\t\t\t}\n\n\t\t\tif (distance > this.thresholdUp) \n\t\t\t{\n\t\t\t\tnode.subdivide();\n\t\t\t}\n\t\t\telse if (distance < this.thresholdDown && node.parentNode) \n\t\t\t{\n\t\t\t\tnode.parentNode.simplify();\n\t\t\t}\n\t\t}\n\t}\n}\n","import {Material, MeshPhongMaterial, BufferGeometry, Vector3, Raycaster, Intersection} from 'three';\nimport {MapNodeGeometry} from '../geometries/MapNodeGeometry';\nimport {MapNode, QuadTreePosition} from './MapNode';\nimport {MapPlaneNode} from './MapPlaneNode';\nimport {UnitsUtils} from '../utils/UnitsUtils';\nimport {MapView} from '../MapView';\nimport {MapNodeHeightGeometry} from '../geometries/MapNodeHeightGeometry';\nimport {CanvasUtils} from '../utils/CanvasUtils';\n\n/**\n * Represents a height map tile node that can be subdivided into other height nodes.\n *\n * Its important to update match the height of the tile with the neighbors nodes edge heights to ensure proper continuity of the surface.\n *\n * The height node is designed to use MapBox elevation tile encoded data as described in https://www.mapbox.com/help/access-elevation-data/\n */\nexport class MapHeightNode extends MapNode \n{\n\t/**\n\t * Flag indicating if the tile height data was loaded.\n\t */\n\tpublic heightLoaded: boolean = false;\n\n\t/**\n\t * Flag indicating if the tile texture was loaded.\n\t */\n\tpublic textureLoaded: boolean = false;\n\n\t/**\n\t * Original tile size of the images retrieved from the height provider.\n\t */\n\tpublic static tileSize: number = 256;\n\n\t/**\n\t * Size of the grid of the geometry displayed on the scene for each tile.\n\t */\n\tpublic geometrySize: number = 16;\n\n\t/**\n\t * If true the tiles will compute their normals.\n\t */\n\tpublic geometryNormals: boolean = false;\n\n\t/**\n\t * Map node plane geometry.\n\t */\n\tpublic static geometry: BufferGeometry = new MapNodeGeometry(1, 1, 1, 1);\n\n\t/**\n\t * Base geometry shared across all the nodes.\n\t */\n\tpublic static override baseGeometry: BufferGeometry = MapPlaneNode.geometry;\n\n\t/**\n\t * Scale to apply to each node.\n\t */\n\tpublic static override baseScale: Vector3 = new Vector3(UnitsUtils.EARTH_PERIMETER, 1, UnitsUtils.EARTH_PERIMETER);\n\n\t/**\n\t * Map height node constructor.\n\t *\n\t * @param parentNode - The parent node of this node.\n\t * @param mapView - Map view object where this node is placed.\n\t * @param location - Position in the node tree relative to the parent.\n\t * @param level - Zoom level in the tile tree of the node.\n\t * @param x - X position of the node in the tile tree.\n\t * @param y - Y position of the node in the tile tree.\n\t * @param material - Material used to render this height node.\n\t * @param geometry - Geometry used to render this height node.\n\t */\n\tpublic constructor(parentNode: MapHeightNode = null, mapView: MapView = null, location: number = QuadTreePosition.root, level: number = 0, x: number = 0, y: number = 0, geometry: BufferGeometry = MapHeightNode.geometry, material: Material = new MeshPhongMaterial({wireframe: false, color: 0xffffff})) \n\t{\n\t\tsuper(parentNode, mapView, location, level, x, y, geometry, material);\n\n\t\tthis.isMesh = true;\n\t\tthis.visible = false;\n\t\tthis.matrixAutoUpdate = false;\n\t}\n\n\tpublic override async initialize(): Promise \n\t{\n\t\tsuper.initialize();\n\t\t\n\t\tawait this.loadData();\n\t\tawait this.loadHeightGeometry();\n\n\t\tthis.nodeReady();\n\t}\n\n\t/**\n\t * Load tile texture from the server.\n\t *\n\t * Aditionally in this height node it loads elevation data from the height provider and generate the appropiate maps.\n\t */\n\tpublic override async loadData(): Promise \n\t{\n\t\tawait super.loadData();\n\t\t\n\t\tthis.textureLoaded = true;\n\t}\n\n\t/**\n\t * Load height texture from the server and create a geometry to match it.\n\t *\n\t * @returns Returns a promise indicating when the geometry generation has finished.\n\t */\n\tpublic async loadHeightGeometry(): Promise \n\t{\n\t\tif (this.mapView.heightProvider === null) \n\t\t{\n\t\t\tthrow new Error('GeoThree: MapView.heightProvider provider is null.');\n\t\t}\n \n\t\tif (this.level < this.mapView.heightProvider.minZoom || this.level > this.mapView.heightProvider.maxZoom)\n\t\t{\n\t\t\tconsole.warn('Geo-Three: Loading tile outside of provider range.', this);\n\n\t\t\tthis.geometry = MapPlaneNode.baseGeometry;\n\t\t\treturn;\n\t\t}\n\n\t\ttry \n\t\t{\n\t\t\tconst image = await this.mapView.heightProvider.fetchTile(this.level, this.x, this.y);\n \n\t\t\tif (this.disposed) \n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst canvas = CanvasUtils.createOffscreenCanvas(this.geometrySize + 1, this.geometrySize + 1);\n\n\t\t\tconst context = canvas.getContext('2d') as CanvasRenderingContext2D;\n\t\t\tcontext.imageSmoothingEnabled = false;\n\t\t\tcontext.drawImage(image, 0, 0, MapHeightNode.tileSize, MapHeightNode.tileSize, 0, 0, canvas.width, canvas.height);\n\n\t\t\tconst imageData = context.getImageData(0, 0, canvas.width, canvas.height);\n\n\t\t\tthis.geometry = new MapNodeHeightGeometry(1, 1, this.geometrySize, this.geometrySize, true, 10.0, imageData, true);\n\t\t}\n\t\tcatch (e) \n\t\t{\n\t\t\tif (this.disposed) \n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t\n\t\t\tthis.geometry = MapPlaneNode.baseGeometry;\n\t\t}\n\n\t\tthis.heightLoaded = true;\n\t}\n\n\tpublic override createChildNodes(): void \n\t{\n\t\tconst level = this.level + 1;\n\t\tconst Constructor = Object.getPrototypeOf(this).constructor;\n\n\t\tconst x = this.x * 2;\n\t\tconst y = this.y * 2;\n\t\tlet node = new Constructor(this, this.mapView, QuadTreePosition.topLeft, level, x, y);\n\t\tnode.scale.set(0.5, 1.0, 0.5);\n\t\tnode.position.set(-0.25, 0, -0.25);\n\t\tthis.add(node);\n\t\tnode.updateMatrix();\n\t\tnode.updateMatrixWorld(true);\n\n\t\tnode = new Constructor(this, this.mapView, QuadTreePosition.topRight, level, x + 1, y);\n\t\tnode.scale.set(0.5, 1.0, 0.5);\n\t\tnode.position.set(0.25, 0, -0.25);\n\t\tthis.add(node);\n\t\tnode.updateMatrix();\n\t\tnode.updateMatrixWorld(true);\n\n\t\tnode = new Constructor(this, this.mapView, QuadTreePosition.bottomLeft, level, x, y + 1);\n\t\tnode.scale.set(0.5, 1.0, 0.5);\n\t\tnode.position.set(-0.25, 0, 0.25);\n\t\tthis.add(node);\n\t\tnode.updateMatrix();\n\t\tnode.updateMatrixWorld(true);\n\n\t\tnode = new Constructor(this, this.mapView, QuadTreePosition.bottomRight, level, x + 1, y + 1);\n\t\tnode.scale.set(0.5, 1.0, 0.5);\n\t\tnode.position.set(0.25, 0, 0.25);\n\t\tthis.add(node);\n\t\tnode.updateMatrix();\n\t\tnode.updateMatrixWorld(true);\n\t}\n\n\t/**\n\t * Overrides normal raycasting, to avoid raycasting when isMesh is set to false.\n\t */\n\tpublic override raycast(raycaster: Raycaster, intersects: Intersection[]): void\n\t{\n\t\tif (this.isMesh === true) \n\t\t{\n\t\t\tsuper.raycast(raycaster, intersects);\n\t\t}\n\t}\n}\n","import {BufferGeometry, Intersection, LinearFilter, Material, MeshPhongMaterial, NearestFilter, Raycaster, RGBAFormat, Texture, Vector3} from 'three';\nimport {MapHeightNode} from './MapHeightNode';\nimport {MapNodeGeometry} from '../geometries/MapNodeGeometry';\nimport {MapPlaneNode} from './MapPlaneNode';\nimport {UnitsUtils} from '../utils/UnitsUtils';\nimport {MapNode, QuadTreePosition} from './MapNode';\nimport {MapView} from '../MapView';\nimport {TextureUtils} from '../utils/TextureUtils';\n\n/**\n * Map height node that uses GPU height calculation to generate the deformed plane mesh.\n *\n * This solution is faster if no mesh interaction is required since all trasnformations are done in the GPU the transformed mesh cannot be accessed for CPU operations (e.g. raycasting).\n *\n * @param parentNode - The parent node of this node.\n * @param mapView - Map view object where this node is placed.\n * @param location - Position in the node tree relative to the parent.\n * @param level - Zoom level in the tile tree of the node.\n * @param x - X position of the node in the tile tree.\n * @param y - Y position of the node in the tile tree.\n */\nexport class MapHeightNodeShader extends MapHeightNode \n{\n\t/**\n\t * Default height texture applied when tile load fails.\n\t * \n\t * This tile sets the height to sea level where it is common for the data sources to be missing height data.\n\t */\n\tpublic static defaultHeightTexture = TextureUtils.createFillTexture('#0186C0');\n\n\t/**\n\t * Size of the grid of the geometry displayed on the scene for each tile.\n\t */\n\tpublic static geometrySize: number = 256;\n\n\t/**\n\t * Map node plane geometry.\n\t */\n\tpublic static override geometry: BufferGeometry = new MapNodeGeometry(1.0, 1.0, MapHeightNodeShader.geometrySize, MapHeightNodeShader.geometrySize, true);\n\n\t/**\n\t * Base geometry of the map node.\n\t */\n\tpublic static override baseGeometry: BufferGeometry = MapPlaneNode.geometry;\n\n\t/**\n\t * Base scale of the map node.\n\t */\n\tpublic static override baseScale: Vector3 = new Vector3(UnitsUtils.EARTH_PERIMETER, 1, UnitsUtils.EARTH_PERIMETER);\n\n\tpublic constructor(parentNode: MapHeightNode = null, mapView: MapView = null, location: number = QuadTreePosition.root, level: number = 0, x: number = 0, y: number = 0) \n\t{\n\t\tconst material: Material = MapHeightNodeShader.prepareMaterial(new MeshPhongMaterial({map: MapNode.defaultTexture, color: 0xFFFFFF}));\n\n\t\tsuper(parentNode, mapView, location, level, x, y, MapHeightNodeShader.geometry, material);\n\n\t\tthis.frustumCulled = false;\n\t}\n\n\t/**\n\t * Prepare the three.js material to be used in the map tile.\n\t *\n\t * @param material - Material to be transformed.\n\t */\n\tpublic static prepareMaterial(material: Material): Material\n\t{\n\t\tmaterial.userData = {heightMap: {value: MapHeightNodeShader.defaultHeightTexture}};\n\n\t\tmaterial.onBeforeCompile = (shader) => \n\t\t{\n\t\t\t// Pass uniforms from userData to the\n\t\t\tfor (const i in material.userData) \n\t\t\t{\n\t\t\t\tshader.uniforms[i] = material.userData[i];\n\t\t\t}\n\n\t\t\t// Vertex variables\n\t\t\tshader.vertexShader =\n\t\t\t\t`\n\t\t\tuniform sampler2D heightMap;\n\t\t\t` + shader.vertexShader;\n\n\t\t\t// Vertex depth logic\n\t\t\tshader.vertexShader = shader.vertexShader.replace('#include ', `\n\t\t\t#include \n\t\n\t\t\t// Calculate height of the title\n\t\t\tvec4 _theight = texture2D(heightMap, vUv);\n\t\t\tfloat _height = ((_theight.r * 255.0 * 65536.0 + _theight.g * 255.0 * 256.0 + _theight.b * 255.0) * 0.1) - 10000.0;\n\t\t\tvec3 _transformed = position + _height * normal;\n\t\n\t\t\t// Vertex position based on height\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4(_transformed, 1.0);\n\t\t\t`);\n\t\t};\n\n\t\treturn material;\n\t}\n\n\tpublic override async loadData(): Promise \n\t{\n\t\tawait super.loadData();\n\n\t\tthis.textureLoaded = true;\n\t}\n\n\tpublic override async loadHeightGeometry(): Promise \n\t{\n\t\t\n\t\tif (this.mapView.heightProvider === null) \n\t\t{\n\t\t\tthrow new Error('GeoThree: MapView.heightProvider provider is null.');\n\t\t}\n\n\t\tif (this.level < this.mapView.heightProvider.minZoom || this.level > this.mapView.heightProvider.maxZoom)\n\t\t{\n\t\t\tconsole.warn('Geo-Three: Loading tile outside of provider range.', this);\n\n\t\t\t// @ts-ignore\n\t\t\tthis.material.map = MapHeightNodeShader.defaultTexture;\n\t\t\t// @ts-ignore\n\t\t\tthis.material.needsUpdate = true;\n\t\t\treturn;\n\t\t}\n\n\t\ttry \n\t\t{\n\t\t\tconst image = await this.mapView.heightProvider.fetchTile(this.level, this.x, this.y);\n\n\t\t\tif (this.disposed) \n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t\n\t\t\tconst texture = new Texture(image as any);\n\t\t\ttexture.generateMipmaps = false;\n\t\t\ttexture.format = RGBAFormat;\n\t\t\ttexture.magFilter = NearestFilter;\n\t\t\ttexture.minFilter = NearestFilter;\n\t\t\ttexture.needsUpdate = true;\n\t\t\t\n\t\t\t// @ts-ignore\n\t\t\tthis.material.userData.heightMap.value = texture;\n\t\t}\n\t\tcatch (e) \n\t\t{\n\t\t\tif (this.disposed) \n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t\n\t\t\tconsole.error('Geo-Three: Failed to load node tile height data.', this);\n\t\t\t\n\t\t\t// Water level texture (assume that missing texture will be water level)\n\t\t\t// @ts-ignore\n\t\t\tthis.material.userData.heightMap.value = MapHeightNodeShader.defaultHeightTexture;\n\t\t}\n\n\t\t// @ts-ignore\n\t\tthis.material.needsUpdate = true;\n\n\t\tthis.heightLoaded = true;\n\t}\n\n\t/**\n\t * Overrides normal raycasting, to avoid raycasting when isMesh is set to false.\n\t *\n\t * Switches the geometry for a simpler one for faster raycasting.\n\t */\n\tpublic override raycast(raycaster: Raycaster, intersects: Intersection[]): void\n\t{\n\t\tif (this.isMesh === true) \n\t\t{\n\t\t\tthis.geometry = MapPlaneNode.geometry;\n\n\t\t\tsuper.raycast(raycaster, intersects);\n\n\t\t\tthis.geometry = MapHeightNodeShader.geometry;\n\t\t}\n\t}\n}\n","import {BufferGeometry, DoubleSide, Float32BufferAttribute, Material, MeshPhongMaterial, NearestFilter, RGBAFormat, Texture, Uint32BufferAttribute} from 'three';\nimport {MapNodeGeometry} from '../geometries/MapNodeGeometry';\nimport {MapView} from '../MapView';\nimport {Martini} from './Martini';\nimport {MapHeightNode} from './MapHeightNode';\nimport {CanvasUtils} from '../utils/CanvasUtils';\nimport {QuadTreePosition} from './MapNode';\n\n/** \n * Represents a height map tile node using the RTIN method from the paper \"Right Triangulated Irregular Networks\".\n * \n * Based off the library https://github.com/mapbox/martini (Mapbox's Awesome Right-Triangulated Irregular Networks, Improved)\n *\n * @param parentNode - The parent node of this node.\n * @param mapView - Map view object where this node is placed.\n * @param location - Position in the node tree relative to the parent.\n * @param level - Zoom level in the tile tree of the node.\n * @param x - X position of the node in the tile tree.\n * @param y - Y position of the node in the tile tree.\n * @param material -Material used to render this height node.\n * @param geometry - Geometry used to render this height node.\n */\nexport class MapMartiniHeightNode extends MapHeightNode\n{\n\t/**\n\t * Geometry size to be used for each martini height node.\n\t */\n\tpublic static geometrySize: number = 16;\n\n\t/**\n\t * Empty texture used as a placeholder for missing textures.\n\t */\n\tpublic static emptyTexture: Texture = new Texture();\n\t\n\t/**\n\t * Base geometry appied before any custom geometru is used.\n\t */\n\tpublic static override geometry = new MapNodeGeometry(1, 1, 1, 1);\n\n\t/**\n\t * Elevation decoder configuration.\n\t * \n\t * Indicates how the pixels should be unpacked and transformed into height data.\n\t */\n\tpublic elevationDecoder: any = {\n\t\trScaler: 256,\n\t\tgScaler: 1,\n\t\tbScaler: 1 / 256,\n\t\toffset: -32768\n\t};\n\n\t/**\n\t * Original tile size of the images retrieved from the height provider.\n\t */\n\tpublic static override tileSize: number = 256;\n\n\t/**\n\t * Exageration (scale) of the terrain height.\n\t */\n\tpublic exageration = 1.0;\n\n\t/**\n\t * Max admissible error in the mesh generation.\n\t */\n\tpublic meshMaxError: number | Function = 10;\n\n\tpublic override material: MeshPhongMaterial;\n\n\tpublic constructor(parentNode: MapHeightNode = null, mapView: MapView = null, location: number = QuadTreePosition.root, level: number = 0, x: number = 0, y: number = 0, {elevationDecoder = null, meshMaxError = 10, exageration = 1} = {})\n\t{\n\t\tsuper(parentNode, mapView, location, level, x, y, MapMartiniHeightNode.geometry, MapMartiniHeightNode.prepareMaterial(new MeshPhongMaterial({\n\t\t\tmap: MapMartiniHeightNode.emptyTexture,\n\t\t\tcolor: 0xFFFFFF,\n\t\t\tside: DoubleSide\n\t\t}), level, exageration));\n\n\t\t\n\t\t// Set elevation decoder method\n\t\tif (elevationDecoder) \n\t\t{\n\t\t\tthis.elevationDecoder = elevationDecoder;\n\t\t}\n\n\t\tthis.meshMaxError = meshMaxError;\n\t\tthis.exageration = exageration;\n\t\tthis.frustumCulled = false;\n\t}\n\n\t/**\n\t * Prepare materia for usage in the height node.\n\t * \n\t * @param material - Material to be prepared for usage.\n\t * @param level - Depth of the tree.\n\t * @param exageration - Exageration to apply to the terrain.\n\t * @returns The material trasnformed.\n\t */\n\tpublic static prepareMaterial(material: Material, level: number, exageration: number = 1.0): Material \n\t{\n\t\tmaterial.userData = {\n\t\t\theightMap: {value: MapMartiniHeightNode.emptyTexture},\n\t\t\tdrawNormals: {value: 0},\n\t\t\tdrawBlack: {value: 0},\n\t\t\tzoomlevel: {value: level},\n\t\t\tcomputeNormals: {value: 1},\n\t\t\tdrawTexture: {value: 1}\n\t\t};\n\n\t\tmaterial.onBeforeCompile = (shader) => \n\t\t{\n\t\t\t// Pass uniforms from userData to the\n\t\t\tfor (let i in material.userData) \n\t\t\t{\n\t\t\t\tshader.uniforms[i] = material.userData[i];\n\t\t\t}\n\n\t\t\t// Vertex variables\n\t\t\tshader.vertexShader =\n\t\t\t\t`\n\t\t\t\tuniform bool computeNormals;\n\t\t\t\tuniform float zoomlevel;\n\t\t\t\tuniform sampler2D heightMap;\n\t\t\t\t` + shader.vertexShader;\n\t\t\t\n\t\t\tshader.fragmentShader =\n\t\t\t\t`\n\t\t\t\tuniform bool drawNormals;\n\t\t\t\tuniform bool drawTexture;\n\t\t\t\tuniform bool drawBlack;\n\t\t\t\t` + shader.fragmentShader;\n\n\t\t\t// Vertex depth logic\n\t\t\tshader.fragmentShader = shader.fragmentShader.replace('#include ',\n\t\t\t\t`\n\t\t\t\tif(drawBlack) {\n\t\t\t\t\tgl_FragColor = vec4( 0.0,0.0,0.0, 1.0 );\n\t\t\t\t} else if(drawNormals) {\n\t\t\t\t\tgl_FragColor = vec4( ( 0.5 * vNormal + 0.5 ), 1.0 );\n\t\t\t\t} else if (!drawTexture) {\n\t\t\t\t\tgl_FragColor = vec4( 0.0,0.0,0.0, 0.0 );\n\t\t\t\t}`\n\t\t\t);\n\n\t\t\tshader.vertexShader = shader.vertexShader.replace('#include ',\n\t\t\t\t`\n\t\t\t\t#include \n\n\t\t\t\t// queried pixels:\n\t\t\t\t// +-----------+\n\t\t\t\t// | | | |\n\t\t\t\t// | a | b | c |\n\t\t\t\t// | | | |\n\t\t\t\t// +-----------+\n\t\t\t\t// | | | |\n\t\t\t\t// | d | e | f |\n\t\t\t\t// | | | |\n\t\t\t\t// +-----------+\n\t\t\t\t// | | | |\n\t\t\t\t// | g | h | i |\n\t\t\t\t// | | | |\n\t\t\t\t// +-----------+\n\n\t\t\t\tif (computeNormals) {\n\t\t\t\t\tfloat e = getElevation(vUv, 0.0);\n\t\t\t\t\tivec2 size = textureSize(heightMap, 0);\n\t\t\t\t\tfloat offset = 1.0 / float(size.x);\n\t\t\t\t\tfloat a = getElevation(vUv + vec2(-offset, -offset), 0.0);\n\t\t\t\t\tfloat b = getElevation(vUv + vec2(0, -offset), 0.0);\n\t\t\t\t\tfloat c = getElevation(vUv + vec2(offset, -offset), 0.0);\n\t\t\t\t\tfloat d = getElevation(vUv + vec2(-offset, 0), 0.0);\n\t\t\t\t\tfloat f = getElevation(vUv + vec2(offset, 0), 0.0);\n\t\t\t\t\tfloat g = getElevation(vUv + vec2(-offset, offset), 0.0);\n\t\t\t\t\tfloat h = getElevation(vUv + vec2(0, offset), 0.0);\n\t\t\t\t\tfloat i = getElevation(vUv + vec2(offset,offset), 0.0);\n\n\n\t\t\t\t\tfloat normalLength = 500.0 / zoomlevel;\n\n\t\t\t\t\tvec3 v0 = vec3(0.0, 0.0, 0.0);\n\t\t\t\t\tvec3 v1 = vec3(0.0, normalLength, 0.0);\n\t\t\t\t\tvec3 v2 = vec3(normalLength, 0.0, 0.0);\n\t\t\t\t\tv0.z = (e + d + g + h) / 4.0;\n\t\t\t\t\tv1.z = (e+ b + a + d) / 4.0;\n\t\t\t\t\tv2.z = (e+ h + i + f) / 4.0;\n\t\t\t\t\tvNormal = (normalize(cross(v2 - v0, v1 - v0))).rbg;\n\t\t\t\t}\n\t\t\t\t`\n\t\t\t);\n\t\t};\n\n\t\treturn material;\n\t}\n\t\n\t/**\n\t * Get terrain points from image data.\n\t * \n\t * @param imageData - Terrain data encoded as image.\n\t * @param tileSize - Tile size.\n\t * @param elevation - Elevation scale (r, g, b, offset) object.\n\t * @returns The terrain elevation as a Float32 array.\n\t */\n\tpublic static getTerrain(imageData: Uint8ClampedArray, tileSize: number, elevation: any): Float32Array\n\t{\n\t\tconst {rScaler, bScaler, gScaler, offset} = elevation;\n\t\tconst gridSize = tileSize + 1;\n\n\t\t// From Martini demo\n\t\t// https://observablehq.com/@mourner/martin-real-time-rtin-terrain-mesh\n\t\tconst terrain = new Float32Array(gridSize * gridSize);\n\n\t\t// Decode terrain values\n\t\tfor (let i = 0, y = 0; y < tileSize; y++) \n\t\t{\n\t\t\tfor (let x = 0; x < tileSize; x++, i++) \n\t\t\t{\n\t\t\t\tconst k = i * 4;\n\t\t\t\tconst r = imageData[k + 0];\n\t\t\t\tconst g = imageData[k + 1];\n\t\t\t\tconst b = imageData[k + 2];\n\t\t\t\tterrain[i + y] = r * rScaler + g * gScaler + b * bScaler + offset;\n\t\t\t}\n\t\t}\n\n\t\t// Backfill bottom border\n\t\tfor (let i = gridSize * (gridSize - 1), x = 0; x < gridSize - 1; x++, i++) \n\t\t{\n\t\t\tterrain[i] = terrain[i - gridSize];\n\t\t}\n\n\t\t// Backfill right border\n\t\tfor (let i = gridSize - 1, y = 0; y < gridSize; y++, i += gridSize) \n\t\t{\n\t\t\tterrain[i] = terrain[i - 1];\n\t\t}\n\n\t\treturn terrain;\n\t}\n\t\n\t/**\n\t * Get the attributes that compose the mesh.\n\t * \n\t * @param vertices - Vertices.\n\t * @param terrain - Terrain\n\t * @param tileSize - Size of each tile.\n\t * @param bounds - Array with the bound of the map.\n\t * @param exageration - Vertical exageration of the map scale.\n\t * @returns The position and UV coordinates of the mesh.\n\t */\n\tpublic static getMeshAttributes(vertices: number[], terrain: Float32Array, tileSize: number, bounds: number[], exageration: number): {position: {value: Float32Array, size: number}, uv: {value: Float32Array, size: number}}\n\t{\n\t\tconst gridSize = tileSize + 1;\n\t\tconst numOfVerticies = vertices.length / 2;\n\t\n\t\t// vec3. x, y in pixels, z in meters\n\t\tconst positions = new Float32Array(numOfVerticies * 3);\n\t\n\t\t// vec2. 1 to 1 relationship with position. represents the uv on the texture image. 0,0 to 1,1.\n\t\tconst texCoords = new Float32Array(numOfVerticies * 2);\n\n\t\tconst [minX, minY, maxX, maxY] = bounds || [0, 0, tileSize, tileSize];\n\t\tconst xScale = (maxX - minX) / tileSize;\n\t\tconst yScale = (maxY - minY) / tileSize;\n\n\t\tfor (let i = 0; i < numOfVerticies; i++) \n\t\t{\n\t\t\tconst x = vertices[i * 2];\n\t\t\tconst y = vertices[i * 2 + 1];\n\t\t\tconst pixelIdx = y * gridSize + x;\n\n\t\t\tpositions[3 * i + 0] = x * xScale + minX;\n\t\t\tpositions[3 * i + 1] = -terrain[pixelIdx] * exageration;\n\t\t\tpositions[3 * i + 2] = -y * yScale + maxY;\n\t\n\t\t\ttexCoords[2 * i + 0] = x / tileSize;\n\t\t\ttexCoords[2 * i + 1] = y / tileSize;\n\t\t}\n\n\t\treturn {\n\t\t\tposition: {value: positions, size: 3},\n\t\t\tuv: {value: texCoords, size: 2}\n\t\t};\n\t}\t\n\n\t/**\n\t * Process the height texture received from the tile data provider.\n\t * \n\t * @param image - Image element received by the tile provider.\n\t */\n\tpublic async processHeight(image: HTMLImageElement): Promise \n\t{\n\t\tconst tileSize = image.width;\n\t\tconst gridSize = tileSize + 1;\n\t\tvar canvas = CanvasUtils.createOffscreenCanvas(tileSize, tileSize);\n\n\t\tvar context = canvas.getContext('2d') as CanvasRenderingContext2D;\n\t\tcontext.imageSmoothingEnabled = false;\n\t\tcontext.drawImage(image, 0, 0, tileSize, tileSize, 0, 0, canvas.width, canvas.height);\n\t\t\n\t\tvar imageData = context.getImageData(0, 0, canvas.width, canvas.height);\n\t\tvar data = imageData.data;\n\n\t\tconst terrain = MapMartiniHeightNode.getTerrain(data, tileSize, this.elevationDecoder);\n\t\tconst martini = new Martini(gridSize);\n\t\tconst tile = martini.createTile(terrain);\n\t\tconst {vertices, triangles} = tile.getMesh(typeof this.meshMaxError === 'function' ? this.meshMaxError(this.level) : this.meshMaxError);\n\n\t\tconst attributes = MapMartiniHeightNode.getMeshAttributes(vertices, terrain, tileSize, [-0.5, -0.5, 0.5, 0.5], this.exageration);\n\n\t\tthis.geometry = new BufferGeometry();\n\t\tthis.geometry.setIndex(new Uint32BufferAttribute(triangles, 1));\n\t\tthis.geometry.setAttribute('position', new Float32BufferAttribute( attributes.position.value, attributes.position.size));\n\t\tthis.geometry.setAttribute('uv', new Float32BufferAttribute( attributes.uv.value, attributes.uv.size));\n\t\tthis.geometry.rotateX(Math.PI);\n\n\t\tvar texture = new Texture(image);\n\t\ttexture.generateMipmaps = false;\n\t\ttexture.format = RGBAFormat;\n\t\ttexture.magFilter = NearestFilter;\n\t\ttexture.minFilter = NearestFilter;\n\t\ttexture.needsUpdate = true;\n\n\t\tthis.material.userData.heightMap.value = texture;\n\t\t// @ts-ignore\n\t\tthis.material.map = texture;\n\t\t// @ts-ignore\n\t\tthis.material.needsUpdate = true;\n\t}\n\t\n\t/**\n\t * Load height texture from the server and create a geometry to match it.\n\t */\n\tpublic override async loadHeightGeometry(): Promise \n\t{\n\t\tif (this.mapView.heightProvider === null) \n\t\t{\n\t\t\tthrow new Error('GeoThree: MapView.heightProvider provider is null.');\n\t\t}\n\n\t\tconst image = await this.mapView.heightProvider.fetchTile(this.level, this.x, this.y);\n\n\t\tif (this.disposed) \n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tthis.processHeight(image);\n\n\t\tthis.heightLoaded = true;\n\t\tthis.nodeReady();\n\t}\n}\n","import {LinearFilter, Material, Mesh, Texture, Vector3, BufferGeometry, Object3D, RGBAFormat} from 'three';\nimport {MapView} from '../MapView';\nimport {TextureUtils} from '../utils/TextureUtils';\n\n/**\n * Constants to store quad-tree positions.\n */\nexport class QuadTreePosition \n{\n\t/**\n\t * Root node has no location.\n\t */\n\tpublic static root: number = -1;\n\n\t/**\n\t * Index of top left quad-tree branch node.\n\t *\n\t * Can be used to navigate the children array looking for neighbors.\n\t */\n\tpublic static topLeft: number = 0;\n\n\t/**\n\t * Index of top left quad-tree branch node.\n\t *\n\t * Can be used to navigate the children array looking for neighbors.\n\t */\n\tpublic static topRight: number = 1;\n\n\t/**\n\t * Index of top left quad-tree branch node.\n\t *\n\t * Can be used to navigate the children array looking for neighbors.\n\t */\n\tpublic static bottomLeft: number = 2;\n\n\t/**\n\t * Index of top left quad-tree branch node.\n\t *\n\t * Can be used to navigate the children array looking for neighbors.\n\t */\n\tpublic static bottomRight: number = 3;\n}\n\n/**\n * Represents a map tile node inside of the tiles quad-tree\n *\n * Each map node can be subdivided into other nodes.\n *\n * It is intended to be used as a base class for other map node implementations.\n */\nexport abstract class MapNode extends Mesh \n{\n\t/**\n\t * Default texture used when texture fails to load.\n\t */\n\tpublic static defaultTexture = TextureUtils.createFillTexture();\n\n\t/**\n\t * The map view object where the node is placed.\n\t */\n\tpublic mapView: MapView = null;\n\n\t/**\n\t * Parent node (from an upper tile level).\n\t */\n\tpublic parentNode: MapNode = null;\n\n\t/**\n\t * Index of the map node in the quad-tree parent node.\n\t *\n\t * Position in the tree parent, can be topLeft, topRight, bottomLeft or bottomRight.\n\t */\n\tpublic location: number;\n\n\t/**\n\t * Tile level of this node.\n\t */\n\tpublic level: number;\n\n\t/**\n\t * Tile x position.\n\t */\n\tpublic x: number;\n\n\t/**\n\t * Tile y position.\n\t */\n\tpublic y: number;\n\n\t/**\n\t * Variable to check if the node is subdivided.\n\t *\n\t * To avoid bad visibility changes on node load.\n\t */\n\tpublic subdivided: boolean = false;\n\n\t/**\n\t * Flag to indicate if the map node was disposed.\n\t * \n\t * When a map node is disposed its resources are dealocated to save memory.\n\t */\n\tpublic disposed: boolean = false;\n\n\t/**\n\t * Indicates how many children nodes are loaded.\n\t * \n\t * The child on become visible once all of them are loaded.\n\t */\n\tpublic nodesLoaded: number = 0;\n\n\t/**\n\t * Cache with the children objects created from subdivision.\n\t *\n\t * Used to avoid recreate object after simplification and subdivision.\n\t *\n\t * The default value is null. Only used if \"cacheTiles\" is set to true.\n\t */\n\tpublic childrenCache: Object3D[] = null;\n\n\t/**\n\t * Base geometry is attached to the map viewer object.\n\t *\n\t * It should have the full size of the world so that operations over the MapView bounding box/sphere work correctly.\n\t */\n\tpublic static baseGeometry: BufferGeometry = null;\n\n\t/**\n\t * Base scale applied to the map viewer object.\n\t */\n\tpublic static baseScale: Vector3 = null;\n \n\t/**\n\t * How many children each branch of the tree has.\n\t *\n\t * For a quad-tree this value is 4.\n\t */\n\tpublic static childrens: number = 4;\n\n\t/**\n\t * Flag to check if the node is a mesh by the renderer.\n\t *\n\t * Used to toggle the visibility of the node. The renderer skips the node rendering if this is set false.\n\t */\n\t// @ts-ignore\n\tpublic isMesh: true = true;\n\n\tpublic constructor(parentNode: MapNode = null, mapView: MapView = null, location: number = QuadTreePosition.root, level: number = 0, x: number = 0, y: number = 0, geometry: BufferGeometry = null, material: Material = null) \n\t{\n\t\tsuper(geometry, material);\n\n\t\tthis.mapView = mapView;\n\t\tthis.parentNode = parentNode;\n\t\tthis.disposed = false;\n\n\t\tthis.location = location;\n\t\tthis.level = level;\n\t\tthis.x = x;\n\t\tthis.y = y;\n\n\t\tthis.initialize();\n\t}\n\n\t/**\n\t * Initialize resources that require access to data from the MapView.\n\t *\n\t * Called automatically by the constructor for child nodes and MapView when a root node is attached to it.\n\t */\n\tpublic async initialize(): Promise {}\n\t\n\t/**\n\t * Create the child nodes to represent the next tree level.\n\t *\n\t * These nodes should be added to the object, and their transformations matrix should be updated.\n\t */\n\tpublic createChildNodes(): void {}\n\n\t/**\n\t * Subdivide node,check the maximum depth allowed for the tile provider.\n\t *\n\t * Uses the createChildNodes() method to actually create the child nodes that represent the next tree level.\n\t */\n\tpublic subdivide(): void\n\t{\n\t\tconst maxZoom = this.mapView.maxZoom();\n\t\tif (this.children.length > 0 || this.level + 1 > maxZoom || this.parentNode !== null && this.parentNode.nodesLoaded < MapNode.childrens)\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.mapView.cacheTiles && this.childrenCache !== null) \n\t\t{\n\t\t\t// @ts-ignore\n\t\t\tthis.isMesh = false;\n\t\t\tthis.children = this.childrenCache;\n\t\t\tthis.nodesLoaded = this.childrenCache.length;\n\t\t}\n\t\telse \n\t\t{\n\t\t\tthis.createChildNodes();\n\t\t}\n\n\t\tthis.subdivided = true;\n\t}\n\n\t/**\n\t * Simplify node, remove all children from node, store them in cache.\n\t *\n\t * Reset the subdivided flag and restore the visibility.\n\t *\n\t * This base method assumes that the node implementation is based off Mesh and that the isMesh property is used to toggle visibility.\n\t */\n\tpublic simplify(): void\n\t{\n\t\tconst minZoom = this.mapView.minZoom();\n\t\tif (this.level - 1 < minZoom)\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.mapView.cacheTiles) \n\t\t{\n\t\t\t// Store current children in cache.\n\t\t\tthis.childrenCache = this.children;\n\t\t}\n\t\telse\n\t\t{\n\t\t\t// Dispose resources in use\n\t\t\tfor (let i = 0; i < this.children.length; i++) \n\t\t\t{\n\t\t\t\t(this.children[i] as MapNode).dispose();\n\t\t\t}\n\t\t}\n\t\t\n\t\t// Clear children and reset flags\n\t\tthis.subdivided = false;\n\t\tthis.isMesh = true;\n\t\tthis.children = [];\n\t\tthis.nodesLoaded = 0;\n\t}\n\n\t/**\n\t * Load tile texture from the server.\n\t *\n\t * This base method assumes the existence of a material attribute with a map texture.\n\t */\n\tpublic async loadData(): Promise\n\t{\n\t\tif (this.level < this.mapView.provider.minZoom || this.level > this.mapView.provider.maxZoom)\n\t\t{\n\t\t\tconsole.warn('Geo-Three: Loading tile outside of provider range.', this);\n\n\t\t\t// @ts-ignore\n\t\t\tthis.material.map = MapNode.defaultTexture;\n\t\t\t// @ts-ignore\n\t\t\tthis.material.needsUpdate = true;\n\t\t\treturn;\n\t\t}\n\n\t\ttry \n\t\t{\n\t\t\tconst image: HTMLImageElement = await this.mapView.provider.fetchTile(this.level, this.x, this.y);\n\t\t\n\t\t\tif (this.disposed) \n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t\n\t\t\tconst texture = new Texture(image);\n\t\t\ttexture.generateMipmaps = false;\n\t\t\ttexture.format = RGBAFormat;\n\t\t\ttexture.magFilter = LinearFilter;\n\t\t\ttexture.minFilter = LinearFilter;\n\t\t\ttexture.needsUpdate = true;\n\t\t\t\n\t\t\t// @ts-ignore\n\t\t\tthis.material.map = texture;\n\t\t}\n\t\tcatch (e) \n\t\t{\n\t\t\tif (this.disposed) \n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t\n\t\t\tconsole.warn('Geo-Three: Failed to load node tile data.', this);\n\n\t\t\t// @ts-ignore\n\t\t\tthis.material.map = MapNode.defaultTexture;\n\t\t}\n\n\t\t// @ts-ignore\n\t\tthis.material.needsUpdate = true;\n\t}\n\n\t/**\n\t * Increment the child loaded counter.\n\t *\n\t * Should be called after a map node is ready for display.\n\t */\n\tpublic nodeReady(): void\n\t{\n\t\tif (this.disposed) \n\t\t{\n\t\t\tconsole.warn('Geo-Three: nodeReady() called for disposed node.', this);\n\t\t\tthis.dispose();\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.parentNode !== null) \n\t\t{\n\t\t\tthis.parentNode.nodesLoaded++;\n\n\t\t\tif (this.parentNode.nodesLoaded === MapNode.childrens) \n\t\t\t{\n\t\t\t\tif (this.parentNode.subdivided === true) \n\t\t\t\t{\n\t\t\t\t\t// @ts-ignore\n\t\t\t\t\tthis.parentNode.isMesh = false;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tfor (let i = 0; i < this.parentNode.children.length; i++) \n\t\t\t\t{\n\t\t\t\t\tthis.parentNode.children[i].visible = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.parentNode.nodesLoaded > MapNode.childrens) \n\t\t\t{\n\t\t\t\tconsole.error('Geo-Three: Loaded more children objects than expected.', this.parentNode.nodesLoaded, this);\n\t\t\t}\n\t\t}\n\t\t// If its the root object just set visible\n\t\telse\n\t\t{\n\t\t\tthis.visible = true;\n\t\t}\n\t}\n\n\t/**\n\t * Dispose the map node and its resources.\n\t * \n\t * Should cancel all pending processing for the node.\n\t */\n\tpublic dispose(): void \n\t{\n\t\tthis.disposed = true;\n\n\t\tconst self = this as Mesh;\n\n\t\ttry \n\t\t{\n\t\t\tconst material = self.material as Material;\n\t\t\tmaterial.dispose();\n\t\t}\n\t\tcatch (e) {}\n\t\t\n\t\ttry \n\t\t{\n\t\t\tself.geometry.dispose();\n\t\t}\n\t\tcatch (e) {}\t\n\t}\n}\n","import {BufferGeometry, Intersection, MeshBasicMaterial, Raycaster, Vector3} from 'three';\nimport {MapNode, QuadTreePosition} from './MapNode';\nimport {MapNodeGeometry} from '../geometries/MapNodeGeometry';\nimport {UnitsUtils} from '../utils/UnitsUtils';\n/**\n * Represents a basic plane tile node.\n */\nexport class MapPlaneNode extends MapNode \n{\n\tpublic constructor(parentNode = null, mapView = null, location = QuadTreePosition.root, level = 0, x = 0, y = 0) \n\t{\n\t\tsuper(parentNode, mapView, location, level, x, y, MapPlaneNode.geometry, new MeshBasicMaterial({wireframe: false}));\n\n\t\tthis.matrixAutoUpdate = false;\n\t\tthis.isMesh = true;\n\t\tthis.visible = false;\n\t}\n\n\t/**\n\t * Map node plane geometry.\n\t */\n\tpublic static geometry: BufferGeometry = new MapNodeGeometry(1, 1, 1, 1, false);\n\n\tpublic static override baseGeometry: BufferGeometry = MapPlaneNode.geometry;\n\n\tpublic static override baseScale: Vector3 = new Vector3(UnitsUtils.EARTH_PERIMETER, 1.0, UnitsUtils.EARTH_PERIMETER);\n\n\tpublic override async initialize(): Promise\n\t{\n\t\tsuper.initialize();\n\t\t\n\t\tawait this.loadData();\n\t\t\n\t\tthis.nodeReady();\n\t}\n\n\tpublic override createChildNodes(): void\n\t{\n\t\tconst level = this.level + 1;\n\t\tconst x = this.x * 2;\n\t\tconst y = this.y * 2;\n\n\t\tconst Constructor = Object.getPrototypeOf(this).constructor;\n\t\t\n\t\tlet node = new Constructor(this, this.mapView, QuadTreePosition.topLeft, level, x, y);\n\t\tnode.scale.set(0.5, 1.0, 0.5);\n\t\tnode.position.set(-0.25, 0, -0.25);\n\t\tthis.add(node);\n\t\tnode.updateMatrix();\n\t\tnode.updateMatrixWorld(true);\n\n\t\tnode = new Constructor(this, this.mapView, QuadTreePosition.topRight, level, x + 1, y);\n\t\tnode.scale.set(0.5, 1.0, 0.5);\n\t\tnode.position.set(0.25, 0, -0.25);\n\t\tthis.add(node);\n\t\tnode.updateMatrix();\n\t\tnode.updateMatrixWorld(true);\n\n\t\tnode = new Constructor(this, this.mapView, QuadTreePosition.bottomLeft, level, x, y + 1);\n\t\tnode.scale.set(0.5, 1.0, 0.5);\n\t\tnode.position.set(-0.25, 0, 0.25);\n\t\tthis.add(node);\n\t\tnode.updateMatrix();\n\t\tnode.updateMatrixWorld(true);\n\n\t\tnode = new Constructor(this, this.mapView, QuadTreePosition.bottomRight, level, x + 1, y + 1);\n\t\tnode.scale.set(0.5, 1.0, 0.5);\n\t\tnode.position.set(0.25, 0, 0.25);\n\t\tthis.add(node);\n\t\tnode.updateMatrix();\n\t\tnode.updateMatrixWorld(true);\n\t}\n\n\t/**\n\t * Overrides normal raycasting, to avoid raycasting when isMesh is set to false.\n\t */\n\tpublic override raycast(raycaster: Raycaster, intersects: Intersection[]): void\n\t{\n\t\tif (this.isMesh === true) \n\t\t{\n\t\t\tsuper.raycast(raycaster, intersects);\n\t\t}\n\t}\n}\n","import {Matrix4, BufferGeometry, MeshBasicMaterial, Quaternion, Vector3, Raycaster, Intersection} from 'three';\nimport {MapNode, QuadTreePosition} from './MapNode';\nimport {MapSphereNodeGeometry} from '../geometries/MapSphereNodeGeometry';\nimport {UnitsUtils} from '../utils/UnitsUtils';\n\n/** \n * Represents a map tile node.\n * \n * A map node can be subdivided into other nodes (Quadtree).\n */\nexport class MapSphereNode extends MapNode \n{\t\n\t/**\n\t * Base geometry contains the entire globe.\n\t * \n\t * Individual geometries generated for the sphere nodes are not based on this base geometry.\n\t * \n\t * Applied to the map view on initialization.\n\t */\n\tpublic static override baseGeometry: BufferGeometry = new MapSphereNodeGeometry(UnitsUtils.EARTH_RADIUS, 64, 64, 0, 2 * Math.PI, 0, Math.PI);\n\n\t/**\n\t * Base scale of the node.\n\t * \n\t * Applied to the map view on initialization.\n\t */\n\tpublic static override baseScale: Vector3 = new Vector3(1, 1, 1);\n\n\t/**\n\t * Number of segments per node geometry.\n\t * \n\t * Can be configured globally and is applied to all nodes.\n\t */\n\tpublic static segments: number = 80;\n\n\tpublic constructor(parentNode = null, mapView = null, location = QuadTreePosition.root, level = 0, x = 0, y = 0) \n\t{\n\t\tsuper(parentNode, mapView, location, level, x, y, MapSphereNode.createGeometry(level, x, y), new MeshBasicMaterial({wireframe: false}));\n\t\n\t\tthis.applyScaleNode();\n\t\n\t\tthis.matrixAutoUpdate = false;\n\t\tthis.isMesh = true;\n\t\tthis.visible = false;\n\t}\n\t\n\tpublic override async initialize(): Promise\n\t{\n\t\tsuper.initialize();\n\t\t\n\t\tawait this.loadData();\n\t\t\n\t\tthis.nodeReady();\n\t}\n\n\t/**\n\t * Create a geometry for a sphere map node.\n\t *\n\t * @param zoom - Zoom level to generate the geometry for.\n\t * @param x - X tile position.\n\t * @param y - Y tile position.\n\t */\n\tpublic static createGeometry(zoom: number, x: number, y: number): MapSphereNodeGeometry\n\t{\n\t\tconst range = Math.pow(2, zoom);\n\t\tconst max = 40;\n\t\tconst segments = Math.floor(MapSphereNode.segments * (max / (zoom + 1)) / max);\n\t\n\t\t// X\n\t\tconst phiLength = 1 / range * 2 * Math.PI;\n\t\tconst phiStart = x * phiLength;\n\t\n\t\t// Y\n\t\tconst thetaLength = 1 / range * Math.PI;\n\t\tconst thetaStart = y * thetaLength;\n\t\n\t\treturn new MapSphereNodeGeometry(1, segments, segments, phiStart, phiLength, thetaStart, thetaLength);\n\t}\n\t\n\t/** \n\t * Apply scale and offset position to the sphere node geometry.\n\t */\n\tpublic applyScaleNode(): void\n\t{\n\t\tthis.geometry.computeBoundingBox();\n\t\n\t\tconst box = this.geometry.boundingBox.clone();\n\t\tconst center = box.getCenter(new Vector3());\n\t\n\t\tconst matrix = new Matrix4();\n\t\tmatrix.compose(new Vector3(-center.x, -center.y, -center.z), new Quaternion(), new Vector3(UnitsUtils.EARTH_RADIUS, UnitsUtils.EARTH_RADIUS, UnitsUtils.EARTH_RADIUS));\n\t\tthis.geometry.applyMatrix4(matrix);\n\t\n\t\tthis.position.copy(center);\n\t\n\t\tthis.updateMatrix();\n\t\tthis.updateMatrixWorld();\n\t}\n\t\n\tpublic override updateMatrix(): void\n\t{\n\t\tthis.matrix.setPosition(this.position);\n\t\tthis.matrixWorldNeedsUpdate = true;\n\t}\n\t\n\tpublic override updateMatrixWorld(force: boolean = false): void\n\t{\n\t\tif (this.matrixWorldNeedsUpdate || force) \n\t\t{\n\t\t\tthis.matrixWorld.copy(this.matrix);\n\t\t\tthis.matrixWorldNeedsUpdate = false;\n\t\t}\n\t}\n\t\n\tpublic override createChildNodes(): void\n\t{\n\t\tconst level = this.level + 1;\n\t\tconst x = this.x * 2;\n\t\tconst y = this.y * 2;\n\n\t\tconst Constructor = Object.getPrototypeOf(this).constructor;\n\n\t\tlet node = new Constructor(this, this.mapView, QuadTreePosition.topLeft, level, x, y);\n\t\tthis.add(node);\n\n\t\tnode = new Constructor(this, this.mapView, QuadTreePosition.topRight, level, x + 1, y);\n\t\tthis.add(node);\n\n\t\tnode = new Constructor(this, this.mapView, QuadTreePosition.bottomLeft, level, x, y + 1);\n\t\tthis.add(node);\n\n\t\tnode = new Constructor(this, this.mapView, QuadTreePosition.bottomRight, level, x + 1, y + 1);\n\t\tthis.add(node);\n\t}\n\t\n\t/**\n\t * Overrides normal raycasting, to avoid raycasting when isMesh is set to false.\n\t */\n\tpublic override raycast(raycaster: Raycaster, intersects: Intersection[]): void\n\t{\n\t\tif (this.isMesh === true) \n\t\t{\n\t\t\tsuper.raycast(raycaster, intersects);\n\t\t}\n\t}\n}\n","\n/**\n * Martini mesh tile generator (Mapbox's Awesome Right-Triangulated Irregular Networks, Improved).\n * \n * Represents a height map tile node using the RTIN method from the paper \"Right Triangulated Irregular Networks\".\n * \n * Based off the library https://github.com/mapbox/martini.\n */\nexport class Martini \n{\n\t/**\n\t * Size of the grid to be generated.\n\t */\n\tpublic gridSize: number;\n\n\t/**\n\t * Number of triangles to be used in the tile.\n\t */\n\tpublic numTriangles: number;\n\n\t/**\n\t * Number of triangles in the parent node.\n\t */\n\tpublic numParentTriangles: number;\n\n\t/**\n\t * Indices of the triangles faces.\n\t */\n\tpublic indices: Uint32Array;\n\n\t/**\n\t * Coordinates of the points composing the mesh.\n\t */\n\tpublic coords: Uint16Array;\n\n\t/**\n\t * Constructor for the generator.\n\t * \n\t * @param gridSize - Size of the grid.\n\t */\n\tpublic constructor(gridSize: number = 257) \n\t{\n\t\tthis.gridSize = gridSize;\n\t\tconst tileSize = gridSize - 1;\n\t\t\n\t\tif (tileSize & tileSize - 1) \n\t\t{\n\t\t\tthrow new Error(`Expected grid size to be 2^n+1, got ${gridSize}.`);\n\t\t}\n\n\t\tthis.numTriangles = tileSize * tileSize * 2 - 2;\n\t\tthis.numParentTriangles = this.numTriangles - tileSize * tileSize;\n\n\t\tthis.indices = new Uint32Array(this.gridSize * this.gridSize);\n\n\t\t// coordinates for all possible triangles in an RTIN tile\n\t\tthis.coords = new Uint16Array(this.numTriangles * 4);\n\n\t\t// get triangle coordinates from its index in an implicit binary tree\n\t\tfor (let i = 0; i < this.numTriangles; i++) \n\t\t{\n\t\t\tlet id = i + 2;\n\t\t\tlet ax = 0, ay = 0, bx = 0, by = 0, cx = 0, cy = 0;\n\t\t\tif (id & 1) \n\t\t\t{\n\t\t\t\tbx = by = cx = tileSize; // bottom-left triangle\n\t\t\t}\n\t\t\telse \n\t\t\t{\n\t\t\t\tax = ay = cy = tileSize; // top-right triangle\n\t\t\t}\n\t\t\twhile ((id >>= 1) > 1) \n\t\t\t{\n\t\t\t\tconst mx = ax + bx >> 1;\n\t\t\t\tconst my = ay + by >> 1;\n\n\t\t\t\tif (id & 1) \n\t\t\t\t{ // left half\n\t\t\t\t\tbx = ax; by = ay;\n\t\t\t\t\tax = cx; ay = cy;\n\t\t\t\t}\n\t\t\t\telse \n\t\t\t\t{ // right half\n\t\t\t\t\tax = bx; ay = by;\n\t\t\t\t\tbx = cx; by = cy;\n\t\t\t\t}\n\t\t\t\tcx = mx; cy = my;\n\t\t\t}\n\t\t\tconst k = i * 4;\n\t\t\tthis.coords[k + 0] = ax;\n\t\t\tthis.coords[k + 1] = ay;\n\t\t\tthis.coords[k + 2] = bx;\n\t\t\tthis.coords[k + 3] = by;\n\t\t}\n\t}\n\n\tpublic createTile(terrain): Tile\n\t{\n\t\treturn new Tile(terrain, this);\n\t}\n}\n\n/**\n * Class describes the generation of a tile using the Martini method.\n */\nclass Tile \n{\n\t/**\n\t * Pointer to the martini generator object.\n\t */\n\tpublic martini: Martini;\n\n\t/**\n\t * Terrain to generate the tile for.\n\t */\n\tpublic terrain: Float32Array;\n\n\t/**\n\t * Errors detected while creating the tile.\n\t */\n\tpublic errors: Float32Array;\n\n\tpublic constructor(terrain: Float32Array, martini: Martini) \n\t{\n\t\tconst size = martini.gridSize;\n\n\t\tif (terrain.length !== size * size) \n\t\t{\n\t\t\tthrow new Error(`Expected terrain data of length ${size * size} (${size} x ${size}), got ${terrain.length}.`);\n\t\t}\n\n\t\tthis.terrain = terrain;\n\t\tthis.martini = martini;\n\t\tthis.errors = new Float32Array(terrain.length);\n\t\tthis.update();\n\t}\n\n\tpublic update(): void\n\t{\n\t\tconst {numTriangles, numParentTriangles, coords, gridSize: size} = this.martini;\n\t\tconst {terrain, errors} = this;\n\n\t\t// iterate over all possible triangles, starting from the smallest level\n\t\tfor (let i = numTriangles - 1; i >= 0; i--) \n\t\t{\n\t\t\tconst k = i * 4;\n\t\t\tconst ax = coords[k + 0];\n\t\t\tconst ay = coords[k + 1];\n\t\t\tconst bx = coords[k + 2];\n\t\t\tconst by = coords[k + 3];\n\t\t\tconst mx = ax + bx >> 1;\n\t\t\tconst my = ay + by >> 1;\n\t\t\tconst cx = mx + my - ay;\n\t\t\tconst cy = my + ax - mx;\n\n\t\t\t// calculate error in the middle of the long edge of the triangle\n\t\t\tconst interpolatedHeight = (terrain[ay * size + ax] + terrain[by * size + bx]) / 2;\n\t\t\tconst middleIndex = my * size + mx;\n\t\t\tconst middleError = Math.abs(interpolatedHeight - terrain[middleIndex]);\n\n\t\t\terrors[middleIndex] = Math.max(errors[middleIndex], middleError);\n\n\t\t\tif (i < numParentTriangles) \n\t\t\t{ // bigger triangles; accumulate error with children\n\t\t\t\tconst leftChildIndex = (ay + cy >> 1) * size + (ax + cx >> 1);\n\t\t\t\tconst rightChildIndex = (by + cy >> 1) * size + (bx + cx >> 1);\n\t\t\t\terrors[middleIndex] = Math.max(errors[middleIndex], errors[leftChildIndex], errors[rightChildIndex]);\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic getMesh(maxError: number = 0, withSkirts: boolean = false): {vertices: any, triangles: any, numVerticesWithoutSkirts: number} \n\t{\n\t\tconst {gridSize: size, indices} = this.martini;\n\t\tconst {errors} = this;\n\t\tlet numVertices = 0;\n\t\tlet numTriangles = 0;\n\t\tconst max = size - 1;\n\t\tlet aIndex, bIndex, cIndex = 0;\n\n\t\t// Skirt indices\n\t\tconst leftSkirtIndices = [];\n\t\tconst rightSkirtIndices = [];\n\t\tconst bottomSkirtIndices = [];\n\t\tconst topSkirtIndices = [];\n\n\t\t// Use an index grid to keep track of vertices that were already used to avoid duplication\n\t\tindices.fill(0);\n\n\t\t// Retrieve mesh in two stages that both traverse the error map:\n\t\t// - countElements: find used vertices (and assign each an index), and count triangles (for minimum allocation)\n\t\t// - processTriangle: fill the allocated vertices & triangles typed arrays\n\t\tfunction countElements(ax: number, ay: number, bx: number, by: number, cx: number, cy: number): void\n\t\t{\n\t\t\tconst mx = ax + bx >> 1;\n\t\t\tconst my = ay + by >> 1;\n\n\t\t\tif (Math.abs(ax - cx) + Math.abs(ay - cy) > 1 && errors[my * size + mx] > maxError) \n\t\t\t{\n\t\t\t\tcountElements(cx, cy, ax, ay, mx, my);\n\t\t\t\tcountElements(bx, by, cx, cy, mx, my);\n\t\t\t}\n\t\t\telse \n\t\t\t{\n\t\t\t\taIndex = ay * size + ax;\n\t\t\t\tbIndex = by * size + bx;\n\t\t\t\tcIndex = cy * size + cx;\n\n\t\t\t\tif (indices[aIndex] === 0) \n\t\t\t\t{\n\t\t\t\t\tif (withSkirts) \n\t\t\t\t\t{\n\t\t\t\t\t\tif (ax === 0) \n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tleftSkirtIndices.push(numVertices);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (ax === max)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\trightSkirtIndices.push(numVertices);\n\t\t\t\t\t\t} if (ay === 0) \n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tbottomSkirtIndices.push(numVertices);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (ay === max) \n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttopSkirtIndices.push(numVertices);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n \n\t\t\t\t\tindices[aIndex] = ++numVertices;\n\t\t\t\t}\n\t\t\t\tif (indices[bIndex] === 0) \n\t\t\t\t{\n\t\t\t\t\tif (withSkirts) \n\t\t\t\t\t{\n\t\t\t\t\t\tif (bx === 0) \n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tleftSkirtIndices.push(numVertices);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (bx === max) \n\t\t\t\t\t\t{\n\t\t\t\t\t\t\trightSkirtIndices.push(numVertices);\n\t\t\t\t\t\t} if (by === 0) \n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tbottomSkirtIndices.push(numVertices);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (by === max) \n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttopSkirtIndices.push(numVertices);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tindices[bIndex] = ++numVertices;\n\t\t\t\t}\n\t\t\t\tif (indices[cIndex] === 0) \n\t\t\t\t{\n\t\t\t\t\tif (withSkirts) \n\t\t\t\t\t{\n\t\t\t\t\t\tif (cx === 0) \n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tleftSkirtIndices.push(numVertices);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (cx === max) \n\t\t\t\t\t\t{\n\t\t\t\t\t\t\trightSkirtIndices.push(numVertices);\n\t\t\t\t\t\t} if (cy === 0) \n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tbottomSkirtIndices.push(numVertices);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (cy === max) \n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttopSkirtIndices.push(numVertices);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tindices[cIndex] = ++numVertices;\n\t\t\t\t}\n\t\t\t\tnumTriangles++;\n\t\t\t}\n\t\t}\n\n\t\tcountElements(0, 0, max, max, max, 0);\n\t\tcountElements(max, max, 0, 0, 0, max);\n\n\t\tlet numTotalVertices =numVertices * 2;\n\t\tlet numTotalTriangles = numTriangles * 3;\n\n\t\tif (withSkirts) \n\t\t{\n\t\t\tnumTotalVertices +=(leftSkirtIndices.length + rightSkirtIndices.length + bottomSkirtIndices.length + topSkirtIndices.length) * 2;\n\t\t\tnumTotalTriangles += ((leftSkirtIndices.length - 1) * 2 + (rightSkirtIndices.length - 1) * 2 + (bottomSkirtIndices.length - 1) * 2 + (topSkirtIndices.length - 1) * 2) * 3;\n\t\t}\n\n\t\tconst vertices = new Uint16Array(numTotalVertices);\n\t\tconst triangles = new Uint32Array(numTotalTriangles);\n\n\t\tlet triIndex = 0;\n\n\t\tfunction processTriangle(ax: number, ay: number, bx: number, by: number, cx: number, cy: number): void\n\t\t{\n\t\t\tconst mx = ax + bx >> 1;\n\t\t\tconst my = ay + by >> 1;\n\n\t\t\tif (Math.abs(ax - cx) + Math.abs(ay - cy) > 1 && errors[my * size + mx] > maxError) \n\t\t\t{\n\t\t\t\t// Triangle doesn't approximate the surface well enough; drill down further\n\t\t\t\tprocessTriangle(cx, cy, ax, ay, mx, my);\n\t\t\t\tprocessTriangle(bx, by, cx, cy, mx, my);\n\n\t\t\t}\n\t\t\telse \n\t\t\t{\n\t\t\t\t// Add a triangle\n\t\t\t\tconst a = indices[ay * size + ax] - 1;\n\t\t\t\tconst b = indices[by * size + bx] - 1;\n\t\t\t\tconst c = indices[cy * size + cx] - 1;\n\n\t\t\t\tvertices[2 * a] = ax;\n\t\t\t\tvertices[2 * a + 1] = ay;\n\n\t\t\t\tvertices[2 * b] = bx;\n\t\t\t\tvertices[2 * b + 1] = by;\n\n\t\t\t\tvertices[2 * c] = cx;\n\t\t\t\tvertices[2 * c + 1] = cy;\n\t\t\t\ttriangles[triIndex++] = a;\n\t\t\t\ttriangles[triIndex++] = b;\n\t\t\t\ttriangles[triIndex++] = c;\n\t\t\t}\n\t\t}\n\n\t\tprocessTriangle(0, 0, max, max, max, 0);\n\t\tprocessTriangle(max, max, 0, 0, 0, max);\n\n\t\tif (withSkirts) \n\t\t{\n\t\t\t// Sort skirt indices to create adjacent triangles\n\t\t\tleftSkirtIndices.sort((a, b) => {return vertices[2 * a + 1] - vertices[2 * b + 1];});\n\n\t\t\t// Reverse (b - a) to match triangle winding\n\t\t\trightSkirtIndices.sort((a, b) => {return vertices[2 * b + 1] - vertices[2 * a + 1];});\n\n\t\t\tbottomSkirtIndices.sort((a, b) => {return vertices[2 * b] - vertices[2 * a];});\n\n\t\t\t// Reverse (b - a) to match triangle winding\n\t\t\ttopSkirtIndices.sort((a, b) => {return vertices[2 * a] - vertices[2 * b];});\n\n\t\t\tlet skirtIndex = numVertices * 2;\n\n\t\t\t// Add skirt vertices from index of last mesh vertex\n\t\t\tfunction constructSkirt(skirt: number[]): void\n\t\t\t{\n\t\t\t\tconst skirtLength = skirt.length;\n\n\t\t\t\t// Loop through indices in groups of two to generate triangles\n\t\t\t\tfor (let i = 0; i < skirtLength - 1; i++) \n\t\t\t\t{\n\t\t\t\t\tconst currIndex = skirt[i];\n\t\t\t\t\tconst nextIndex = skirt[i + 1];\n\t\t\t\t\tconst currentSkirt = skirtIndex / 2;\n\t\t\t\t\tconst nextSkirt = (skirtIndex + 2) / 2;\n\n\t\t\t\t\tvertices[skirtIndex++] = vertices[2 * currIndex];\n\t\t\t\t\tvertices[skirtIndex++] = vertices[2 * currIndex + 1];\n\n\t\t\t\t\ttriangles[triIndex++] = currIndex;\n\t\t\t\t\ttriangles[triIndex++] = currentSkirt;\n\t\t\t\t\ttriangles[triIndex++] = nextIndex;\n\n\t\t\t\t\ttriangles[triIndex++] = currentSkirt;\n\t\t\t\t\ttriangles[triIndex++] = nextSkirt;\n\t\t\t\t\ttriangles[triIndex++] = nextIndex;\n\t\t\t\t}\n\n\t\t\t\t// Add vertices of last skirt not added above (i < skirtLength - 1)\n\t\t\t\tvertices[skirtIndex++] = vertices[2 * skirt[skirtLength - 1]];\n\t\t\t\tvertices[skirtIndex++] = vertices[2 * skirt[skirtLength - 1] + 1];\n\t\t\t}\n\n\t\t\tconstructSkirt(leftSkirtIndices);\n\t\t\tconstructSkirt(rightSkirtIndices);\n\t\t\tconstructSkirt(bottomSkirtIndices);\n\t\t\tconstructSkirt(topSkirtIndices);\n\t\t}\n\n\t\t// Return vertices and triangles and index into vertices array where skirts start\n\t\treturn {vertices: vertices, triangles: triangles, numVerticesWithoutSkirts: numVertices};\n\t}\n}\n","import {MapProvider} from './MapProvider';\nimport {XHRUtils} from '../utils/XHRUtils';\nimport {MapBoxProvider} from './MapBoxProvider';\n\n/**\n * Bing maps tile provider.\n *\n * API Reference\n * - https://msdn.microsoft.com/en-us/library/bb259689.aspx (Bing Maps Tile System)\n * - https://msdn.microsoft.com/en-us/library/mt823633.aspx (Directly accessing the Bing Maps tiles)\n * - https://www.bingmapsportal.com/\n */\nexport class BingMapsProvider extends MapProvider \n{\n\t/**\n\t * Base address of the bing map provider.\n\t */\n\tpublic static ADDRESS: string = 'https://dev.virtualearth.net';\n\n\t/**\n\t * Maximum zoom level allowed by the provider.\n\t */\n\tpublic override maxZoom: number = 19;\n\n\t/**\n\t * Minimum zoom level allowed by the provider.\n\t */\n\tpublic override minZoom: number = 1;\n\n\t/**\n\t * Server API access token.\n\t */\n\tpublic apiKey: string;\n\n\t/**\n\t * The type of the map used.\n\t */\n\tpublic type: string;\n\n\t/**\n\t * Map image tile format, the formats available are:\n\t * - gif: Use GIF image format.\n\t * - jpeg: Use JPEG image format. JPEG format is the default for Road, Aerial and AerialWithLabels imagery.\n\t * - png: Use PNG image format. PNG is the default format for OrdnanceSurvey imagery.\n\t */\n\tpublic format: string = 'jpeg';\n\n\t/**\n\t * Size of the map tiles.\n\t */\n\tpublic mapSize: number = 512;\n\n\t/**\n\t * Tile server subdomain.\n\t */\n\tpublic subdomain: string = 't1';\n\n\t/**\n\t * Metadata of the provider.\n\t */\n\tpublic meta: any = null;\n\n\t/**\n\t * @param apiKey - Bing API key.\n\t * @param type - Type provider.\n\t */\n\tpublic constructor(apiKey: string = '', type: string = BingMapsProvider.AERIAL) \n\t{\n\t\tsuper();\n\n\t\tthis.apiKey = apiKey;\n\t\tthis.type = type;\n\t}\n\n\t/**\n\t * Display an aerial view of the map.\n\t */\n\tpublic static AERIAL: string = 'a';\n\n\t/**\n\t * Display a road view of the map.\n\t */\n\tpublic static ROAD: string = 'r';\n\n\t/**\n\t * Display an aerial view of the map with labels.\n\t */\n\tpublic static AERIAL_LABELS: string = 'h';\n\n\t/**\n\t * Use this value to display a bird's eye (oblique) view of the map.\n\t */\n\tpublic static OBLIQUE: string = 'o';\n\n\t/**\n\t * Display a bird's eye (oblique) with labels view of the map.\n\t */\n\tpublic static OBLIQUE_LABELS: string = 'b';\n\n\t/**\n\t * Get the base URL for the map configuration requested.\n\t *\n\t * Uses the follwing format\n\t * \n\t * http://ecn.\\{subdomain\\}.tiles.virtualearth.net/tiles/r\\{quadkey\\}.jpeg?g=129&mkt=\\{culture\\}&shading=hill&stl=H\n\t */\n\tpublic override async getMetaData(): Promise \n\t{\n\t\tconst address = BingMapsProvider.ADDRESS + '/REST/V1/Imagery/Metadata/RoadOnDemand?output=json&include=ImageryProviders&key=' + this.apiKey;\n\t\tconst data = await XHRUtils.get(address);\n\n\t\tthis.meta = JSON.parse(data);\n\t}\n\n\t/**\n\t * Convert x, y, zoom quadtree to a bing maps specific quadkey.\n\t *\n\t * Adapted from original C# code at https://msdn.microsoft.com/en-us/library/bb259689.aspx.\n\t */\n\tpublic static quadKey(zoom: number, x: number, y: number): string\n\t{\n\t\tlet quad = '';\n\n\t\tfor (let i = zoom; i > 0; i--) \n\t\t{\n\t\t\tconst mask = 1 << i - 1;\n\t\t\tlet cell = 0;\n\n\t\t\tif ((x & mask) !== 0) \n\t\t\t{\n\t\t\t\tcell++;\n\t\t\t}\n\n\t\t\tif ((y & mask) !== 0) \n\t\t\t{\n\t\t\t\tcell += 2;\n\t\t\t}\n\n\t\t\tquad += cell;\n\t\t}\n\n\t\treturn quad;\n\t}\n\n\tpublic override fetchTile(zoom: number, x: number, y: number): Promise\n\t{\n\t\treturn new Promise((resolve, reject) => \n\t\t{\n\t\t\tconst image = document.createElement('img');\n\t\t\timage.onload = function() \n\t\t\t{\n\t\t\t\tresolve(image);\n\t\t\t};\n\t\t\timage.onerror = function() \n\t\t\t{\n\t\t\t\treject();\n\t\t\t};\n\t\t\timage.crossOrigin = 'Anonymous';\n\t\t\timage.src = 'http://ecn.' + this.subdomain + '.tiles.virtualearth.net/tiles/' + this.type + BingMapsProvider.quadKey(zoom, x, y) + '.jpeg?g=1173';\n\t\t});\n\t}\n}\n","import {MapProvider} from './MapProvider';\nimport {Color} from 'three';\nimport {CanvasUtils} from '../utils/CanvasUtils';\n\n/**\n * Debug provider can be used to debug the levels of the map three based on the zoom level they change between green and red.\n */\nexport class DebugProvider extends MapProvider \n{\n\t/**\n\t * Resolution in px of each tile.\n\t */\n\tpublic resolution: number = 256;\n\n\tpublic override fetchTile(zoom: number, x: number, y: number): Promise\n\t{\n\t\tconst canvas = CanvasUtils.createOffscreenCanvas(this.resolution, this.resolution);\n\t\tconst context = canvas.getContext('2d') as CanvasRenderingContext2D;\n\n\t\tconst green = new Color(0x00ff00);\n\t\tconst red = new Color(0xff0000);\n\n\t\tconst color = green.lerpHSL(red, (zoom - this.minZoom) / (this.maxZoom - this.minZoom));\n\n\t\tcontext.fillStyle = color.getStyle();\n\t\tcontext.fillRect(0, 0, this.resolution, this.resolution);\n\n\t\tcontext.fillStyle = '#000000';\n\t\tcontext.textAlign = 'center';\n\t\tcontext.textBaseline = 'middle';\n\t\tcontext.font = 'bold ' + this.resolution * 0.1 + 'px arial';\n\t\tcontext.fillText('(' + zoom + ')', this.resolution / 2, this.resolution * 0.4);\n\t\tcontext.fillText('(' + x + ', ' + y + ')', this.resolution / 2, this.resolution * 0.6);\n\n\t\treturn Promise.resolve(canvas);\n\t}\n}\n","import {MapProvider} from './MapProvider';\nimport {XHRUtils} from '../utils/XHRUtils';\n\n\n/**\n * Google maps tile server.\n *\n * The tile API is only available to select partners, and is not included with the Google Maps Core ServiceList.\n *\n * API Reference\n * - https://developers.google.com/maps/documentation/javascript/coordinates\n * - https://developers.google.com/maps/documentation/tile\n */\nexport class GoogleMapsProvider extends MapProvider \n{\n\t/**\n\t * Server API access token.\n\t */\n\tpublic apiToken: string;\n\n\t/**\n\t * After the first call a session token is stored.\n\t *\n\t * The session token is required for subsequent requests for tile and viewport information.\n\t */\n\tpublic sessionToken: string = null;\n\n\t/**\n\t * The map orientation in degrees.\n\t *\n\t * Can be 0, 90, 180 or 270.\n\t */\n\tpublic orientation: number = 0;\n\n\t/**\n\t * Map image tile format, the formats available are:\n\t * - png PNG\n\t * - jpg JPG\n\t */\n\tpublic format: string = 'png';\n\n\t/**\n\t * The type of base map. This can be one of the following:\n\t * - roadmap: The standard Google Maps painted map tiles.\n\t * - satellite: Satellite imagery.\n\t * - terrain: Shaded relief maps of 3D terrain. When selecting terrain as the map type, you must also include the layerRoadmap layer type (described in the Optional fields section below).\n\t * - streetview: Street View panoramas. See the Street View guide.\n\t */\n\tpublic mapType: string = 'roadmap';\n\n\t/**\n\t * If true overlays are shown.\n\t */\n\tpublic overlay: boolean = false;\n\n\tpublic constructor(apiToken: string) \n\t{\n\t\tsuper();\n\n\t\tthis.apiToken = apiToken !== undefined ? apiToken : '';\n\n\t\tthis.createSession();\n\t}\n\n\t/**\n\t * Create a map tile session in the maps API.\n\t *\n\t * This method needs to be called before using the provider\n\t */\n\tpublic createSession(): void \n\t{\n\t\tconst address = 'https://www.googleapis.com/tile/v1/createSession?key=' + this.apiToken;\n\t\tconst data = JSON.stringify({\n\t\t\tmapType: this.mapType,\n\t\t\tlanguage: 'en-EN',\n\t\t\tregion: 'en',\n\t\t\tlayerTypes: ['layerRoadmap', 'layerStreetview'],\n\t\t\toverlay: this.overlay,\n\t\t\tscale: 'scaleFactor1x'\n\t\t});\n\n\t\tXHRUtils.request(address, 'GET', {'Content-Type': 'text/json'}, data, (response, xhr) =>\n\t\t{\n\t\t\tthis.sessionToken = response.session;\n\t\t}, function(xhr) \n\t\t{\n\t\t\tthrow new Error('Unable to create a google maps session.');\n\t\t});\n\t}\n\n\tpublic override fetchTile(zoom: number, x: number, y: number): Promise\n\t{\n\t\treturn new Promise((resolve, reject) => \n\t\t{\n\t\t\tconst image = document.createElement('img');\n\t\t\timage.onload = function() \n\t\t\t{\n\t\t\t\tresolve(image);\n\t\t\t};\n\t\t\timage.onerror = function() \n\t\t\t{\n\t\t\t\treject();\n\t\t\t};\n\t\t\timage.crossOrigin = 'Anonymous';\n\t\t\timage.src = 'https://www.googleapis.com/tile/v1/tiles/' + zoom + '/' + x + '/' + y + '?session=' + this.sessionToken + '&orientation=' + this.orientation + '&key=' + this.apiToken;\n\t\t});\n\t}\n}\n","import {MapProvider} from './MapProvider';\nimport {Color} from 'three';\nimport {CanvasUtils} from '../utils/CanvasUtils';\n\n/**\n * Height debug provider takes a RGB encoded height map from another provider and converts it to a gradient for preview.\n *\n * Usefull to preview and compare height of different providers. Can also be usefull to generate grayscale maps to be feed into other libraries (e.g. physics engine).\n */\nexport class HeightDebugProvider extends MapProvider \n{\n\t/**\n\t * The provider used to retrieve the base RGB information to be debugged.\n\t */\n\tpublic provider: MapProvider;\n\n\t/**\n\t * Initial color to be used for lower values.\n\t */\n\tpublic fromColor: Color = new Color(0xff0000);\n\n\t/**\n\t * Final color to be used for higher values.\n\t */\n\tpublic toColor: Color = new Color(0x00ff00);\n\n\tpublic constructor(provider: MapProvider) \n\t{\n\t\tsuper();\n\n\t\tthis.provider = provider;\n\t}\n\n\tpublic override async fetchTile(zoom: number, x: number, y: number): Promise\n\t{\n\t\tconst image = await this.provider.fetchTile(zoom, x, y);\n\t\tconst resolution = 256;\n\n\t\tconst canvas = CanvasUtils.createOffscreenCanvas(resolution, resolution);\n\t\tconst context = canvas.getContext('2d') as CanvasRenderingContext2D;\n\n\t\tcontext.drawImage(image, 0, 0, resolution, resolution, 0, 0, resolution, resolution);\n\n\t\tconst imageData = context.getImageData(0, 0, resolution, resolution);\n\t\tconst data = imageData.data;\n\t\tfor (let i = 0; i < data.length; i += 4) \n\t\t{\n\t\t\tconst r = data[i];\n\t\t\tconst g = data[i + 1];\n\t\t\tconst b = data[i + 2];\n\n\t\t\t// The value will be composed of the bits RGB\n\t\t\tconst value = (r * 65536 + g * 256 + b) * 0.1 - 1e4;\n\n\t\t\t// (16777216 * 0.1) - 1e4\n\t\t\tconst max = 1667721.6;\n\n\t\t\tconst color = this.fromColor.clone().lerpHSL(this.toColor, value / max);\n\n\t\t\t// Set pixel color\n\t\t\tdata[i] = color.r * 255;\n\t\t\tdata[i + 1] = color.g * 255;\n\t\t\tdata[i + 2] = color.b * 255;\n\t\t}\n\n\t\tcontext.putImageData(imageData, 0, 0);\n\n\t\treturn canvas;\n\t}\n}\n","import {MapProvider} from './MapProvider';\n\n\n/**\n * Here maps tile server provider.\n *\n * API Reference\n * - https://developer.here.com/documentation/map-tile/topics/example-satellite-map.html\n */\nexport class HereMapsProvider extends MapProvider \n{\n\t/**\n\t * Path to map tile API.\n\t *\n\t * Version of the api is fixed 2.1.\n\t */\n\tpublic static PATH = '/maptile/2.1/';\n\n\t/**\n\t * Service application access token.\n\t */\n\tpublic appId: string;\n\n\t/**\n\t * Service application code token.\n\t */\n\tpublic appCode: string;\n\n\t/**\n\t * The type of maps to be used.\n\t * - aerial\n\t * - base\n\t * - pano\n\t * - traffic\n\t *\n\t * For each type HERE maps has 4 servers:\n\t * - Aerial Tiles https://\\{1-4\\}.aerial.maps.api.here.com\n\t * - Base Map Tiles https://\\{1-4\\}.base.maps.api.here.com\n\t * - Pano Tiles https://\\{1-4\\}.pano.maps.api.here.com\n\t * - Traffic Tiles https://\\{1-4\\}.traffic.maps.api.here.com\n\t */\n\tpublic style: string;\n\n\t/**\n\t * Specifies the view scheme. A complete list of the supported schemes may be obtained by using the Info resouce.\n\t * - normal.day\n\t * - normal.night\n\t * - terrain.day\n\t * - satellite.day\n\t *\n\t * Check the scheme list at https://developer.here.com/documentation/map-tile/topics/resource-info.html\n\t *\n\t * Be aware that invalid combinations of schemes and tiles are rejected. For all satellite, hybrid and terrain schemes, you need to use the Aerial Tiles base URL instead of the normal one.\n\t */\n\tpublic scheme: string;\n\n\t/**\n\t * Map image tile format, the formats available are:\n\t * - png True color PNG\n\t * - png8 8 bit indexed PNG\n\t * - jpg JPG at 90% quality\n\t */\n\tpublic format: string;\n\n\t/**\n\t * Returned tile map image size.\n\t *\n\t * The following sizes are supported:\n\t * - 256\n\t * - 512\n\t * - 128 (deprecated, although usage is still accepted)\n\t */\n\tpublic size: number;\n\n\t/**\n\t * Specifies the map version, either newest or with a hash value.\n\t */\n\tpublic version: string;\n\n\t/**\n\t * Server to be used next.\n\t *\n\t * There are 4 server available in here maps.\n\t *\n\t * On each request this number is updated.\n\t */\n\tpublic server: number;\n\n\t/**\n\t * Here maps provider constructor.\n\t * \n\t * @param appId - HERE maps app id.\n\t * @param appCode - HERE maps app code.\n\t * @param style - Map style.\n\t * @param scheme - Map scheme.\n\t * @param format - Image format.\n\t * @param size - Tile size.\n\t */\n\tpublic constructor(appId: string = '', appCode: string = '', style: string = 'base', scheme: string = 'normal.day', format: string = 'png', size: number = 512) \n\t{\n\t\tsuper();\n\n\t\tthis.appId = appId;\n\t\tthis.appCode = appCode;\n\t\tthis.style = style;\n\t\tthis.scheme = scheme;\n\t\tthis.format = format;\n\t\tthis.size = size;\n\t\tthis.version = 'newest';\n\t\tthis.server = 1;\n\t}\n\n\t/**\n\t * Update the server counter.\n\t *\n\t * There are 4 server (1 to 4).\n\t */\n\tpublic nextServer(): void\n\t{\n\t\tthis.server = this.server % 4 === 0 ? 1 : this.server + 1;\n\t}\n\n\tpublic override async getMetaData(): Promise {}\n\n\tpublic override fetchTile(zoom: number, x: number, y: number): Promise\n\t{\n\t\tthis.nextServer();\n\n\t\treturn new Promise((resolve, reject) => \n\t\t{\n\t\t\tconst image = document.createElement('img');\n\t\t\timage.onload = function() \n\t\t\t{\n\t\t\t\tresolve(image);\n\t\t\t};\n\t\t\timage.onerror = function() \n\t\t\t{\n\t\t\t\treject();\n\t\t\t};\n\t\t\timage.crossOrigin = 'Anonymous';\n\n\t\t\timage.src = 'https://' + this.server + '.' + this.style + '.maps.api.here.com/maptile/2.1/maptile/' +\n\t\t\t\tthis.version + '/' + this.scheme + '/' + zoom + '/' + x + '/' + y + '/' +\n\t\t\t\tthis.size + '/' + this.format + '?app_id=' + this.appId + '&app_code=' + this.appCode;\n\t\t});\n\t}\n}\n","import {MapProvider} from './MapProvider';\nimport {XHRUtils} from '../utils/XHRUtils';\n\n\n/**\n * Map box service tile provider. Map tiles can be fetched from style or from a map id.\n *\n * API Reference\n * - https://www.mapbox.com/\n */\nexport class MapBoxProvider extends MapProvider \n{\n\t/**\n\t * Base adress of the mapbox service.\n\t */\n\tpublic static ADDRESS: string = 'https://api.mapbox.com/';\n\n\t/**\n\t * Access the map data using a map style.\n\t */\n\tpublic static STYLE: number = 100;\n\n\t/**\n\t * Access the map data using a map id.\n\t */\n\tpublic static MAP_ID: number = 101;\n\n\t/**\n\t * Server API access token.\n\t */\n\tpublic apiToken: string;\n\n\t/**\n\t * Map image tile format, the formats available are:\n\t * - png True color PNG\n\t * - png32 32 color indexed PNG\n\t * - png64 64 color indexed PNG\n\t * - png128 128 color indexed PNG\n\t * - png256 256 color indexed PNG\n\t * - jpg70 70% quality JPG\n\t * - jpg80 80% quality JPG\n\t * - jpg90 90% quality JPG\n\t * - pngraw Raw png (no interpolation)\n\t */\n\tpublic format: string;\n\n\t/**\n\t * Flag to indicate if should use high resolution tiles\n\t */\n\tpublic useHDPI: boolean;\n\n\t/**\n\t * Map tile access mode\n\t * - MapBoxProvider.STYLE\n\t * - MapBoxProvider.MAP_ID\n\t */\n\tpublic mode: number;\n\n\t/**\n\t * Map identifier composed of \\{username\\}.\\{style\\}\n\t *\n\t * Some examples of the public mapbox identifiers:\n\t * - mapbox.mapbox-streets-v7\n\t * - mapbox.satellite\n\t * - mapbox.mapbox-terrain-v2\n\t * - mapbox.mapbox-traffic-v1\n\t * - mapbox.terrain-rgb\n\t */\n\tpublic mapId: string;\n\n\t/**\n\t * Map style to be used composed of \\{username\\}/\\{style_id\\}\n\t *\n\t * Some example of the syles available:\n\t * - mapbox/streets-v10\n\t * - mapbox/outdoors-v10\n\t * - mapbox/light-v9\n\t * - mapbox/dark-v9\n\t * - mapbox/satellite-v9\n\t * - mapbox/satellite-streets-v10\n\t * - mapbox/navigation-preview-day-v4\n\t * - mapbox/navigation-preview-night-v4\n\t * - mapbox/navigation-guidance-day-v4\n\t * - mapbox/navigation-guidance-night-v4\n\t */\n\tpublic style: string;\n\n\t/**\n\t * Mapbox api version\n\t * - mapbox/navigation-guidance-night-v4\n\t */\n\tpublic version: string;\n\n\t/**\n\t * @param apiToken - Map box api token.\n\t * @param id - Map style or map ID if the mode is set to MAP_ID.\n\t * @param mode - Map tile access mode.\n\t * @param format - Image format.\n\t * @param useHDPI - If true uses high DPI mode.\n\t */\n\tpublic constructor(apiToken: string = '', id: string = '', mode: number = MapBoxProvider.STYLE, format: string = 'png', useHDPI: boolean = false, version: string = 'v4') \n\t{\n\t\tsuper();\n\n\t\tthis.apiToken = apiToken;\n\t\tthis.format = format;\n\t\tthis.useHDPI = useHDPI;\n\t\tthis.mode = mode;\n\t\tthis.mapId = id;\n\t\tthis.style = id;\n\t\tthis.version = version;\n\t}\n\n\tpublic override async getMetaData(): Promise\n\t{\n\t\tconst address = MapBoxProvider.ADDRESS + this.version + '/' + this.mapId + '.json?access_token=' + this.apiToken;\n\n\t\tconst data = await XHRUtils.get(address);\n\t\t\n\t\tconst meta = JSON.parse(data);\n\t\tthis.name = meta.name;\n\t\tthis.minZoom = meta.minZoom;\n\t\tthis.maxZoom = meta.maxZoom;\n\t\tthis.bounds = meta.bounds;\n\t\tthis.center = meta.center;\n\t}\n\n\tpublic override fetchTile(zoom: number, x: number, y: number): Promise\n\t{\n\t\treturn new Promise((resolve, reject) => \n\t\t{\n\t\t\tconst image = document.createElement('img');\n\t\t\timage.onload = function() \n\t\t\t{\n\t\t\t\tresolve(image);\n\t\t\t};\n\t\t\timage.onerror = function() \n\t\t\t{\n\t\t\t\treject();\n\t\t\t};\n\t\t\timage.crossOrigin = 'Anonymous';\n\n\t\t\tif (this.mode === MapBoxProvider.STYLE) \n\t\t\t{\n\t\t\t\timage.src = MapBoxProvider.ADDRESS + 'styles/v1/' + this.style + '/tiles/' + zoom + '/' + x + '/' + y + (this.useHDPI ? '@2x?access_token=' : '?access_token=') + this.apiToken;\n\t\t\t}\n\t\t\telse \n\t\t\t{\n\t\t\t\timage.src = MapBoxProvider.ADDRESS + 'v4/' + this.mapId + '/' + zoom + '/' + x + '/' + y + (this.useHDPI ? '@2x.' : '.') + this.format + '?access_token=' + this.apiToken;\n\t\t\t}\n\t\t});\n\t}\n}\n","\n\n/**\n * A map provider is a object that handles the access to map tiles of a specific service.\n *\n * They contain the access configuration and are responsible for handling the map theme size etc.\n *\n * MapProvider should be used as a base for all the providers.\n */\nexport abstract class MapProvider \n{\n\t/**\n\t * Name of the map provider\n\t */\n\tpublic name: string = '';\n\n\t/**\n\t * Minimum tile level.\n\t */\n\tpublic minZoom: number = 0;\n\n\t/**\n\t * Maximum tile level.\n\t */\n\tpublic maxZoom: number = 20;\n\n\t/**\n\t * Map bounds.\n\t */\n\tpublic bounds: number[] = [];\n\n\t/**\n\t * Map center point.\n\t */\n\tpublic center: number[] = [];\n\n\t/**\n\t * Get a tile for the x, y, zoom based on the provider configuration.\n\t *\n\t * The tile should be returned as a image object, compatible with canvas context 2D drawImage() and with webgl texImage2D() method.\n\t *\n\t * @param zoom - Zoom level.\n\t * @param x - Tile x.\n\t * @param y - Tile y.\n\t * @returns Promise with the image obtained for the tile ready to use.\n\t */\n\tpublic fetchTile(zoom: number, x: number, y: number): Promise \n\t{\n\t\treturn null;\n\t}\n\n\t/**\n\t * Get map meta data from server if supported.\n\t *\n\t * Usually map server have API method to retrieve TileJSON metadata.\n\t */\n\tpublic async getMetaData(): Promise {}\n}\n","import {MapProvider} from './MapProvider';\n\n\n/**\n * Map tiler provider API.\n *\n * The map tiler server is based on open map tiles.\n *\n * API Reference\n * - https://www.maptiler.com/\n */\nexport class MapTilerProvider extends MapProvider \n{\n\t/**\n\t * Server API access token.\n\t */\n\tpublic apiKey: string;\n\n\t/**\n\t * Map image tile file format (e.g png, jpg)\n\t *\n\t * Format can be for image or for geometry fetched from the system (e.g quantized-mesh-1.0)\n\t */\n\tpublic format: string;\n\n\t/**\n\t * Tile category (e.g. maps, tiles),\n\t */\n\tpublic category: string;\n\n\t/**\n\t * Map tile type, some of the vectorial styles available.\n\t *\n\t * Can be used for rasterized vectorial maps (e.g, basic, bright, darkmatter, hybrid, positron, streets, topo, voyager).\n\t *\n\t * Cam be used for data tiles (e.g hillshades, terrain-rgb, satellite).\n\t */\n\tpublic style: string;\n\n\tpublic resolution: number;\n\n\tpublic constructor(apiKey, category, style, format) \n\t{\n\t\tsuper();\n\n\t\tthis.apiKey = apiKey !== undefined ? apiKey : '';\n\n\t\tthis.format = format !== undefined ? format : 'png';\n\n\t\tthis.category = category !== undefined ? category : 'maps';\n\n\t\tthis.style = style !== undefined ? style : 'satellite';\n\n\t\tthis.resolution = 512;\n\t}\n\n\tpublic override fetchTile(zoom: number, x: number, y: number): Promise \n\t{\n\t\treturn new Promise((resolve, reject) => \n\t\t{\n\t\t\tconst image = document.createElement('img');\n\t\t\timage.onload = function() \n\t\t\t{\n\t\t\t\tresolve(image);\n\t\t\t};\n\t\t\timage.onerror = function() \n\t\t\t{\n\t\t\t\treject();\n\t\t\t};\n\t\t\timage.crossOrigin = 'Anonymous';\n\t\t\timage.src = 'https://api.maptiler.com/' + this.category + '/' + this.style + '/' + zoom + '/' + x + '/' + y + '.' + this.format + '?key=' + this.apiKey;\n\t\t});\n\t}\n}\n","import {MapProvider} from './MapProvider';\nimport {XHRUtils} from '../utils/XHRUtils';\n\n\n/**\n * Open tile map server tile provider.\n *\n * API Reference\n * - https://openmaptiles.org/\n */\nexport class OpenMapTilesProvider extends MapProvider \n{\n\t/**\n\t * Map server address.\n\t *\n\t * By default the open OSM tile server is used.\n\t */\n\tpublic address: string;\n\n\t/**\n\t * Map image tile format.\n\t */\n\tpublic format: string;\n\n\t/**\n\t * Map tile theme, some of the styles available.\n\t * - dark-matter\n\t * - klokantech-basic\n\t * - osm-bright\n\t * - positron\n\t */\n\tpublic theme: string;\n\n\tpublic constructor(address: string, format: string = 'png', theme: string = 'klokantech-basic') \n\t{\n\t\tsuper();\n\t\t\n\t\tthis.address = address;\n\t\tthis.format = format;\n\t\tthis.theme = theme;\n\t}\n\n\tpublic override async getMetaData(): Promise\n\t{\n\t\tconst address = this.address + 'styles/' + this.theme + '.json';\n\n\t\tconst data = await XHRUtils.get(address);\n\t\tconst meta = JSON.parse(data);\n\t\tthis.name = meta.name;\n\t\tthis.format = meta.format;\n\t\tthis.minZoom = meta.minZoom;\n\t\tthis.maxZoom = meta.maxZoom;\n\t\tthis.bounds = meta.bounds;\n\t\tthis.center = meta.center;\n\t}\n\n\tpublic override fetchTile(zoom: number, x: number, y: number): Promise\n\t{\n\t\treturn new Promise((resolve, reject) => \n\t\t{\n\t\t\tconst image = document.createElement('img');\n\t\t\timage.onload = function() \n\t\t\t{\n\t\t\t\tresolve(image);\n\t\t\t};\n\t\t\timage.onerror = function() \n\t\t\t{\n\t\t\t\treject();\n\t\t\t};\n\t\t\timage.crossOrigin = 'Anonymous';\n\t\t\timage.src = this.address + 'styles/' + this.theme + '/' + zoom + '/' + x + '/' + y + '.' + this.format;\n\t\t});\n\t}\n}\n","import {MapProvider} from './MapProvider';\n\n\n/**\n * Open street maps tile server.\n *\n * Works with any service that uses a address/zoom/x/y.format URL for tile access.\n */\nexport class OpenStreetMapsProvider extends MapProvider \n{\n\t/**\n\t* Map server address.\n\t*\n\t* By default the open OSM tile server is used.\n\t*/\n\tpublic address: string;\n\n\t/**\n\t* Map image tile format.\n\t*/\n\tpublic format: string;\n\n\tpublic constructor(address: string = 'https://a.tile.openstreetmap.org/')\n\t{\n\t\tsuper();\n\n\t\tthis.address = address;\n\t\tthis.format = 'png';\n\t\tthis.maxZoom = 19;\n\t}\n\n\tpublic override fetchTile(zoom: number, x: number, y: number): Promise\n\t{\n\t\treturn new Promise((resolve, reject) => \n\t\t{\n\t\t\tconst image = document.createElement('img');\n\t\t\timage.onload = function() \n\t\t\t{\n\t\t\t\tresolve(image);\n\t\t\t};\n\t\t\timage.onerror = function() \n\t\t\t{\n\t\t\t\treject();\n\t\t\t};\n\t\t\timage.crossOrigin = 'Anonymous';\n\t\t\timage.src = this.address + zoom + '/' + x + '/' + y + '.' + this.format;\n\t\t});\n\t}\n}\n","/**\n * Cancelable promises extend base promises and provide a cancel functionality than can be used to cancel the execution or task of the promise.\n *\n * These type of promises can be used to prevent additional processing when the data is not longer required (e.g. HTTP request for data that is not longer necessary)\n */\nexport class CancelablePromise\n{\n\tpublic onResolve: (value: any)=> void;\n\n\tpublic onReject: (error: any)=> void;\n\n\tpublic onCancel: ()=> void;\n\t\n\t/**\n\t * Flag to indicate if the promise has been fulfilled.\n\t * \n\t * Promise has ben fulfilled when value/error is set.\n\t */\n\tpublic fulfilled: boolean = false;\n\n\t/**\n\t * Flag to indicate if the promise was rejected.\n\t * \n\t * Only set when the promise is fulfilled.\n\t */\n\tpublic rejected: boolean = false;\n\n\t/**\n\t * Flag set true when the resolve or reject method are called.\n\t */\n\tpublic called: boolean = false;\n\n\t/**\n\t * Output value of the promise.\n\t * \n\t * Set with the output value if promise was fulfilled and not rejected.\n\t * \n\t * Stores the error value if the promise was rejected.\n\t */\n\tpublic value: T;\n\n\tpublic constructor(executor: (resolve: (value: T | PromiseLike)=> void, reject: (reason?: any)=> void)=> void) \n\t{\n\t\tconst resolve = (v): void =>\n\t\t{\n\t\t\tthis.fulfilled = true;\n\t\t\tthis.value = v;\n\n\t\t\tif (typeof this.onResolve === 'function') \n\t\t\t{\n\t\t\t\tthis.onResolve(this.value);\n\t\t\t\tthis.called = true;\n\t\t\t}\n\t\t};\n\n\t\tconst reject = (reason): void =>\n\t\t{\n\t\t\tthis.rejected = true;\n\t\t\tthis.value = reason;\n\n\t\t\tif (typeof this.onReject === 'function') \n\t\t\t{\n\t\t\t\tthis.onReject(this.value);\n\t\t\t\tthis.called = true;\n\t\t\t}\n\t\t};\n\n\t\ttry \n\t\t{\n\t\t\texecutor(resolve, reject);\n\t\t}\n\t\tcatch (error) \n\t\t{\n\t\t\treject(error);\n\t\t}\n\t}\n\n\t/**\n\t * Request to cancel the promise execution.\n\t *\n\t * @returns True if the promise is canceled successfully, false otherwise.\n\t */\n\tpublic cancel(): boolean\n\t{\n\t\t// TODO \n\t\treturn false;\n\t}\n\n\t/**\n\t * Executed after the promise is fulfilled.\n\t *\n\t * @param callback - Callback to receive the value.\n\t * @returns Promise for chainning.\n\t */\n\tpublic then(callback: (value: any)=> void): CancelablePromise\n\t{\n\t\tthis.onResolve = callback;\n\n\t\tif (this.fulfilled && !this.called) \n\t\t{\n\t\t\tthis.called = true;\n\t\t\tthis.onResolve(this.value);\n\t\t}\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Catch any error that occurs in the promise.\n\t *\n\t * @param callback - Method to catch errors.\n\t * @returns Promise for chainning.\n\t */\n\tpublic catch(callback: (error: any)=> void): CancelablePromise\n\t{\n\t\tthis.onReject = callback;\n\n\t\tif (this.rejected && !this.called) \n\t\t{\n\t\t\tthis.called = true;\n\t\t\tthis.onReject(this.value);\n\t\t}\n\t\treturn this;\n\t}\n\n\t/**\n\t * Finally callback\n\t *\n\t * @param callback - Method to be called.\n\t * @returns Promise for chainning.\n\t */\n\tpublic finally(callback: Function): CancelablePromise\n\t{\n\t\t// TODO \n\t\treturn this;\n\t}\n\n\t/**\n\t * Create a resolved promise.\n\t *\n\t * @param val - Value to pass.\n\t * @returns Promise created with resolve value.\n\t */\n\tpublic static resolve(val: T): CancelablePromise\n\t{\n\t\treturn new CancelablePromise(function executor(resolve, _reject) \n\t\t{\n\t\t\tresolve(val);\n\t\t});\n\t}\n\n\t/**\n\t * Create a rejected promise.\n\t *\n\t * @param reason - Reason to reject the promise.\n\t * @returns Promise created with rejection reason.\n\t */\n\tpublic static reject(reason: any): CancelablePromise\n\t{\n\t\treturn new CancelablePromise(function executor(resolve, reject) \n\t\t{\n\t\t\treject(reason);\n\t\t});\n\t}\n\n\t/**\n\t * Wait for a set of promises to finish, creates a promise that waits for all running promises.\n\t *\n\t * If any of the promises fail it will reject altough some of them may have been completed with success.\n\t *\n\t * @param promises - List of promisses to syncronize.\n\t * @returns Promise that will resolve when all of the running promises are fullfilled.\n\t */\n\tpublic static all(promises: CancelablePromise[]): CancelablePromise\n\t{\n\t\tconst fulfilledPromises = [];\n\t\tconst result = [];\n\n\t\tfunction executor(resolve, reject): void \n\t\t{\n\t\t\tpromises.forEach((promise, index) =>\n\t\t\t{\n\t\t\t\treturn promise\n\t\t\t\t\t.then((val) => \n\t\t\t\t\t{\n\t\t\t\t\t\tfulfilledPromises.push(true);\n\t\t\t\t\t\tresult[index] = val;\n\n\t\t\t\t\t\tif (fulfilledPromises.length === promises.length) \n\t\t\t\t\t\t{\n\t\t\t\t\t\t\treturn resolve(result);\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\t.catch((error) => {return reject(error);});\n\t\t\t}\n\t\t\t);\n\t\t}\n\n\t\treturn new CancelablePromise(executor);\n\t}\n}\n","/**\n * Contains utils to handle canvas element manipulation and common canvas operations.\n */\nexport class CanvasUtils \n{\n\t/**\n * Create a offscreen canvas, used to draw content that will not be displayed using DOM.\n * \n * If OffscreenCanvas object is no available creates a regular DOM canvas object instead.\n * \n * @param width - Width of the canvas in pixels.\n * @param height - Height of the canvas in pixels.\n */\n\t// public static createOffscreenCanvas(width: number, height: number): (HTMLCanvasElement | OffscreenCanvas) \n\t// {\n\t// \tif (typeof OffscreenCanvas !== 'undefined') \n\t// \t{\n\t// \t\treturn new OffscreenCanvas(width, height);\n\t// \t}\n\t// \telse \n\t// \t{\n\t// \t\tlet canvas = document.createElement('canvas');\n\t// \t\tcanvas.width = width;\n\t// \t\tcanvas.height = height;\n\t// \t\treturn canvas;\n\t// \t}\n\t// }\n\tpublic static createOffscreenCanvas(width: number, height: number): (HTMLCanvasElement) \n\t{\n\t\t// if (typeof OffscreenCanvas !== 'undefined') \n\t\t// {\n\t\t// \treturn new OffscreenCanvas(width, height);\n\t\t// }\n\t\t// else \n\t\t{\n\t\t\tlet canvas = document.createElement('canvas');\n\t\t\tcanvas.width = width;\n\t\t\tcanvas.height = height;\n\t\t\treturn canvas;\n\t\t}\n\t}\n}\n","/**\n * Geolocation is used to represent a position in earth using WGS84 Datum units.\n */\nexport class Geolocation \n{\n\t/**\n * Latitude in degrees. Range from -90° to 90°.\n */\n\tpublic latitude: number;\n\n\t/**\n * Latitude in degrees. Range from -180° to 180°.\n */\n\tpublic longitude: number;\n\n\tpublic constructor(latitude: number, longitude: number) \n\t{\n\t\tthis.latitude = latitude;\n\t\tthis.longitude = longitude;\n\t}\n}\n","/**\n * Geolocation utils contains utils to access the user location (GPS, IP location or wifi).\n *\n * Devices with a GPS, for example, can take a minute or more to get a GPS fix, so less accurate data (IP location or wifi) may be returned.\n */\nexport class GeolocationUtils \n{\n\t/**\n\t * Get the current geolocation from the browser using the location API.\n\t *\n\t * This location can be provided from GPS measure, estimated IP location or any other system available in the host. Precision may vary.\n\t *\n\t * @param onResult - Callback function onResult(coords, timestamp).\n\t * @param onError - Callback to handle errors.\n\t */\n\tpublic static get(): Promise<{coords: any, timestamp: number}>\n\t{\n\t\treturn new Promise(function(resolve, reject) \n\t\t{\n\t\t\tnavigator.geolocation.getCurrentPosition(function(result: any) \n\t\t\t{\n\t\t\t\tresolve(result);\n\t\t\t\t// @ts-ignore\n\t\t\t}, reject);\n\t\t});\n\n\t}\n}\n","import {LinearFilter, RGBAFormat, Texture} from 'three';\nimport {CanvasUtils} from './CanvasUtils';\n\n/**\n * Utils for texture creation and manipulation.\n */\nexport class TextureUtils \n{\n\t/**\n * Create a new texture filled with a CSS style.\n * \n * Can be color, gradient or pattern. Supports all options supported in the fillStyle of the canvas API.\n * \n * @param color - Style to apply to the texture surface.\n * @param width - Width of the canvas in pixels.\n * @param height - Height of the canvas in pixels.\n */\n\tpublic static createFillTexture(color: (string | CanvasGradient | CanvasPattern) = '#000000', width: number = 1, height: number = 1): Texture\n\t{\n\t\tconst canvas = CanvasUtils.createOffscreenCanvas(width, height);\n\n\t\tconst context: CanvasRenderingContext2D = canvas.getContext('2d') as CanvasRenderingContext2D;\n\t\tcontext.fillStyle = color;\n\t\tcontext.fillRect(0, 0, width, height);\n\n\t\tconst texture = new Texture(canvas as any);\n\t\ttexture.format = RGBAFormat;\n\t\ttexture.magFilter = LinearFilter;\n\t\ttexture.minFilter = LinearFilter;\n\t\ttexture.generateMipmaps = false;\n\t\ttexture.needsUpdate = true;\n \n\t\treturn texture;\n\t}\n}\n \n","import {Color, Vector2, Vector3} from 'three';\nimport {Geolocation} from './Geolocation';\n\n/**\n * Units utils contains methods to convert data between representations.\n *\n * Multiple methods are used to reprent world coordinates based on the type of data being presented.\n * \n * WGS84 is the most commonly used representation with (latitude, longitude, altitude).\n * \n * EPSG:900913 is used for planar coordinates in (X, Y, Z)\n */\nexport class UnitsUtils \n{\n\t/**\n\t * Average radius of earth in meters.\n\t */\n\tpublic static EARTH_RADIUS: number = 6371008;\n\n\t/**\n\t * Earth radius in semi-major axis A as defined in WGS84.\n\t */\n\tpublic static EARTH_RADIUS_A: number = 6378137.0;\n\n\t/**\n\t * Earth radius in semi-minor axis B as defined in WGS84.\n\t */\n\tpublic static EARTH_RADIUS_B: number = 6356752.314245;\n\n\t/**\n\t * Earth equator perimeter in meters.\n\t */\n\tpublic static EARTH_PERIMETER: number = 2 * Math.PI * UnitsUtils.EARTH_RADIUS;\n\n\t/**\n\t * Earth equator perimeter in meters.\n\t */\n\tpublic static EARTH_ORIGIN: number = UnitsUtils.EARTH_PERIMETER / 2.0;\n\n\t/**\n\t * Converts coordinates from WGS84 Datum to XY in Spherical Mercator EPSG:900913.\n\t *\n\t * @param latitude - Latitude value in degrees.\n\t * @param longitude - Longitude value in degrees.\n\t */\n\tpublic static datumsToSpherical(latitude: number, longitude: number): Vector2\n\t{\n\t\tconst x = longitude * UnitsUtils.EARTH_ORIGIN / 180.0;\n\t\tlet y = Math.log(Math.tan((90 + latitude) * Math.PI / 360.0)) / (Math.PI / 180.0);\n\n\t\ty = y * UnitsUtils.EARTH_ORIGIN / 180.0;\n\n\t\treturn new Vector2(x, y);\n\t}\n\n\t/**\n\t * Converts XY point from Spherical Mercator EPSG:900913 to WGS84 Datum.\n\t *\n\t * @param x - X coordinate.\n\t * @param y - Y coordinate.\n\t */\n\tpublic static sphericalToDatums(x: number, y: number): Geolocation\n\t{\n\t\tconst longitude = x / UnitsUtils.EARTH_ORIGIN * 180.0;\n\t\tlet latitude = y / UnitsUtils.EARTH_ORIGIN * 180.0;\n\n\t\tlatitude = 180.0 / Math.PI * (2 * Math.atan(Math.exp(latitude * Math.PI / 180.0)) - Math.PI / 2.0);\n\n\t\treturn new Geolocation(latitude, longitude);\n\t}\n\n\t/**\n\t * Converts quad tree zoom/x/y to lat/lon in WGS84 Datum.\n\t * \n\t * The X and Y start from 0 from the top/left corner of the quadtree up to (4^zoom - 1)\n\t *\n\t * @param zoom - Zoom level of the quad tree.\n\t * @param x - X coordinate.\n\t * @param y - Y coordinate.\n\t */\n\tpublic static quadtreeToDatums(zoom: number, x: number, y: number): Geolocation\n\t{\n\t\tconst n = Math.pow(2.0, zoom);\n\t\tconst longitude = x / n * 360.0 - 180.0;\n\t\tconst latitudeRad = Math.atan(Math.sinh(Math.PI * (1.0 - 2.0 * y / n)));\n\t\tconst latitude = 180.0 * (latitudeRad / Math.PI);\n\n\t\treturn new Geolocation(latitude, longitude);\n\t}\n\n\t/**\n\t * Direction vector to WGS84 coordinates.\n\t * \n\t * Can be used to transform surface points of world sphere to coordinates.\n\t * \n\t * @param dir - Direction vector.\n\t * @returns WGS84 coordinates.\n\t */\n\tpublic static vectorToDatums(dir: Vector3): Geolocation \n\t{\n\t\tconst radToDeg = 180 / Math.PI;\n\n\t\tconst latitude = Math.atan2(dir.y, Math.sqrt(Math.pow(dir.x, 2) + Math.pow(-dir.z, 2))) * radToDeg;\n\t\tconst longitude = Math.atan2(-dir.z, dir.x) * radToDeg;\n\n\t\treturn new Geolocation(latitude, longitude);\n\t}\n\n\t\n\t/**\n\t * Get a direction vector from WGS84 coordinates.\n\t * \n\t * The vector obtained will be normalized.\n\t * \n\t * @param latitude - Latitude value in degrees.\n\t * @param longitude - Longitude value in degrees.\n\t * @returns Direction vector normalized.\n\t */\n\tpublic static datumsToVector(latitude: number, longitude: number): Vector3 \n\t{\n\t\tconst degToRad = Math.PI / 180;\n\t\t\n\t\tconst rotX = longitude * degToRad;\n\t\tconst rotY = latitude * degToRad;\n\n\t\tvar cos = Math.cos(rotY);\n\t\t\n\t\treturn new Vector3(-Math.cos(rotX + Math.PI) * cos, Math.sin(rotY), Math.sin(rotX + Math.PI) * cos);\n\t}\n\n\t/**\n\t * Get altitude from RGB color for mapbox altitude encoding\n\t * \n\t * https://docs.mapbox.com/data/tilesets/guides/access-elevation-data/~\n\t * \n\t * @param color - Color of the pixel\n\t * @returns The altitude encoded in meters.\n\t */\n\tpublic static mapboxAltitude(color: Color): number \n\t{\n\t\treturn (color.r * 255.0 * 65536.0 + color.g * 255.0 * 256.0 + color.b * 255.0) * 0.1 - 10000.0;\n\t}\n}\n","/**\n * XHR utils contains public static methods to allow easy access to services via XHR.\n */\nexport class XHRUtils \n{\n\t/**\n\t * Get file data from URL as text, using a XHR call.\n\t *\n\t * @param url - Target for the request.\n\t * @param onLoad - On load callback.\n\t * @param onError - On progress callback.\n\t */\n\tpublic static async get(url: string): Promise\n\t{\n\t\treturn new Promise(function(resolve, reject) \n\t\t{\n\t\t\tconst xhr = new XMLHttpRequest();\n\t\t\txhr.overrideMimeType('text/plain');\n\t\t\txhr.open('GET', url, true);\n\n\t\t\txhr.onload = function() \n\t\t\t{\n\t\t\t\tresolve(xhr.response);\n\t\t\t};\n\n\t\t\txhr.onerror = reject;\n\t\t\txhr.send(null);\n\t\t});\n\t}\n\n\t/**\n\t * Get raw file data from URL, using a XHR call.\n\t *\n\t * @param url - Target for the request.\n\t * @param onLoad - On load callback.\n\t * @param onError - On progress callback.\n\t */\n\tpublic static async getRaw(url: string): Promise\n\t{\n\t\treturn new Promise(function(resolve, reject) \n\t\t{\n\t\t\tvar xhr = new XMLHttpRequest();\n\t\t\txhr.responseType = 'arraybuffer';\n\t\t\txhr.open('GET', url, true);\n\n\t\t\txhr.onload = function() \n\t\t\t{\n\t\t\t\tresolve(xhr.response);\n\t\t\t};\n\n\t\t\txhr.onerror = reject;\n\t\t\txhr.send(null);\n\t\t});\n\t}\n\n\t/**\n\t * Perform a request with the specified configuration.\n\t *\n\t * Syncronous request should be avoided unless they are strictly necessary.\n\t *\n\t * @param url - Target for the request.\n\t * @param type - Resquest type (POST, GET, ...)\n\t * @param header - Object with data to be added to the request header.\n\t * @param body - Data to be sent in the resquest.\n\t * @param onLoad - On load callback, receives data (String or Object) and XHR as arguments.\n\t * @param onError - XHR onError callback.\n\t */\n\tpublic static request(url: string, type: string, header?: any, body?: any, onLoad?: Function, onError?: Function, onProgress?: Function): XMLHttpRequest \n\t{\n\t\tfunction parseResponse(response): void \n\t\t{\n\t\t\ttry \n\t\t\t{\n\t\t\t\treturn JSON.parse(response);\n\t\t\t}\n\t\t\tcatch (e) \n\t\t\t{\n\t\t\t\treturn response;\n\t\t\t}\n\t\t}\n\n\t\tconst xhr = new XMLHttpRequest();\n\t\txhr.overrideMimeType('text/plain');\n\t\txhr.open(type, url, true);\n\n\t\t// Fill header data from Object\n\t\tif (header !== null && header !== undefined) \n\t\t{\n\t\t\tfor (const i in header) \n\t\t\t{\n\t\t\t\txhr.setRequestHeader(i, header[i]);\n\t\t\t}\n\t\t}\n\n\t\tif (onLoad !== undefined) \n\t\t{\n\t\t\txhr.onload = function(event) \n\t\t\t{\n\t\t\t\tonLoad(parseResponse(xhr.response), xhr);\n\t\t\t};\n\t\t}\n\n\t\tif (onError !== undefined) \n\t\t{\n\t\t\t// @ts-ignore\n\t\t\txhr.onerror = onError;\n\t\t}\n\n\t\tif (onProgress !== undefined) \n\t\t{\n\t\t\t// @ts-ignore\n\t\t\txhr.onprogress = onProgress;\n\t\t}\n\n\t\txhr.send(body !== undefined ? body : null);\n\n\t\treturn xhr;\n\t}\n}\n","import { Options } from '@angular-slider/ngx-slider';\nimport {Component, ElementRef, OnInit, ViewChild} from '@angular/core';\nimport { CookieService } from 'ngx-cookie-service';\nimport { AESEncryptDecryptService } from 'src/app/_services/AESEncryptDecrypt.service';\nimport { HttpService } from 'src/app/_services/http.service';\nimport { environment } from 'src/environments/environment.prod';\n\n@Component({\n selector: 'app-ui-infobar-bottom',\n templateUrl: './ui-infobar-bottom.component.html'\n})\nexport class UiInfobarBottomComponent implements OnInit {\n value: number = 40;\n highValue: number = 100;\n options: Options = {\n floor: 0,\n ceil: 100\n };\n\n\n @ViewChild('searchKey') searchKey: ElementRef;\n activeAccordian:any;\n openaccordian:any ='0';\n radioList:any;\n favList:any;\n favChannelList:any;\n audio = new Audio();\n itemIndex:number=0;\n channelName:string=\"Song\";\n cityName:string=\"City\";\n countryName:string=\"Country\";\n channelID:string;\n isPlay:boolean=false;\n favcolor: any=\"White\";\n public lat;\n public lng;\n favListarry = [];\n @ViewChild('volumeBar') volumeBar: ElementRef;\n\n public constructor(private http:HttpService,private EnDe:AESEncryptDecryptService,\n private cookieService:CookieService) {\n }\n ngAfterViewInit() {\n this.openaccordian ='0';\n this.searchKey.nativeElement.focus();\n \n if(this.searchKey.nativeElement.value!= null && this.searchKey.nativeElement.value!='')\n{\n this.onSearch(this.searchKey.nativeElement.value);\n}\n }\n public ngOnInit(): void {\nconsole.log(this.value);\n // this.findMe();\n }\n\n onchangeVolume()\n {\n this.audio.volume= this.value / 200;\n }\n\n onHome()\n {\n this.openaccordian ='0';\n }\n\n // setVolume(volume: number): void {\n // this.audio.volume = volume;\n // }\n\n findMe() {\n if (navigator.geolocation) {\n navigator.geolocation.getCurrentPosition((position) => {\n console.log('latitude',position.coords.latitude);\n console.log('longitude',position.coords.longitude);\n this.lat = position.coords.latitude;\n this.lng = position.coords.longitude;\n });\n } else {\n alert(\"Geolocation is not supported by this browser.\");\n }\n }\n //}\n\n\n\n\n onSearch(searchKey:any){\n \n this.http.getAll(environment.GetSearch+searchKey).subscribe((result=>{\n this.radioList=result;\n //console.log(this.radioList);\n }));\n }\n onPlay(ChannelId:string,url:string,i:number){\n debugger;\n this.onCheckFavorite(ChannelId);\n\n if(this.radioList.length>0){\n console.log(url);\n this.audio.src=url;\n this.audio.load();\n this.audio.play();\n this.itemIndex=i;\n this.channelName=this.radioList[i].channelName;\n this.cityName=this.radioList[i].cityName;\n this.countryName=this.radioList[i].countryName;\n this.channelID=this.radioList[i].channelID;\n console.log(this.channelID);\n this.isPlay=true;\n }\n }\n onValidPlay(){\n if(this.radioList.length>0){\n this.audio.src=this.radioList[this.itemIndex].url;\n this.channelName=this.radioList[this.itemIndex].channelName;\n this.cityName=this.radioList[this.itemIndex].cityName;\n this.countryName=this.radioList[this.itemIndex].countryName;\n this.audio.load();\n this.audio.play();\n this.isPlay=true;\n }\n }\n onNext(){\n if(this.radioList.length>1){\n if(this.radioList.length-1==this.itemIndex)\n this.itemIndex=0;\n else\n this.itemIndex+=1;\n this.channelName=this.radioList[this.itemIndex].channelName;\n this.cityName=this.radioList[this.itemIndex].cityName;\n this.countryName=this.radioList[this.itemIndex].countryName;\n this.audio.src=this.radioList[this.itemIndex].url;\n this.audio.load();\n this.audio.play();\n this.isPlay=true;\n }\n\n }\n onPrevious(){\n if(this.radioList.length>1){\n if(this.itemIndex==0)\n this.itemIndex=this.radioList.length-1;\n else if(this.itemIndex==this.radioList.length)\n this.itemIndex=0;\n else\n this.itemIndex-=1;\n this.channelName=this.radioList[this.itemIndex].channelName;\n this.cityName=this.radioList[this.itemIndex].cityName;\n this.countryName=this.radioList[this.itemIndex].countryName;\n this.audio.src=this.radioList[this.itemIndex].url;\n this.audio.load();\n this.audio.play();\n this.isPlay=true;\n }\n }\n onPause(){\n if(this.radioList.length>1){\n this.audio.pause();\n this.isPlay=false;\n }\n }\n\n onCheckFavorite(ChannelId:string)\n {\n if(this.cookieService.get('favChannel')!=\"\")\n {\n this.favList=JSON.parse(this.cookieService.get('favChannel'));\n this.favChannelList = this.favList.filter(x=>x.ChannelId==ChannelId);\n if(this.favChannelList ==\"\")\n {\n this.favcolor='White'\n \n }else\n {\n this.favcolor='Red';\n \n }\n }else\n {\n this.favcolor='White'\n \n }\n }\n\n getFavouriteChannel()\n {\n\n if(this.openaccordian=='0') \n {\n if(this.cookieService.get('favChannel')!=\"\")\n {\n this.favList=JSON.parse(this.cookieService.get('favChannel'));\n console.log(this.favList);\n this.favChannelList =Array.from(new Set(this.favList.map(item => item.ChannelId)));\n var StringifyData = JSON.stringify(this.favChannelList);\n this.radioList= null;\n this.http.getAll(environment.GetAllFavChannels+StringifyData).subscribe((result=>{\n debugger;\n this.radioList=result;\n console.log(this.radioList);\n }));\n //this.radioList=this.favList;\n }\n \n this.openaccordian='1';\n }\n else\n {\n this.openaccordian='0';\n }\n }\n onFavorite(ChannelId:string,channelName:string, favcolor:string){\n console.log(ChannelId);\n debugger;\n if(ChannelId != null && ChannelId!=\"\"){\n console.log(ChannelId);\n if(favcolor==\"Red\")\n {\n if(this.cookieService.get('favChannel')!=\"\")\n {\n this.favList=JSON.parse(this.cookieService.get('favChannel'));\n\n this.favChannelList = this.favList.filter(x=>x.ChannelId==ChannelId);\n if(this.favChannelList ==\"\")\n {\n this.favList.push({ChannelId,channelName});\n var StringifyData = JSON.stringify(this.favList);\n this.cookieService.set('favChannel', StringifyData, 2, '/', null, null, 'Lax');\n\n }else\n {\n const index: number = this.favList.findIndex(x=>x.ChannelId==ChannelId);\n\n\n if (index !== -1) {\n this.favList.splice(index, 1);\n } \n \n var StringifyData = JSON.stringify(this.favList);\n this.cookieService.set('favChannel', StringifyData, 2, '/', null, null, 'Lax');\n\n }\n }\n this.favcolor=\"White\";\n }\n else\n {\n if(this.cookieService.get('favChannel')!=\"\")\n {\n this.favList=JSON.parse(this.cookieService.get('favChannel'));\n\n this.favChannelList = this.favList.filter(x=>x.ChannelId==ChannelId);\n if(this.favChannelList ==\"\")\n {\n this.favList.push({ChannelId,channelName});\n var StringifyData = JSON.stringify(this.favList);\n this.cookieService.set('favChannel', StringifyData, 2, '/', null, null, 'Lax');\n\n }\n }\n else\n { \n console.log('hi');\n this.favList =null;\n if (!this.favChannelList) {\n this.favChannelList = [];\n }\n \n this.favChannelList.push({ChannelId,channelName});\n var StringifyData = JSON.stringify(this.favChannelList);\n this.cookieService.set('favChannel', StringifyData, 2, '/', null, null, 'Lax');\n }\n this.favcolor=\"Red\";\n }\ndebugger;\n\nif( this.openaccordian=='1')\n{\n this.openaccordian='0';\n this.getFavouriteChannel();\n}\n\n\n }\n \n\n }\n\n\n\n // this.favList=JSON.parse(this.cookieService.get('favChannel'));\n\n\n// this.favListarry.push({ChannelId,channelName});\n// var StringifyData = JSON.stringify(this.favListarry);\n// console.log(StringifyData);\n// this.cookieService.set('favChannel', StringifyData, 2, '/', null, null, 'Lax');\n// if(this.cookieService.get('favChannel')!=\"\"){\n// this.favList=JSON.parse(this.cookieService.get('favChannel'));\n// console.log(this.favList);\n// this.favList = this.favList.filter(x=>x.ChannelId==ChannelId)\n// console.log(this.favList);\n// }\n // this.favList=JSON.parse(this.favListarry)\n // this.cookieService.set('favChannel', this.favListarry, 2, '/', null, null, 'Lax');\n // if(this.cookieService.get('favChannel')!=\"\"){\n // this.favList=JSON.parse(this.cookieService.get('favChannel'));\n // }\n // else{\n // var a= JSON.parse(this.cookieService.get('favChannel'))\n // a.array.forEach(element => {\n \n // });\n // }\n onFav(ChannelId:string)\n {\n this.cookieService.set('user', 'Readerstacks', 2, '/', null, null, 'Lax');\n\n // alert(ChannelId);\n\n }\n\n\n}\n","\n\n","import {Component, OnInit} from '@angular/core';\n\n@Component({\n selector: 'app-ui-infobar-top',\n templateUrl: './ui-infobar-top.component.html'\n})\nexport class UiInfobarTopComponent implements OnInit {\n\n public constructor() {\n }\n\n public ngOnInit(): void {\n }\n\n}\n","import {Component, OnInit} from '@angular/core';\n\n@Component({\n selector: 'app-ui-sidebar-left',\n templateUrl: './ui-sidebar-left.component.html'\n})\nexport class UiSidebarLeftComponent implements OnInit {\n\n public constructor() {\n }\n\n public ngOnInit(): void {\n }\n\n}\n","import {Component, OnInit} from '@angular/core';\n\n@Component({\n selector: 'app-ui-sidebar-right',\n templateUrl: './ui-sidebar-right.component.html'\n})\nexport class UiSidebarRightComponent implements OnInit {\n\n public constructor() {\n }\n\n public ngOnInit(): void {\n }\n\n}\n","import {Component, OnInit} from '@angular/core';\n\n@Component({\n selector: 'app-ui',\n templateUrl: './ui.component.html'\n})\nexport class UiComponent implements OnInit {\n\n public constructor() {\n }\n\n public ngOnInit(): void {\n }\n\n}\n","
\n \n \n \n \n \n
\n","import { Component, OnInit } from '@angular/core';\n\n@Component({\n selector: 'app-uitextbox',\n templateUrl: './uitextbox.component.html',\n styleUrls: ['./uitextbox.component.scss']\n})\nexport class UitextboxComponent implements OnInit {\n\n constructor() { }\n\n ngOnInit(): void {\n }\n\n}\n","import packageInfo from 'package.json';\n\nexport const environment = {\n production: true,\n version: packageInfo.version,\n apiUrl:\"https://oneradio.online/radioapi/api/RData/\",\n //apiUrl:\"https://localhost:44305/api/RData/\",\n GetSearch:\"GetAll?searchKey=\",\n GetAllFavChannels:\"GetAllFavChannels?searchKey=\",\n GetChannel:\"GetChannel?ChannelId=\"\n};\n\n","// The file contents for the current environment will overwrite these during build.\n// The build system defaults to the dev environment which uses `environment.ts`, but if you do\n// `ng build --env=prod` then `environment.prod.ts` will be used instead.\n// The list of which env maps to which file can be found in `.angular-cli.json`.\n\nimport packageInfo from 'package.json';\n\nexport const environment = {\n production: false,\n version: packageInfo.version\n};\n","import {enableProdMode, ViewEncapsulation} from '@angular/core';\nimport {platformBrowserDynamic} from '@angular/platform-browser-dynamic';\n\nimport {AppModule} from './app/app.module';\nimport {environment} from './environments/environment';\n\nif (environment.production) {\n enableProdMode();\n}\n\nplatformBrowserDynamic().bootstrapModule(AppModule, [{\n defaultEncapsulation: ViewEncapsulation.None\n}]).catch(err => console.log(err));\n","export default \"varying vec3 vertexNormal;\\r\\nvoid main(){\\r\\n float intensity=pow(0.9-dot(vertexNormal,vec3(0.0,0.0,1.0)),2.0);\\r\\n //vec3 atmosphere=vec3(0.3,0.6,1.0)*pow(intensity,1.5);\\r\\n gl_FragColor=vec4(0.3,0.6,1.0,1.0)*intensity;\\r\\n}\"","export default \"varying vec3 vertexNormal;\\r\\nvoid main(){\\r\\n vertexNormal=normalize(normalMatrix*normal);\\r\\n gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\\r\\n //gl_Position = vec4( 1,0,0, 1 );\\r\\n}\"","export default \"uniform sampler2D globeTexture;\\r\\nvarying vec2 vertexUV;// vec2(0,0,24) or [0,0,24]\\r\\nvarying vec3 vertexNormal;\\r\\nvoid main(){\\r\\n //texture2D(globeTexture,vertexUV)\\r\\n //gl_FragColor=vec4(0.4,1,1,0.4);\\r\\n\\r\\n float intensity=1.05-dot(vertexNormal,vec3(0.0,0.0,1.0));\\r\\n vec3 atmosphere=vec3(0.3,0.6,1.0)*pow(intensity,1.5);\\r\\n gl_FragColor=vec4(atmosphere +texture2D(globeTexture,vertexUV).xyz,1.0);\\r\\n}\"","export default \"varying vec2 vertexUV;\\r\\nvarying vec3 vertexNormal;\\r\\nvoid main(){\\r\\n vertexUV=uv;\\r\\n vertexNormal=normalize(normalMatrix*normal);\\r\\n gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\\r\\n //gl_Position = vec4( 1,0,0, 1 );\\r\\n}\"","/* (ignored) */"],"names":["MeshPhongMaterial","Vector3","MapNodeGeometry","MapNode","QuadTreePosition","MapPlaneNode","UnitsUtils","MapNodeHeightGeometry","CanvasUtils","MapHeightNode","constructor","parentNode","mapView","location","root","level","x","y","geometry","material","wireframe","color","isMesh","visible","matrixAutoUpdate","initialize","loadData","loadHeightGeometry","nodeReady","textureLoaded","heightProvider","Error","minZoom","maxZoom","console","warn","baseGeometry","image","fetchTile","disposed","canvas","createOffscreenCanvas","geometrySize","context","getContext","imageSmoothingEnabled","drawImage","tileSize","width","height","imageData","getImageData","e","heightLoaded","createChildNodes","Constructor","Object","getPrototypeOf","node","topLeft","scale","set","position","add","updateMatrix","updateMatrixWorld","topRight","bottomLeft","bottomRight","raycast","raycaster","intersects","EARTH_PERIMETER","NearestFilter","RGBAFormat","Texture","TextureUtils","MapHeightNodeShader","prepareMaterial","map","defaultTexture","frustumCulled","userData","heightMap","value","defaultHeightTexture","onBeforeCompile","shader","i","uniforms","vertexShader","replace","needsUpdate","texture","generateMipmaps","format","magFilter","minFilter","error","createFillTexture","BufferGeometry","DoubleSide","Float32BufferAttribute","Uint32BufferAttribute","Martini","MapMartiniHeightNode","elevationDecoder","meshMaxError","exageration","emptyTexture","side","rScaler","gScaler","bScaler","offset","drawNormals","drawBlack","zoomlevel","computeNormals","drawTexture","fragmentShader","getTerrain","elevation","gridSize","terrain","Float32Array","k","r","g","b","getMeshAttributes","vertices","bounds","numOfVerticies","length","positions","texCoords","minX","minY","maxX","maxY","xScale","yScale","pixelIdx","size","uv","processHeight","data","martini","tile","createTile","triangles","getMesh","attributes","setIndex","setAttribute","rotateX","Math","PI","LinearFilter","Mesh","subdivide","children","nodesLoaded","childrens","cacheTiles","childrenCache","subdivided","simplify","dispose","provider","self","MeshBasicMaterial","Matrix4","Quaternion","MapSphereNodeGeometry","MapSphereNode","createGeometry","applyScaleNode","zoom","range","pow","max","segments","floor","phiLength","phiStart","thetaLength","thetaStart","computeBoundingBox","box","boundingBox","clone","center","getCenter","matrix","compose","z","EARTH_RADIUS","applyMatrix4","copy","setPosition","matrixWorldNeedsUpdate","force","matrixWorld","MapProvider","XHRUtils","BingMapsProvider","apiKey","type","AERIAL","getMetaData","address","ADDRESS","get","meta","JSON","parse","quadKey","quad","mask","cell","Promise","resolve","reject","document","createElement","onload","onerror","crossOrigin","src","subdomain","Color","HeightDebugProvider","resolution","fromColor","lerpHSL","toColor","putImageData","HereMapsProvider","appId","appCode","style","scheme","version","server","nextServer","MapBoxProvider","apiToken","id","mode","STYLE","useHDPI","mapId","name","OpenMapTilesProvider","theme","url","xhr","XMLHttpRequest","overrideMimeType","open","response","send","getRaw","responseType","request","header","body","onLoad","onError","onProgress","parseResponse","undefined","setRequestHeader","event","onprogress"],"sourceRoot":"webpack:///","x_google_ignoreList":[]}