{"version":3,"sources":["serviceWorkerRegistration.ts","PreferenceStorage.ts","maps/IMap.ts","Compare.ts","components/AircraftListItem.tsx","components/AircraftList.tsx","components/ControllerList.tsx","components/FlightPlanComponent.tsx","components/FlightPlanLoader.tsx","maps/LeaftletMap.ts","maps/MaptalksMap.ts","Converters.ts","components/MapComponent.tsx","components/Dialogs/TeleportDialog.tsx","components/Display.tsx","components/Controls/Panel.tsx","components/Leaderboard.tsx","components/EventModal.tsx","components/EventItem.tsx","components/PastEvents.tsx","components/EventList.tsx","components/Download.tsx","components/Hud.tsx","components/Ruler.tsx","components/UserIcon.tsx","Hooks.ts","components/TeleportButton.tsx","components/Pages/HomeWithParams.tsx","components/Pages/Home.tsx","components/Pages/EventListPage.tsx","components/Pages/EventDetailsPage.tsx","components/StopwatchHub.tsx","components/StopwatchItem.tsx","components/Pages/StopwatchPage.tsx","components/Pages/LeaderboardPage.tsx","components/Pages/OverlayTime.tsx","components/Pages/OverlayLiveLeaderboard.tsx","components/Pages/OverlayData.tsx","components/Pages/FlightPlanCreatePage.tsx","components/Pages/FlightPlanListPage.tsx","components/Pages/ClientsPage.tsx","components/Pages/DataPage.tsx","components/Pages/AdminStopwatchesPage.tsx","App.js","index.js"],"names":["isLocalhost","Boolean","window","location","hostname","match","registerValidSW","swUrl","config","navigator","serviceWorker","register","then","registration","onupdatefound","installingWorker","installing","onstatechange","state","controller","console","log","onUpdate","onSuccess","catch","error","PREF_KEY","MapTileType","MapDimension","MapMode","isObject","value","shallowEqual","A","B","every","Number","isNaN","compareObjects","keysA","Object","keys","keysB","length","some","key","hasOwnProperty","deepEqual","prop","propsShallowEqual","AircraftListItem","React","constructor","props","super","this","handleAircraftClick","bind","handleShowPathChanged","handleMoreInfoChanged","onAircraftClick","clientId","onShowPathChanged","onMoreInfoChanged","render","_jsxs","ListItem","children","_jsx","className","disabled","isReady","onClick","callsign","Checkbox","type","checked","isMoreInfo","onChange","isShowPath","_AircraftListItem","displayName","name","styled","tr","_templateObject","_taggedTemplateLiteral","input","_templateObject2","AircraftList","collapsed","handleToggle","shouldComponentUpdate","nextProps","nextState","setState","renderAircrafList","clientIds","myClientId","includes","filter","o","concat","colSpan","NoneText","map","aircrafts","substring","isMe","isFollowing","followingClientId","isFlightPlan","flightPlanClientId","showRouteClientIds","onShowRouteChanged","moreInfoClientIds","groupClientIds","group","entries","sort","a","b","localeCompare","aircraftCount","buttonTitle","_Fragment","StyledButton","color","Modal","isOpen","toggle","ModalHeader","ModalBody","List","Title","id","UncontrolledTooltip","placement","target","_AircraftList","Button","div","_templateObject3","table","_templateObject4","ControllerList","controllers","list","onControllerClick","Header","h5","FlightPlanComponent","loading","data","useQuery","gql","variables","onFlightPlansLoaded","flightEvent","flightPlans","hideList","flightPlan","href","downloadUrl","rel","download","title","FlightPlanLoader","Query","query","eventId","_ref","event","waypoints","idents","split","_ref2","onAirportsLoaded","airports","LeafletMap","mymap","baseLayerGroup","L","airportLayerGroup","airportMarkers","markers","atcMarkers","flightPlanLayerGroup","routeLayerGroups","routeLines","trackingStatuses","circleMarker","onViewChangedHandler","onTeleportPositionSelectedHandler","onSetMeHandler","onSetFollowHandler","onSetShowPlanHandler","onSetShowInfoHandler","onSetShowRouteHandler","initialView","lastView","isDark","isDrawing","isTeleporting","measurement","initialize","divId","view","mode","attributionControl","contextmenu","contextmenuWidth","contextmenuItems","text","callback","moveAircraft","setView","latitude","longitude","zoom","attribution","position","addTo","removeControl","zoomControl","on","e","getZoom","center","getCenter","lat","lng","latlng","getLatLngs","setLatLngs","stopDrawing","overpassFrontend","OverpassFrontend","OverpassLayer","minZoom","feature","markerSymbol","tags","ref","style","stroke","width","drawOshkoshCircles","deinitialize","_this$mymap","remove","startTeleporting","dragging","disable","getContainer","classList","add","startDrawing","enable","nm","distance","bearing","LG","icon","html","toFixed","changeMode","dark","setTileLayer","_this$initialView","_this$initialView2","clearLayers","tileSize","scaling","undefined","zoomOffset","additionalAttributes","OpenStreetMap","addLayer","_objectSpread","maxZoom","OpenTopoMap","EsriWorldImagery","EsriTopo","UsVfrSectional","moveATCMarker","status","info","marker","bindPopup","frequencyCom","realName","certificate","setLatLng","iconUrl","iconSize","iconAnchor","zIndexOffset","cleanUpController","moveMarker","connectionId","aircraftStatus","isShowingPlan","isShowingRoute","aircraft","iconSizeValue","htmlBody","Math","round","altitude","heading","indicatedAirSpeed","groundSpeed","trueHeading","setIcon","infoBoxWidth","popupDiv","create","popup","floor","innerHTML","popupBtnGroup","appendChild","setMeButton","createToggleButton","setFollowButton","setFlightPlanButton","setShowInfoButton","setShowRouteButton","_this$mymap2","closePopup","_this$mymap3","_this$mymap4","_this$mymap5","_this$mymap6","autoPan","getIcon","setRotationAngle","drawAirports","minLongitude","reduce","prev","curr","min","maxLongitude","max","minLatitude","maxLatitude","fitBounds","ident","removeFrom","airport","drawFlightPlans","index","colors","over180Line","latlngArray","i","waypoint","abs","push","prevWaypoint","distance180","differenceLng","line180","differenceLat","polyline","latlngNegative180","latlngPositive180","polyline0","dashArray","polyline1","focus","cleanUpAircraft","removeRangeCircle","addRangeCircle","radius","opacity","fillOpacity","weight","getCurrentView","onViewChanged","handler","onTeleportPositionSelected","onSetMe","onSetFollow","onSetShowPlan","onSetShowInfo","onSetShowRoute","track","isOnGround","createRouteLine","addLatLng","prependTrack","route","routeSoFar","slice","r","clearTrack","container","content","isToggled","button","setAttribute","commonStyle","fill","fillColor","latDiff","lngDiff","MaptalksMap","visibleCircle","maptalks","symbol","lineColor","lineWidth","lineOpacity","polygonFill","polygonOpacity","atcLayer","aircraftLayer","airportLayer","flightPlanLayer","enableAltitude","drawAltitude","routeLayers","pitch","options","item","click","setMenu","handleZoom","y","x","addGeometry","hide","cssFilter","setBaseLayer","urlTemplate","subdomains","Carto","setInfoWindow","autoCloseOn","setCoordinates","markerFile","markerWidth","markerHeight","FEET_TO_METER","offset","sub","getCoordinates","setProperties","animate","translate","duration","ANIMATION_DURATION","setStartAngle","setEndAngle","aircraftLine","setBoxStyle","getBoxStyle","markerType","markerFill","markerFillOpacity","markerLineWidth","setTextSymbol","getTextSymbol","textFill","circleOffset","updateSymbol","body","setContent","properties","determineAircraftSize","textSymbol","textFaceName","textSize","textWeight","textVerticalAlignment","textHorizontalAlignment","textDy","boxStyle","padding","verticalAlignment","horizontalAlignment","minWidth","minHeight","createInfoWindow","popupElement","document","createElement","infoWindow","getInfoWindow","InfoWindow","addEventListener","fitExtent","clear","UIMarker","dy","show","latlngs","altitudes","cruisingAltitude","textName","panTo","setZoom","routeLine","getProperties","line","c1","c2","extent","setPitch","setRadius","pow","AIRCRAFT_SIZE","coordinate","pascalCasePattern","RegExp","pascalCaseToCamelCase","propname","test","charAt","toLowerCase","convertPropertyNames","obj","converterFn","t","prototype","toString","apply","MapComponent","firstFocus","previousAircraftClientIds","previousControllerClientIds","currentView","current","dimension","_2D","_map","tileType","onMeChanged","onFollowingChanged","onShowPlanChanged","onShowInfoChanged","hasInitialView","updateHandler","callsignFilter","showInfoClientIds","hub","off","toRemove","_","allClientIds","currentClientIds","atc","onRequestFlightRoute","onDrawingCompleted","onTeleportingCompleted","prependingRoute","focusView","dangerouslySetInnerHTML","__html","height","TeleportDialog","teleportToken","send","code","String","fromCharCode","random","onRequested","selectedPosition","onComplete","parseFloat","role","textAlign","CollapsedDiv","ExpandedDiv","CollapsedButton","StyledFormGroup","FormGroup","TypeWrapper","_templateObject5","LayerWrapper","_templateObject6","Display","expand","setExpand","check","Input","handleIsDark","onIsDarkChanged","Label","for","ButtonGroup","active","handleMap2D","onDimensionChanged","handleMap3D","_3D","handleOpenStreetMap","onTileTypeChanged","handleOpenTopoMap","handleEsriWorldImagery","handleEsriTopo","handleUsVfrSectional","xmlns","viewBox","transform","d","recordsToLeaderboards","records","leaderboardName","subIndex","StyledName","StyledTime","Leaderboard","milestones","checkpoints","rowSpan","leaderboards","milestoneName","leaderboard","score","record","playerName","scoreDisplay","renderTime","endDateTime","parseJSON","startDateTime","toLocaleString","EventModal","handleOpen","onOpened","onClosed","async","size","onAirportLoaded","StyledReactMarkdown","description","url","ModalFooter","span","ReactMarkdown","EventItem","CustomButton","addHours","EventTitle","EventType","EventSubtitle","formatRelative","Date","li","h3","isBefore","css","ul","PastEvents","open","events","flightEvents","getTime","EventList","setCollapsed","Wrapper","upcoming","ev","compareDesc","Panel","_templateObject7","_templateObject8","Download","modal","setModal","activeTab","setActiveTab","Nav","tabs","NavItem","NavLink","TabContent","TabPane","tabId","marginTop","borderBottomLeftRadius","borderBottomRightRadius","maxWidth","marginBottom","display","alt","src","Hud","_props$myClientId","_props$followingClien","_props$flightPlanClie","StyledWrapper","InputGroup","InputGroupAddon","addonType","outline","onFlightPlanChanged","Ruler","onStartDrawing","UserInfo","profile","setProfile","response","fetch","ok","json","f","cy","cx","ry","rx","StyledInfo","Badge","useStateOnce","initialValue","alreadySet","setAlreadySet","newValue","useStateFromProps","propsValue","TeleportButton","onStartTeleporting","signalr","withUrl","withAutomaticReconnect","withHubProtocol","protocol","build","HomeWithParams","setIsDark","mapDimension","setMapDimension","mapTileType","setMapTileType","setMyClientId","setFollowingClientId","setFlightPlanClientId","showPlanClientId","setShowRouteClientIds","setMoreInfoClientIds","setPrependingRoute","setAircrafts","setControllers","teleportPosition","setTeleportPosition","drawingFlightPlans","setDrawingFlightPlans","drawingAirports","setDrawingAirports","setFocusView","setIsDrawing","setIsTeleporting","aircraftStatusCache","cleanUp","lastUpdated","omit","handleControllerClick","handleMeChanged","handleShowRouteChanged","handleRequestFlightRoute","stream","subscribe","next","complete","handleFollowingChanged","handleShowInfoChanged","handleFlightPlanChanged","handleAirportsLoaded","handleFlightPlansLoaded","handleTeleportRequested","handleTeleportCompleted","message","origin","removeEventListener","onCallsignReceived","onreconnected","start","stop","timeout","setInterval","clearInterval","storage","savePreferences","map3D","handleDrawingCompleted","handleTeleportingCompleted","none","handleStartDrawing","handleStartTeleporting","isShowingEvents","UserIcon","pref","localStorage","setItem","JSON","stringify","loadPreferences","dataString","getItem","parse","Home","_searchParams$get","searchParams","URLSearchParams","search","get","theme","myCallsign","followCallsign","showPlanCallsign","showRouteCallsign","focusCallsign","showEvents","panelVersion","elem","getElementById","setFocusClientId","setShowPlanClientId","handleCallsignReceived","QUERY","Container","Row","Col","Breadcrumb","BreadcrumbItem","Link","to","StyledTitle","GET_QUERY","UPDATE_QUERY","HubConnectionBuilder","params","Mutated","handleNameChanged","handleDescriptionChanged","handleUrlChanged","_e$target$value","handleStartDateTimeChanged","handleEndDateTimeChanged","_e$target$value2","Mutation","mutation","update","_state$url","_state$endDateTime","onSubmit","preventDefault","onUpdateStopwatch","onRemoveStopwatch","onDisconnected","onreconnecting","onConnected","onUpdateLeaderboard","formatTime","elapsed","padStart","RemarkEditWrapper","RemarkText","em","StyledLaps","StopwatchItem","setElapsed","editingRemarks","setEditingRemarks","stoppedDateTime","startedDateTime","interval","ListGroupItem","float","marginRight","removed","remarks","onRemarksChanged","connected","handleStart","handleLap","handleStop","handleSave","handleRestart","handleReset","handleRemove","lapsDateTime","lapDateTime","setConnected","stopwatches","removedStopwatches","_event$leaderboards","StopwatchHub","handleConnected","handleDisconnected","handleUpdateStopwatch","stopwatch","serverDateString","md","Form","placeholder","ListGroup","updatedStopwatch","handleRemarksChanged","_params$get","leaderboardParam","leaderboardIndex","setStopwatch","setLeaderboard","lapIndex","removedStopwatch","_records$find","find","callsignsParam","callsigns","setStopwatches","setLeaderboards","result","finishSymbol","references","checkpoint","timeDiff","isReference","referencePoint","firstRecords","bestId","bestLapCount","bestTime","MAX_VALUE","time","timeSinceStart","lastLapTime","referenceTime","isStopwatch","StyledTable","l","StyledRank","highlight","StyledRef","StyledDiff","hasSign","hour","minute","second","td","_templateObject9","_templateObject10","_templateObject11","_templateObject12","_templateObject13","_templateObject14","_templateObject15","_templateObject16","_templateObject17","OverlayData","parameter","setValue","pageState","setPageState","departure","destination","alternate","cruisingSpeed","handleTypeChanged","htmlFor","required","tag","fp","Line","confirm","method","reload","handleDelete","ClientsPage","clients","setClients","localClients","client","clientType","otherClients","clientVersion","columnsSelected","simRate","bank","altitudeAboveGround","trueAirSpeed","verticalSpeed","touchdownNormalVelocity","gForce","fuelTotalQuantity","isUnlimitedFuel","barometerPressure","totalAirTemperature","windVelocity","windDirection","stallWarning","overspeedWarning","isAutopilotOn","transponderState","transponder","columnsUnselected","AircraftRow","selected","aircraftData","onTick","StyledCallsign","StyledType","model","estimatedCruiseSpeed","clipboard","writeText","host","err","handleClick","DataPage","aircraftInfos","setAircraftInfos","aircraftStatuses","setAircraftStatuses","selectedClientIds","setSelectedClientIds","handleAdd","AdminStopwatchesPage","setDataString","handleStopwatchesReturned","App","Component","Route","exact","path","component","EventListPage","EventDetailsPage","StopwatchPage","LeaderboardPage","OverlayTime","OverlayLiveLeaderboard","FlightPlanCreatePage","FlightPlanListPage","_App","baseUrl","getElementsByTagName","getAttribute","rootElement","ApolloClient","uri","cache","InMemoryCache","typePolicies","FlightPlanData","keyFields","FlightPlanWaypoint","ReactDOM","ApolloProvider","BrowserRouter","basename","URL","process","headers","contentType","indexOf","ready","unregister","checkValidServiceWorker","serviceWorkerRegistration","element","waiting","postMessage"],"mappings":"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","file":"static/js/main.b0a7949e.chunk.js","sourcesContent":["// This optional code is used to register a service worker.\r\n// register() is not called by default.\r\n\r\n// This lets the app load faster on subsequent visits in production, and gives\r\n// it offline capabilities. However, it also means that developers (and users)\r\n// will only see deployed updates on subsequent visits to a page, after all the\r\n// existing tabs open on the page have been closed, since previously cached\r\n// resources are updated in the background.\r\n\r\n// To learn more about the benefits of this model and instructions on how to\r\n// opt-in, read https://cra.link/PWA\r\n\r\nconst isLocalhost = Boolean(\r\n window.location.hostname === \"localhost\" ||\r\n // [::1] is the IPv6 localhost address.\r\n window.location.hostname === \"[::1]\" ||\r\n // 127.0.0.0/8 are considered localhost for IPv4.\r\n window.location.hostname.match(\r\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\r\n )\r\n);\r\n\r\ntype Config = {\r\n onSuccess?: (registration: ServiceWorkerRegistration) => void;\r\n onUpdate?: (registration: ServiceWorkerRegistration) => void;\r\n};\r\n\r\nexport function register(config?: Config) {\r\n if (process.env.NODE_ENV === \"production\" && \"serviceWorker\" in navigator) {\r\n // The URL constructor is available in all browsers that support SW.\r\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\r\n if (publicUrl.origin !== window.location.origin) {\r\n // Our service worker won't work if PUBLIC_URL is on a different origin\r\n // from what our page is served on. This might happen if a CDN is used to\r\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\r\n return;\r\n }\r\n\r\n window.addEventListener(\"load\", () => {\r\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\r\n\r\n if (isLocalhost) {\r\n // This is running on localhost. Let's check if a service worker still exists or not.\r\n checkValidServiceWorker(swUrl, config);\r\n\r\n // Add some additional logging to localhost, pointing developers to the\r\n // service worker/PWA documentation.\r\n navigator.serviceWorker.ready.then(() => {\r\n console.log(\r\n \"This web app is being served cache-first by a service \" +\r\n \"worker. To learn more, visit https://cra.link/PWA\"\r\n );\r\n });\r\n } else {\r\n // Is not localhost. Just register service worker\r\n registerValidSW(swUrl, config);\r\n }\r\n });\r\n }\r\n}\r\n\r\nfunction registerValidSW(swUrl: string, config?: Config) {\r\n navigator.serviceWorker\r\n .register(swUrl)\r\n .then((registration) => {\r\n registration.onupdatefound = () => {\r\n const installingWorker = registration.installing;\r\n if (installingWorker == null) {\r\n return;\r\n }\r\n installingWorker.onstatechange = () => {\r\n if (installingWorker.state === \"installed\") {\r\n if (navigator.serviceWorker.controller) {\r\n // At this point, the updated precached content has been fetched,\r\n // but the previous service worker will still serve the older\r\n // content until all client tabs are closed.\r\n console.log(\r\n \"New content is available and will be used when all \" +\r\n \"tabs for this page are closed. See https://cra.link/PWA.\"\r\n );\r\n // Execute callback\r\n if (config && config.onUpdate) {\r\n config.onUpdate(registration);\r\n }\r\n } else {\r\n // At this point, everything has been precached.\r\n // It's the perfect time to display a\r\n // \"Content is cached for offline use.\" message.\r\n console.log(\"Content is cached for offline use.\");\r\n\r\n // Execute callback\r\n if (config && config.onSuccess) {\r\n config.onSuccess(registration);\r\n }\r\n }\r\n }\r\n };\r\n };\r\n })\r\n .catch((error) => {\r\n console.error(\"Error during service worker registration:\", error);\r\n });\r\n}\r\n\r\nfunction checkValidServiceWorker(swUrl: string, config?: Config) {\r\n // Check if the service worker can be found. If it can't reload the page.\r\n fetch(swUrl, {\r\n headers: { \"Service-Worker\": \"script\" },\r\n })\r\n .then((response) => {\r\n // Ensure service worker exists, and that we really are getting a JS file.\r\n const contentType = response.headers.get(\"content-type\");\r\n if (\r\n response.status === 404 ||\r\n (contentType != null && contentType.indexOf(\"javascript\") === -1)\r\n ) {\r\n // No service worker found. Probably a different app. Reload the page.\r\n navigator.serviceWorker.ready.then((registration) => {\r\n registration.unregister().then(() => {\r\n window.location.reload();\r\n });\r\n });\r\n } else {\r\n // Service worker found. Proceed as normal.\r\n registerValidSW(swUrl, config);\r\n }\r\n })\r\n .catch(() => {\r\n console.log(\r\n \"No internet connection found. App is running in offline mode.\"\r\n );\r\n });\r\n}\r\n\r\nexport function unregister() {\r\n if (\"serviceWorker\" in navigator) {\r\n navigator.serviceWorker.ready\r\n .then((registration) => {\r\n registration.unregister();\r\n })\r\n .catch((error) => {\r\n console.error(error.message);\r\n });\r\n }\r\n}\r\n","import { MapTileType } from \"./maps/IMap\";\r\n\r\nconst PREF_KEY = \"preferences.map\";\r\n\r\nexport default class PreferenceStorage {\r\n savePreferences(pref: Preferences) {\r\n return localStorage.setItem(PREF_KEY, JSON.stringify(pref));\r\n }\r\n loadPreferences() {\r\n const dataString = localStorage.getItem(PREF_KEY);\r\n if (dataString) {\r\n return JSON.parse(dataString) as Preferences;\r\n }\r\n return null;\r\n }\r\n}\r\n\r\nexport interface Preferences {\r\n isDark: boolean;\r\n map3D: boolean;\r\n mapTileType: MapTileType;\r\n\r\n myClientId: string | null;\r\n followingClientId: string | null;\r\n}","import { ATCStatus, ATCInfo, AircraftStatus, Airport, FlightPlanData, AircraftStatusBrief } from '../Models';\r\n\r\nexport interface IMap {\r\n initialize(divId: string, view: View | undefined, mode: string | null)\r\n deinitialize();\r\n\r\n moveATCMarker(clientId: string, atcStatus: ATCStatus | null, atcInfo: ATCInfo | null)\r\n moveMarker(connectionId: string, aircraftStatus: AircraftStatus, isMe: boolean, isFollowing: boolean, isShowingPlan: boolean, isMoreInfo: boolean, isShowingRoute: boolean)\r\n drawAirports(airports: Airport[])\r\n drawFlightPlans(flightPlans: FlightPlanData[])\r\n focus(location: { longitude: number, latitude: number }, zoom?: number)\r\n cleanUpController(clientId: string)\r\n cleanUpAircraft(clientId: string, isMe: boolean)\r\n addRangeCircle()\r\n removeRangeCircle()\r\n setTileLayer(type: MapTileType)\r\n getCurrentView(): View\r\n\r\n onViewChanged(handler: OnViewChangedFn);\r\n onTeleportPositionSelected(handler: OnTeleportPositionSelectedFn);\r\n onSetMe(handler: OnSetOptionalClientIdFn);\r\n onSetFollow(handler: OnSetOptionalClientIdFn);\r\n onSetShowPlan(handler: OnSetOptionalClientIdFn);\r\n onSetShowInfo(handler: OnSetClientIdFn);\r\n onSetShowRoute(handler: OnSetClientIdFn);\r\n\r\n track(id: string, status: AircraftStatus);\r\n prependTrack(id: string, route: AircraftStatusBrief[]);\r\n clearTrack(id: string);\r\n\r\n changeMode(dark: boolean);\r\n\r\n startDrawing();\r\n startTeleporting();\r\n}\r\n\r\nexport type OnViewChangedFn = (view: View) => void;\r\n\r\nexport interface View {\r\n latitude: number | null\r\n longitude: number | null\r\n zoom?: number\r\n scaling?: number\r\n}\r\n\r\nexport type OnTeleportPositionSelectedFn = (position: MapPosition) => void;\r\n\r\nexport interface MapPosition {\r\n latitude: number, longitude: number\r\n}\r\n\r\nexport type OnSetOptionalClientIdFn = (clientId: string | null) => void;\r\nexport type OnSetClientIdFn = (clientId: string) => void;\r\n\r\nexport enum MapTileType {\r\n OpenStreetMap,\r\n OpenTopoMap,\r\n EsriWorldImagery,\r\n EsriTopo,\r\n Carto,\r\n UsVfrSectional,\r\n}\r\n\r\nexport enum MapDimension {\r\n _2D = \"2D\",\r\n _3D = \"3D\"\r\n}\r\n\r\nexport enum MapMode {\r\n MSFS = \"MSFS\",\r\n none = \"none\",\r\n}","const isObject = value => typeof value === 'object' && value !== null;\r\n\r\nconst compareObjects = (A, B) => {\r\n const keysA = Object.keys(A);\r\n const keysB = Object.keys(B);\r\n\r\n if (keysA.length !== keysB.length) {\r\n return false;\r\n }\r\n\r\n return !keysA.some(key => !B.hasOwnProperty(key) || A[key] !== B[key]);\r\n};\r\n\r\nconst shallowEqual = (A, B) => {\r\n if (A === B) {\r\n return true;\r\n }\r\n\r\n if ([A, B].every(Number.isNaN)) {\r\n return true;\r\n }\r\n\r\n if (![A, B].every(isObject)) {\r\n return false;\r\n }\r\n\r\n return compareObjects(A, B);\r\n};\r\n\r\nexport const deepEqual = (A, B) => {\r\n if (A === B) {\r\n return true;\r\n }\r\n\r\n if ([A, B].every(Number.isNaN)) {\r\n return true;\r\n }\r\n\r\n if ([A, B].every(isObject)) {\r\n const keysA = Object.keys(A);\r\n const keysB = Object.keys(B);\r\n\r\n if (keysA.length === keysB.length) {\r\n return keysA.every(prop => B.hasOwnProperty(prop) && deepEqual(A[prop], B[prop]));\r\n }\r\n }\r\n\r\n return false;\r\n};\r\n\r\nexport const propsShallowEqual = (A, B) =>\r\n Object.keys(A).every(prop => shallowEqual(A[prop], B[prop]));","import * as React from 'react';\r\nimport styled from 'styled-components';\r\n\r\ninterface Props {\r\n clientId: string;\r\n\r\n callsign: string;\r\n onAircraftClick: (clientId: string) => void;\r\n\r\n isReady: boolean;\r\n\r\n isMe: boolean;\r\n isFollowing: boolean;\r\n isFlightPlan: boolean;\r\n\r\n isShowPath: boolean;\r\n onShowPathChanged: (clientId: string) => void;\r\n isMoreInfo: boolean;\r\n onMoreInfoChanged: (clientId: string) => void;\r\n}\r\n\r\nexport default class AircraftListItem extends React.Component {\r\n static displayName = AircraftListItem.name;\r\n\r\n constructor(props: Props) {\r\n super(props);\r\n\r\n this.handleAircraftClick = this.handleAircraftClick.bind(this);\r\n this.handleShowPathChanged = this.handleShowPathChanged.bind(this);\r\n this.handleMoreInfoChanged = this.handleMoreInfoChanged.bind(this);\r\n }\r\n\r\n handleAircraftClick() {\r\n this.props.onAircraftClick(this.props.clientId)\r\n }\r\n\r\n handleShowPathChanged() {\r\n this.props.onShowPathChanged(this.props.clientId);\r\n }\r\n\r\n handleMoreInfoChanged() {\r\n this.props.onMoreInfoChanged(this.props.clientId);\r\n }\r\n\r\n public render() {\r\n return \r\n \r\n \r\n \r\n \r\n \r\n ;\r\n }\r\n}\r\n\r\nconst ListItem = styled.tr`\r\nbutton {\r\ndisplay: block;\r\nfont-weight: bold;\r\nwidth: 100%;\r\n}\r\ntd {\r\ntext-align: center;\r\n}\r\n`\r\n\r\nconst Checkbox = styled.input`\r\ntext-align: center;\r\n`","import * as React from 'react';\r\nimport { Button, UncontrolledTooltip, Modal, ModalHeader, ModalBody } from 'reactstrap';\r\nimport styled from 'styled-components';\r\nimport { deepEqual } from '../Compare';\r\nimport AircraftListItem from './AircraftListItem';\r\n\r\nexport interface AircraftStatusInList {\r\n callsign: string;\r\n group: string | null;\r\n isReady: boolean;\r\n}\r\n\r\ninterface Props {\r\n group: string | null;\r\n myClientId: string | null;\r\n followingClientId: string | null;\r\n flightPlanClientId: string | null;\r\n\r\n aircrafts: { [clientId: string]: AircraftStatusInList };\r\n onAircraftClick: (clientId: string) => void;\r\n\r\n showRouteClientIds: string[];\r\n onShowRouteChanged: (clientId: string) => void;\r\n\r\n moreInfoClientIds: string[];\r\n onMoreInfoChanged: (clientId: string) => void;\r\n}\r\n\r\ninterface State {\r\n collapsed: boolean;\r\n}\r\n\r\nexport default class AircraftList extends React.Component {\r\n static displayName = AircraftList.name;\r\n\r\n constructor(props: Props) {\r\n super(props);\r\n\r\n this.state = {\r\n collapsed: false\r\n }\r\n\r\n this.handleToggle = this.handleToggle.bind(this);\r\n }\r\n\r\n shouldComponentUpdate(nextProps, nextState) {\r\n return this.state !== nextState || !deepEqual(this.props, nextProps);\r\n }\r\n\r\n handleToggle() {\r\n this.setState({\r\n collapsed: !this.state.collapsed\r\n })\r\n }\r\n\r\n renderAircrafList(clientIds: string[]) {\r\n if (this.props.myClientId && clientIds.includes(this.props.myClientId)) {\r\n // Move own aircraft to the top\r\n clientIds = clientIds.filter(o => o !== this.props.myClientId);\r\n clientIds = [this.props.myClientId].concat(clientIds);\r\n }\r\n return clientIds.length === 0 ?\r\n None :\r\n clientIds.map(clientId => (\r\n ));\r\n }\r\n\r\n public render() {\r\n let groupClientIds = this.props.group ? Object\r\n .entries(this.props.aircrafts)\r\n .filter(o => o[1].group === this.props.group)\r\n .sort((a, b) => (a[1].callsign || a[0].substring(5)).localeCompare((b[1].callsign || b[0].substring(5))))\r\n .map(o => o[0]) : [];\r\n\r\n let clientIds = Object\r\n .entries(this.props.aircrafts)\r\n .filter(o => !this.props.group || o[1].group !== this.props.group)\r\n .sort((a, b) => (a[1].callsign || a[0].substring(5)).localeCompare((b[1].callsign || b[0].substring(5))))\r\n .map(o => o[0]);\r\n\r\n const aircraftCount = this.props.group ? groupClientIds.length : clientIds.length;\r\n const buttonTitle = `Aircraft${(this.props.group ? '*' : '')} ${(aircraftCount ? `(${aircraftCount})` : '')}`;\r\n\r\n return <>\r\n {buttonTitle}\r\n \r\n \r\n Aircraft List {(clientIds.length === 0 ? \"\" : `(${clientIds.length})`)}\r\n \r\n \r\n {!!this.props.group && (\r\n <>\r\n
Selected Group: {this.props.group}
\r\n\r\n \r\n \r\n \r\n Callsign\r\n \r\n
Show Info
\r\n Show more info\r\n \r\n \r\n
Show Route
\r\n Show flight route\r\n \r\n \r\n \r\n \r\n {this.renderAircrafList(groupClientIds)}\r\n \r\n
\r\n\r\n
\r\n
Other aircraft
\r\n \r\n )}\r\n \r\n \r\n \r\n Callsign\r\n \r\n
Show Info
\r\n Show more info\r\n \r\n \r\n
Show Route
\r\n Show flight route\r\n \r\n \r\n \r\n \r\n {this.renderAircrafList(clientIds)}\r\n \r\n
\r\n
\r\n
\r\n \r\n }\r\n}\r\n\r\nconst StyledButton = styled(Button)`\r\nposition: fixed;\r\ntop: 10px;\r\nright: 150px;\r\nwidth: 130px;\r\nz-index: 1000;\r\n`\r\n\r\nconst Title = styled.div`\r\nmargin-left: 8px;\r\nmargin-right: 8px;\r\nfont-weight: bold;\r\nfont-style: italic;\r\ntext-align: center;\r\n`\r\n\r\nconst NoneText = styled.div`\r\nmargin: 0 8px 10px 8px;\r\n`\r\n\r\nconst List = styled.table`\r\nmargin-top: 10px;\r\nmargin-right: 5px;\r\nmargin-left: 8px;\r\nlist-style: none;\r\npadding: 0;\r\n\r\nth div {\r\nmin-width: 20px;\r\ntext-align: center;\r\n}\r\n`","import * as React from 'react';\r\nimport styled from 'styled-components';\r\nimport { Button, Modal, ModalHeader, ModalBody } from 'reactstrap';\r\nimport { ATCStatus, ATCInfo } from '../Models';\r\n\r\ninterface Props {\r\n controllers: { [clientId: string]: ATCInfo & ATCStatus };\r\n onControllerClick: (clientId: string) => void;\r\n}\r\n\r\ninterface State {\r\n collapsed: boolean;\r\n}\r\n\r\nconst ControllerList = (props: Props) => {\r\n const [state, setState] = React.useState({ collapsed: false });\r\n const handleToggle = () => {\r\n setState({\r\n collapsed: !state.collapsed\r\n })\r\n };\r\n\r\n let clientIds = Object\r\n .entries(props.controllers)\r\n .sort((a, b) => (a[1].callsign || a[0].substring(5)).localeCompare((b[1].callsign || b[0].substring(5))))\r\n .map(o => o[0]);\r\n\r\n if (clientIds.length === 0) return null;\r\n\r\n const list = clientIds.length === 0 ?\r\n None :\r\n clientIds.map(clientId => (\r\n \r\n \r\n \r\n \r\n ));\r\n\r\n return <>\r\n Controllers ({clientIds.length})\r\n \r\n \r\n Controller List {(clientIds.length === 0 ? \"\" : `(${clientIds.length})`)}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {list}\r\n \r\n
Callsign
\r\n
\r\n
\r\n \r\n}\r\n\r\nconst StyledButton = styled(Button)`\r\nposition: fixed;\r\ntop: 10px;\r\nright: 290px;\r\nwidth: 130px;\r\nz-index: 1000;\r\n`\r\n\r\nexport default React.memo(ControllerList);","import * as React from 'react';\r\nimport styled from 'styled-components';\r\nimport { FlightPlan } from '../Models';\r\nimport { gql, useQuery } from '@apollo/client';\r\n\r\nconst Header = styled.h5`\r\nmargin-top: 12px;\r\n`;\r\n\r\nconst FlightPlanComponent = (props: {\r\n id: string,\r\n onFlightPlansLoaded: (flightPlans: FlightPlan[]) => void;\r\n hideList?: boolean;\r\n}) => {\r\n const { loading, error, data } = useQuery<{ flightEvent: { flightPlans: FlightPlan[] } }>(gql`query GetFlightPlans($id: UUID!) {\r\n flightEvent(id: $id) {\r\n id\r\n flightPlans {\r\n id\r\n downloadUrl\r\n data {\r\n title\r\n description\r\n cruisingAltitude\r\n type\r\n routeType\r\n departure {\r\n id\r\n name\r\n latitude\r\n longitude\r\n }\r\n destination {\r\n id\r\n name\r\n latitude\r\n longitude\r\n }\r\n waypoints {\r\n id\r\n airway\r\n type\r\n latitude\r\n longitude\r\n icao {\r\n ident\r\n airport\r\n region\r\n }\r\n }\r\n }\r\n }\r\n }\r\n}`, { variables: { id: props.id } });\r\n\r\n const onFlightPlansLoaded = props.onFlightPlansLoaded;\r\n React.useEffect(() => {\r\n if (!loading && !error && data) {\r\n onFlightPlansLoaded(data.flightEvent.flightPlans);\r\n }\r\n }, [loading, error, data, onFlightPlansLoaded]);\r\n\r\n if (loading) return
Checking flight plan...
;\r\n if (error || !data) return
Cannot load flight plan!
;\r\n\r\n const flightPlans = data.flightEvent.flightPlans;\r\n\r\n if (props.hideList) {\r\n return null;\r\n }\r\n\r\n return <>\r\n
Flight Plans
\r\n {flightPlans.length === 0 ?\r\n

No flight plan is available for this event.

:\r\n \r\n }\r\n ;\r\n}\r\n\r\nexport default FlightPlanComponent;","import * as React from 'react';\r\nimport { Query } from '@apollo/client/react/components';\r\nimport { ApolloQueryResult, gql } from '@apollo/client';\r\nimport { Airport, FlightEvent, FlightPlan } from '../Models';\r\nimport FlightPlanComponent from './FlightPlanComponent';\r\n\r\ninterface FlightPlanLoaderProps {\r\n eventId: string;\r\n\r\n onAirportsLoaded: (airports: Airport[]) => void;\r\n onFlightPlansLoaded: (flightPlans: FlightPlan[]) => void;\r\n}\r\n\r\nconst FlightPlanLoader = (props: FlightPlanLoaderProps) => {\r\n return <>\r\n {({ loading, error, data }: ApolloQueryResult<{ flightEvent: FlightEvent }>) => {\r\n if (loading) return <>Loading...\r\n if (error) return <>Error!\r\n\r\n const event = data.flightEvent;\r\n\r\n return <>\r\n {!!event.waypoints && {({ loading, error, data }: ApolloQueryResult<{ airports: Airport[] }>) => {\r\n if (!loading && !error && data) props.onAirportsLoaded(data.airports);\r\n return null;\r\n }}}\r\n \r\n ;\r\n }}\r\n \r\n}\r\n\r\nexport default FlightPlanLoader;","import { IMap, MapTileType, OnViewChangedFn, View, OnTeleportPositionSelectedFn, OnSetClientIdFn, OnSetOptionalClientIdFn } from './IMap';\r\nimport * as L from 'leaflet';\r\nimport LG from 'leaflet-geometryutil'\r\nimport 'leaflet-rotatedmarker';\r\nimport 'overpass-layer';\r\nimport 'leaflet-contextmenu';\r\nimport 'leaflet-contextmenu/dist/leaflet.contextmenu.css';\r\nimport { AircraftStatus, Airport, FlightPlanData, ATCStatus, ATCInfo, AircraftStatusBrief } from '../Models';\r\n\r\ninterface Markers {\r\n aircraft: L.Marker\r\n info: L.Marker\r\n}\r\n\r\nconst ROUTE_AIR_COLOR = 'blue';\r\nconst ROUTE_GROUND_COLOR = 'brown';\r\n\r\n// Augment types of leaflet-contextmenu\r\ndeclare module 'leaflet' {\r\n interface MapOptions {\r\n contextmenu: boolean;\r\n contextmenuWidth: number;\r\n contextmenuItems: (string | ContextMenuItem)[]\r\n }\r\n\r\n interface ContextMenuItem {\r\n text: string;\r\n icon?: string;\r\n callback?: (ContextMenuEventArgs) => void;\r\n }\r\n\r\n interface ContextMenuEventArgs {\r\n containerPoint: L.Point;\r\n latlng: L.LatLng;\r\n layerPoint: L.Point;\r\n }\r\n}\r\n\r\nexport default class LeafletMap implements IMap {\r\n mymap?: L.Map;\r\n\r\n baseLayerGroup: L.LayerGroup = L.layerGroup();\r\n airportLayerGroup: L.LayerGroup = L.layerGroup();\r\n airportMarkers: { [indent: string]: L.Marker } = {};\r\n\r\n markers: { [connectionId: string]: Markers } = {};\r\n atcMarkers: { [connectionId: string]: L.Marker } = {};\r\n\r\n flightPlanLayerGroup: L.LayerGroup = L.layerGroup();\r\n\r\n routeLayerGroups: { [id: string]: L.LayerGroup } = {};\r\n routeLines: { [id: string]: L.Polyline } = {};\r\n trackingStatuses: { [id: string]: AircraftStatusBrief } = {};\r\n\r\n circleMarker?: L.Circle;\r\n\r\n onViewChangedHandler: (OnViewChangedFn | null) = null;\r\n onTeleportPositionSelectedHandler: (OnTeleportPositionSelectedFn | null) = null;\r\n onSetMeHandler: (OnSetOptionalClientIdFn | null) = null;\r\n onSetFollowHandler: (OnSetOptionalClientIdFn | null) = null;\r\n onSetShowPlanHandler: (OnSetOptionalClientIdFn | null) = null;\r\n onSetShowInfoHandler: (OnSetClientIdFn | null) = null;\r\n onSetShowRouteHandler: (OnSetClientIdFn | null) = null;\r\n\r\n initialView?: View;\r\n lastView?: View;\r\n\r\n isDark: boolean = false;\r\n isDrawing = false;\r\n isTeleporting = false;\r\n\r\n measurement: L.Polyline | null = null;\r\n\r\n public initialize(divId: string, view: View | undefined, mode: string | null) {\r\n const map = this.mymap =\r\n L.map(divId, {\r\n attributionControl: false,\r\n contextmenu: true,\r\n contextmenuWidth: 140,\r\n contextmenuItems: [{\r\n text: 'Teleport aircraft here',\r\n callback: this.moveAircraft.bind(this)\r\n }]\r\n })\r\n .setView([view?.latitude || 51.505, view?.longitude || -0.09], view?.zoom || 13);\r\n this.initialView = this.lastView = view;\r\n\r\n L.control.attribution({\r\n position: 'bottomleft'\r\n }).addTo(map);\r\n if (mode === 'none') map.removeControl(map.zoomControl);\r\n\r\n this.mymap.on('moveend', (e) => {\r\n const zoom = map.getZoom();\r\n const center = map.getCenter();\r\n\r\n // HACK: due to this issue https://github.com/Leaflet/Leaflet/issues/3796, getCenter does not always work\r\n // We cache the last view for now\r\n this.lastView = { latitude: center.lat, longitude: center.lng, zoom: zoom };\r\n\r\n if (this.onViewChangedHandler) {\r\n this.onViewChangedHandler(this.lastView);\r\n }\r\n });\r\n\r\n this.mymap.on('mousedown', (e: L.LeafletMouseEvent) => {\r\n if (this.mymap && this.isDrawing) {\r\n this.measurement = L.polyline([e.latlng, e.latlng]).addTo(this.mymap);\r\n }\r\n });\r\n this.mymap.on('mousemove', (e: L.LeafletMouseEvent) => {\r\n if (this.isDrawing && this.measurement) {\r\n let latlng = this.measurement.getLatLngs() as L.LatLng[];\r\n latlng[1] = e.latlng;\r\n this.measurement.setLatLngs(latlng);\r\n }\r\n });\r\n this.mymap.on('mouseup', (e: L.LeafletMouseEvent) => {\r\n if (this.isDrawing) {\r\n this.stopDrawing();\r\n } else if (this.isTeleporting) {\r\n this.moveAircraft(e);\r\n this.isTeleporting = false;\r\n }\r\n });\r\n\r\n this.baseLayerGroup.addTo(this.mymap);\r\n\r\n //L.OverPassLayer({\r\n // 'query': '[out:json][timeout:25];(way[\"aeroway\"=\"taxiway\"]({{bbox}}););out body;>;out skel qt;'\r\n //}).addTo(this.mymap);\r\n var overpassFrontend = new (window as any).OverpassFrontend('//overpass-api.de/api/interpreter')\r\n\r\n new (window as any).OverpassLayer({\r\n query: '(way[aeroway=runway];)',\r\n minZoom: 14,\r\n overpassFrontend: overpassFrontend,\r\n feature: {\r\n markerSymbol: (o: any) => {\r\n return o.tags.ref ? `${o.tags.ref}` : null;\r\n },\r\n style: {\r\n stroke: true,\r\n width: 1\r\n }\r\n }\r\n }).addTo(this.mymap);\r\n new (window as any).OverpassLayer({\r\n query: '(way[aeroway=taxiway];way[aeroway=taxilane];way[aeroway=parking_position];)',\r\n minZoom: 15,\r\n overpassFrontend: overpassFrontend,\r\n feature: {\r\n markerSymbol: (o: any) => {\r\n return o.tags.ref ? `${o.tags.ref}` : null;\r\n },\r\n style: {\r\n width: 2,\r\n color: '#0CBBC9'\r\n }\r\n }\r\n }).addTo(this.mymap);\r\n\r\n this.airportLayerGroup.addTo(this.mymap);\r\n this.flightPlanLayerGroup.addTo(this.mymap);\r\n\r\n this.drawOshkoshCircles();\r\n }\r\n\r\n public deinitialize() {\r\n this.onViewChangedHandler = null;\r\n this.mymap?.remove();\r\n }\r\n\r\n public startTeleporting() {\r\n const map = this.mymap;\r\n if (map) {\r\n map.dragging.disable();\r\n map.getContainer().classList.add(\"crosshair\");\r\n this.isTeleporting = true;\r\n }\r\n }\r\n\r\n public startDrawing() {\r\n const map = this.mymap;\r\n if (map) {\r\n map.dragging.disable();\r\n map.getContainer().classList.add(\"crosshair\");\r\n this.measurement = null;\r\n this.isDrawing = true;\r\n }\r\n }\r\n\r\n public stopDrawing() {\r\n const map = this.mymap;\r\n if (map && this.isDrawing && this.measurement) {\r\n map.getContainer().classList.remove(\"crosshair\");\r\n map.dragging.enable();\r\n this.isDrawing = false;\r\n\r\n const latlng = this.measurement.getLatLngs() as L.LatLng[];\r\n const nm = map.distance(latlng[0], latlng[1]) / 1852;\r\n const bearing = LG.bearing(latlng[0], latlng[1]);\r\n\r\n L.marker([(latlng[0].lat + latlng[1].lat) / 2, (latlng[0].lng + latlng[1].lng) / 2], {\r\n icon: L.divIcon({ html: `${nm.toFixed(1)}nm
${((bearing + 360) % 360).toFixed(0)}°`, className: 'measurement-label' })\r\n }).addTo(map);\r\n }\r\n }\r\n\r\n public changeMode(dark: boolean) {\r\n this.isDark = dark;\r\n }\r\n\r\n public setTileLayer(type: MapTileType) {\r\n this.baseLayerGroup.clearLayers();\r\n\r\n const tileSize = !!this.initialView?.scaling ? this.initialView.scaling * 256 : undefined;\r\n const zoomOffset = !!this.initialView?.scaling ? -(this.initialView.scaling - 1) : undefined;\r\n const additionalAttributes = (tileSize && zoomOffset) ? { tileSize, zoomOffset } : {};\r\n\r\n switch (type) {\r\n case MapTileType.OpenStreetMap:\r\n this.baseLayerGroup.addLayer(L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {\r\n maxZoom: 19,\r\n attribution: '© OpenStreetMap contributors',\r\n ...additionalAttributes\r\n }));\r\n break;\r\n case MapTileType.OpenTopoMap:\r\n this.baseLayerGroup.addLayer(L.tileLayer('https://{s}.tile.opentopomap.org/{z}/{x}/{y}.png', {\r\n maxZoom: 17,\r\n attribution: 'Map data: © OpenStreetMap contributors, SRTM | Map style: © OpenTopoMap (CC-BY-SA)',\r\n ...additionalAttributes\r\n }));\r\n break;\r\n case MapTileType.EsriWorldImagery:\r\n this.baseLayerGroup.addLayer(L.tileLayer('https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}', {\r\n attribution: 'Tiles © Esri — Source: Esri, i-cubed, USDA, USGS, AEX, GeoEye, Getmapping, Aerogrid, IGN, IGP, UPR-EGP, and the GIS User Community'\r\n }));\r\n break;\r\n case MapTileType.EsriTopo:\r\n this.baseLayerGroup.addLayer(L.tileLayer('https://server.arcgisonline.com/ArcGIS/rest/services/World_Topo_Map/MapServer/tile/{z}/{y}/{x}', {\r\n attribution: 'Tiles © Esri — Esri, DeLorme, NAVTEQ, TomTom, Intermap, iPC, USGS, FAO, NPS, NRCAN, GeoBase, Kadaster NL, Ordnance Survey, Esri Japan, METI, Esri China (Hong Kong), and the GIS User Community',\r\n ...additionalAttributes\r\n }));\r\n break;\r\n case MapTileType.UsVfrSectional:\r\n this.baseLayerGroup.addLayer(L.tileLayer('https://wms.chartbundle.com/tms/v1.0/sec/{z}/{x}/{y}.png?type=google', {\r\n maxZoom: 12,\r\n attribution: 'Map data: © Federal Aviation Administration (FAA), ChartBundle.com'\r\n }));\r\n break;\r\n }\r\n }\r\n\r\n public moveATCMarker(clientId: string, status: ATCStatus | null, info: ATCInfo | null) {\r\n if (status && info && this.mymap) {\r\n const latlng: L.LatLngExpression = [status.latitude, status.longitude];\r\n\r\n const marker = this.atcMarkers[clientId];\r\n if (marker) {\r\n // Existing marker\r\n marker\r\n .bindPopup(`${info.callsign} [${(status.frequencyCom / 1000)}]
Name: ${info.realName}
Certificate: ${info.certificate}`)\r\n .setLatLng(latlng);\r\n } else {\r\n this.atcMarkers[clientId] = L.marker(latlng, {\r\n icon: L.icon({\r\n iconUrl: 'marker-tower.png',\r\n iconSize: [30, 30],\r\n iconAnchor: [15, 15],\r\n }),\r\n zIndexOffset: 2000\r\n })\r\n .bindPopup(`${info.callsign} [${(status.frequencyCom / 1000)}]
Name: ${info.realName}
Certificate: ${info.certificate}`)\r\n .addTo(this.mymap);\r\n }\r\n } else {\r\n // Remove\r\n this.cleanUpController(clientId);\r\n }\r\n }\r\n\r\n public moveMarker(connectionId: string, aircraftStatus: AircraftStatus, isMe: boolean, isFollowing: boolean, isShowingPlan: boolean, isMoreInfo: boolean, isShowingRoute: boolean) {\r\n if (!this.mymap) return;\r\n\r\n const iconSize = 12\r\n const infoBoxWidth = 100\r\n\r\n let latlng: L.LatLngExpression = [aircraftStatus.latitude, aircraftStatus.longitude];\r\n\r\n let markers = this.markers[connectionId];\r\n if (markers) {\r\n // Existing marker\r\n\r\n markers.aircraft.setLatLng(latlng);\r\n markers.info.setLatLng(latlng);\r\n\r\n let className = 'divicon-aircraft-info';\r\n if (isMe) className += \" me\";\r\n if (this.isDark) className += \" dark\";\r\n\r\n let iconSizeValue: L.PointExpression = [iconSize, 60];\r\n\r\n if (isMoreInfo) {\r\n let htmlBody = `
${aircraftStatus.callsign}
ALT ${Math.round(aircraftStatus.altitude)} ft
HDG ${Math.round(aircraftStatus.heading)}\\u00B0
IAS ${Math.round(aircraftStatus.indicatedAirSpeed)} kts
GS ${Math.round(aircraftStatus.groundSpeed)} kts
`\r\n\r\n if (aircraftStatus.trueHeading >= 180) {\r\n markers.info.setIcon(L.divIcon({\r\n className: className,\r\n html: htmlBody,\r\n iconSize: iconSizeValue,\r\n iconAnchor: [-iconSize, 10],\r\n }))\r\n } else {\r\n markers.info.setIcon(L.divIcon({\r\n className: className,\r\n html: htmlBody,\r\n iconSize: iconSizeValue,\r\n iconAnchor: [infoBoxWidth + iconSize, 10],\r\n }))\r\n }\r\n } else {\r\n if (aircraftStatus.trueHeading >= 180) {\r\n markers.info.setIcon(L.divIcon({\r\n className: className,\r\n html: `
${aircraftStatus.callsign}
`,\r\n iconSize: iconSizeValue,\r\n iconAnchor: [-iconSize, 10],\r\n }))\r\n } else {\r\n markers.info.setIcon(L.divIcon({\r\n className: className + ' right',\r\n html: `
${aircraftStatus.callsign}
`,\r\n iconSize: iconSizeValue,\r\n iconAnchor: [infoBoxWidth + iconSize, 10],\r\n }))\r\n }\r\n }\r\n } else {\r\n const aircraft = L.marker(latlng, {\r\n icon: L.icon({\r\n className: 'icon-aircraft-marker',\r\n iconUrl: 'marker-aircraft.png',\r\n iconSize: [10, 30],\r\n iconAnchor: [5, 25],\r\n }),\r\n zIndexOffset: 2000\r\n }).addTo(this.mymap);\r\n const info = L.marker(latlng, {\r\n icon: L.divIcon({\r\n className: 'divicon-aircraft-info',\r\n html: `
${aircraftStatus.callsign}
`,\r\n iconSize: [iconSize, 50],\r\n iconAnchor: [-iconSize, -4],\r\n }),\r\n zIndexOffset: 1000\r\n }).addTo(this.mymap)\r\n markers = {\r\n aircraft: aircraft,\r\n info: info\r\n }\r\n this.markers[connectionId] = markers;\r\n }\r\n\r\n const popupDiv = L.DomUtil.create('div');\r\n let popup = `Altitude: ${Math.floor(aircraftStatus.altitude)}
Airspeed: ${Math.floor(aircraftStatus.indicatedAirSpeed)}
`;\r\n if (aircraftStatus.callsign) {\r\n popup = `${aircraftStatus.callsign}
${popup}`;\r\n }\r\n popupDiv.innerHTML = popup;\r\n\r\n const popupBtnGroup = L.DomUtil.create('div', 'btn-group-vertical');\r\n popupDiv.appendChild(popupBtnGroup);\r\n\r\n const setMeButton = this.createToggleButton(popupBtnGroup, 'My aircraft', isMe);\r\n const setFollowButton = this.createToggleButton(popupBtnGroup, 'Follow', isFollowing);\r\n const setFlightPlanButton = this.createToggleButton(popupBtnGroup, 'Show Plan', isShowingPlan);\r\n const setShowInfoButton = this.createToggleButton(popupBtnGroup, 'Show Info', isMoreInfo);\r\n const setShowRouteButton = this.createToggleButton(popupBtnGroup, 'Show Route', isShowingRoute);\r\n\r\n L.DomEvent.on(setMeButton, 'click', () => { this.onSetMeHandler && this.onSetMeHandler(isMe ? null : connectionId); this.mymap?.closePopup(); });\r\n L.DomEvent.on(setFollowButton, 'click', () => { this.onSetFollowHandler && this.onSetFollowHandler(isFollowing ? null : connectionId); this.mymap?.closePopup(); });\r\n L.DomEvent.on(setFlightPlanButton, 'click', () => { this.onSetShowPlanHandler && this.onSetShowPlanHandler(isShowingPlan ? null : connectionId); this.mymap?.closePopup(); });\r\n L.DomEvent.on(setShowInfoButton, 'click', () => { this.onSetShowInfoHandler && this.onSetShowInfoHandler(connectionId); this.mymap?.closePopup(); });\r\n L.DomEvent.on(setShowRouteButton, 'click', () => { this.onSetShowRouteHandler && this.onSetShowRouteHandler(connectionId); this.mymap?.closePopup(); });\r\n\r\n markers.info.bindPopup(popupDiv, {\r\n autoPan: false\r\n });\r\n markers.info.setIcon(markers.info.getIcon());\r\n markers.aircraft\r\n .bindPopup(popupDiv)\r\n .setRotationAngle(aircraftStatus.trueHeading);\r\n\r\n if (this.circleMarker && isMe) {\r\n this.circleMarker.setLatLng(latlng);\r\n }\r\n }\r\n\r\n public drawAirports(airports: Airport[]) {\r\n if (this.mymap) {\r\n const minLongitude = airports.reduce((prev, curr) => Math.min(prev, curr.longitude), 180);\r\n const maxLongitude = airports.reduce((prev, curr) => Math.max(prev, curr.longitude), -180);\r\n const minLatitude = airports.reduce((prev, curr) => Math.min(prev, curr.latitude), 90);\r\n const maxLatitude = airports.reduce((prev, curr) => Math.max(prev, curr.latitude), -90);\r\n\r\n this.mymap.fitBounds([[minLatitude, minLongitude], [maxLatitude, maxLongitude]]);\r\n\r\n for (let ident in this.airportMarkers) {\r\n this.airportMarkers[ident].removeFrom(this.mymap);\r\n }\r\n\r\n this.airportMarkers = {};\r\n\r\n for (let airport of airports) {\r\n const marker = L.marker([airport.latitude, airport.longitude], {\r\n title: airport.name\r\n }).addTo(this.mymap);\r\n this.airportMarkers[airport.ident] = marker;\r\n }\r\n }\r\n }\r\n\r\n public drawFlightPlans(flightPlans: FlightPlanData[]) {\r\n if (this.mymap) {\r\n this.flightPlanLayerGroup.clearLayers();\r\n\r\n let index = 0;\r\n const colors = ['red', 'blue'];\r\n\r\n let over180Line = false;\r\n\r\n for (var flightPlan of flightPlans) {\r\n let latlngArray: L.LatLngTuple[] = [];\r\n\r\n if (flightPlan.waypoints) {\r\n for (let i = 0; i < flightPlan.waypoints.length; i++) {\r\n const waypoint = flightPlan.waypoints[i];\r\n const latlng: L.LatLngTuple = [waypoint.latitude, waypoint.longitude];\r\n\r\n if (i === 0 || 180 > Math.abs(waypoint.longitude - flightPlan.waypoints[i - 1].longitude)) {\r\n latlngArray.push(latlng);\r\n }\r\n else {\r\n // If the path take more than half the earth, draw the other half\r\n over180Line = true;\r\n\r\n const prevWaypoint = flightPlan.waypoints[i - 1];\r\n\r\n let distance180 = 180 - prevWaypoint.longitude;\r\n let differenceLng = (360 - prevWaypoint.longitude) + waypoint.longitude;\r\n let line180 = 180;\r\n if (prevWaypoint.longitude < 0) {\r\n distance180 = -180 - prevWaypoint.longitude;\r\n differenceLng = (-360 - prevWaypoint.longitude) + waypoint.longitude;\r\n line180 = -180;\r\n }\r\n\r\n const differenceLat = ((waypoint.latitude + 90) - (prevWaypoint.latitude + 90)) / differenceLng;\r\n\r\n latlngArray.push([prevWaypoint.latitude + differenceLat * distance180, line180]);\r\n\r\n // Break new line\r\n const polyline = L.polyline(latlngArray, { color: colors[(index % colors.length)] });\r\n this.flightPlanLayerGroup.addLayer(polyline);\r\n\r\n latlngArray = [\r\n [prevWaypoint.latitude + differenceLat * distance180, -line180],\r\n latlng\r\n ];\r\n }\r\n\r\n if (i === flightPlan.waypoints.length - 1) {\r\n // Last item\r\n const polyline = L.polyline(latlngArray, { color: colors[(index % colors.length)] });\r\n this.flightPlanLayerGroup.addLayer(polyline);\r\n }\r\n }\r\n index++;\r\n for (let waypoint of flightPlan.waypoints) {\r\n const marker = L.marker([waypoint.latitude, waypoint.longitude], {\r\n title: waypoint.id,\r\n icon: L.divIcon({\r\n className: 'divicon-waypoint',\r\n html: !!waypoint.id ? `
${waypoint.id}
` : '',\r\n iconSize: [8, 8],\r\n iconAnchor: [4, 4],\r\n })\r\n\r\n });\r\n this.flightPlanLayerGroup.addLayer(marker);\r\n }\r\n }\r\n }\r\n\r\n if (over180Line) {\r\n // Draw some dotted line to indicate that the flight plan wrap around\r\n const latlngNegative180: L.LatLngTuple[] = [\r\n [90, -180],\r\n [-90, -180]\r\n ];\r\n const latlngPositive180: L.LatLngTuple[] = [\r\n [90, 180],\r\n [-90, 180]\r\n ];\r\n\r\n const polyline0 = L.polyline(latlngNegative180, { color: 'black', dashArray: '5, 10' });\r\n this.flightPlanLayerGroup.addLayer(polyline0);\r\n const polyline1 = L.polyline(latlngPositive180, { color: 'black', dashArray: '5, 10' });\r\n this.flightPlanLayerGroup.addLayer(polyline1);\r\n }\r\n\r\n }\r\n }\r\n\r\n public focus(location: { longitude: number, latitude: number }, zoom?: number) {\r\n if (this.mymap) {\r\n let latlng: L.LatLngExpression = [location.latitude, location.longitude];\r\n this.mymap.setView(latlng, zoom || this.mymap.getZoom());\r\n }\r\n }\r\n\r\n public cleanUpController(clientId: string) {\r\n const marker = this.atcMarkers[clientId];\r\n if (marker) {\r\n marker.remove();\r\n delete this.atcMarkers[clientId];\r\n }\r\n }\r\n\r\n public cleanUpAircraft(clientId: string, isMe: boolean) {\r\n const marker = this.markers[clientId];\r\n if (marker) {\r\n delete this.markers[clientId];\r\n\r\n marker.aircraft.remove();\r\n marker.info.remove();\r\n if (isMe) {\r\n this.removeRangeCircle();\r\n }\r\n }\r\n }\r\n\r\n public addRangeCircle() {\r\n if (this.mymap && !this.circleMarker) {\r\n this.circleMarker = L.circle([0, 0], {\r\n radius: 5029,\r\n opacity: 0.5,\r\n fillOpacity: 0,\r\n weight: 2,\r\n color: `black`\r\n }).addTo(this.mymap);\r\n }\r\n }\r\n\r\n public removeRangeCircle() {\r\n if (this.mymap && this.circleMarker) {\r\n this.circleMarker.removeFrom(this.mymap);\r\n this.circleMarker = undefined;\r\n }\r\n }\r\n\r\n public getCurrentView(): View {\r\n // HACK: due to https://github.com/Leaflet/Leaflet/issues/3796, getCenter() doesn't work here\r\n return this.lastView || { longitude: null, latitude: null };\r\n }\r\n\r\n public onViewChanged(handler: OnViewChangedFn) {\r\n this.onViewChangedHandler = handler;\r\n }\r\n\r\n public onTeleportPositionSelected(handler: OnTeleportPositionSelectedFn) {\r\n this.onTeleportPositionSelectedHandler = handler;\r\n }\r\n\r\n public onSetMe(handler: OnSetOptionalClientIdFn) {\r\n this.onSetMeHandler = handler;\r\n }\r\n public onSetFollow(handler: OnSetOptionalClientIdFn) {\r\n this.onSetFollowHandler = handler;\r\n }\r\n public onSetShowPlan(handler: OnSetOptionalClientIdFn) {\r\n this.onSetShowPlanHandler = handler;\r\n }\r\n public onSetShowInfo(handler: OnSetClientIdFn) {\r\n this.onSetShowInfoHandler = handler;\r\n }\r\n public onSetShowRoute(handler: OnSetClientIdFn) {\r\n this.onSetShowRouteHandler = handler;\r\n }\r\n\r\n public track(id: string, status: AircraftStatus) {\r\n if (!this.routeLines[id] || !this.trackingStatuses[id] || this.trackingStatuses[id].isOnGround !== status.isOnGround) {\r\n this.routeLines[id] = this.createRouteLine(id, this.trackingStatuses[id] ? [this.trackingStatuses[id]] : [], status.isOnGround);\r\n }\r\n this.trackingStatuses[id] = status;\r\n\r\n if (status.groundSpeed > 0.05) {\r\n this.routeLines[id].addLatLng([status.latitude, status.longitude]);\r\n }\r\n }\r\n\r\n public prependTrack(id: string, route: AircraftStatusBrief[]) {\r\n let isOnGround: boolean | null = null;\r\n let routeSoFar: AircraftStatusBrief[] = [];\r\n for (let status of route) {\r\n if (isOnGround !== status.isOnGround) {\r\n if (routeSoFar.length > 0 && isOnGround !== null) {\r\n this.createRouteLine(id, routeSoFar, isOnGround);\r\n }\r\n routeSoFar = routeSoFar.length > 0 ? routeSoFar.slice(routeSoFar.length - 1, routeSoFar.length) : [];\r\n isOnGround = status.isOnGround;\r\n }\r\n routeSoFar.push(status);\r\n }\r\n if (routeSoFar.length > 0 && isOnGround !== null) {\r\n this.createRouteLine(id, routeSoFar, isOnGround);\r\n }\r\n }\r\n\r\n private createRouteLine(id: string, route: AircraftStatusBrief[], isOnGround: boolean) {\r\n if (this.mymap && !this.routeLayerGroups[id]) {\r\n this.routeLayerGroups[id] = L.layerGroup().addTo(this.mymap);\r\n }\r\n return L.polyline(route.map(r => [r.latitude, r.longitude]), { color: isOnGround ? ROUTE_GROUND_COLOR : ROUTE_AIR_COLOR }).addTo(this.routeLayerGroups[id]);\r\n }\r\n\r\n public clearTrack(id: string) {\r\n delete this.trackingStatuses[id];\r\n if (this.routeLayerGroups[id]) {\r\n this.routeLayerGroups[id].remove();\r\n delete this.routeLayerGroups[id];\r\n }\r\n delete this.routeLines[id];\r\n }\r\n\r\n private moveAircraft(e: { latlng: L.LatLng }) {\r\n if (this.onTeleportPositionSelectedHandler) {\r\n this.onTeleportPositionSelectedHandler({ latitude: e.latlng.lat, longitude: e.latlng.lng });\r\n }\r\n }\r\n\r\n private createToggleButton(container: HTMLElement, content: string, isToggled: boolean) {\r\n const button = L.DomUtil.create('button', 'btn btn-sm btn-info' + (isToggled ? ' active' : ''), container);\r\n button.innerHTML = content;\r\n button.setAttribute('data-toggle', 'button');\r\n if (isToggled) button.setAttribute('aria-pressed', 'true');\r\n container.appendChild(button);\r\n return button;\r\n }\r\n\r\n private drawOshkoshCircles() {\r\n if (this.mymap) {\r\n const commonStyle = { fill: true, fillOpacity: 1, radius: 12, stroke: false };\r\n L.circle([43.98127188305071, -88.55649845579117], { ...commonStyle, fillColor: \"blue\" }).addTo(this.mymap);\r\n L.circle([43.97694160803118, -88.55654726863388], { ...commonStyle, fillColor: \"red\" }).addTo(this.mymap);\r\n L.circle([43.972867792605214, -88.55660272193413], { ...commonStyle, fillColor: \"yellow\" }).addTo(this.mymap);\r\n L.circle([43.968619800959615, -88.5566557100092], { ...commonStyle, fillColor: \"purple\" }).addTo(this.mymap);\r\n\r\n L.circle([43.991529704426085, -88.5545677074355], { ...commonStyle, fillColor: \"orange\" }).addTo(this.mymap);\r\n L.circle([43.991566231901906, -88.56045717742607], { ...commonStyle, fillColor: \"cyan\" }).addTo(this.mymap);\r\n L.circle([43.99160231883673, -88.56532600272514], { ...commonStyle, fillColor: \"white\" }).addTo(this.mymap);\r\n\r\n const latDiff = 0.00006;\r\n const lngDiff = 0.00008;\r\n L.rectangle([[43.96952516618286 - latDiff, -88.55455903934717 - lngDiff], [43.96952516618286 + latDiff, -88.55455903934717 + lngDiff]], { ...commonStyle, fillColor: \"cyan\" }).addTo(this.mymap);\r\n L.rectangle([[43.97348742641145 - latDiff, -88.55450902110248 - lngDiff], [43.97348742641145 + latDiff, -88.55450902110248 + lngDiff]], { ...commonStyle, fillColor: \"red\" }).addTo(this.mymap);\r\n }\r\n }\r\n}\r\n","import { IMap, MapTileType, OnViewChangedFn, View, OnTeleportPositionSelectedFn, OnSetClientIdFn, OnSetOptionalClientIdFn } from './IMap';\r\nimport * as maptalks from 'maptalks';\r\nimport { AircraftStatus, Airport, FlightPlanData, ATCStatus, ATCInfo, AircraftStatusBrief } from '../Models';\r\n\r\ninterface Markers {\r\n aircraft: Sector\r\n aircraftLine: Marker\r\n info: Label\r\n}\r\n\r\ninterface Coordinate {\r\n x: number;\r\n y: number;\r\n sub: (other: Coordinate) => any\r\n}\r\n\r\ninterface Point {\r\n\r\n}\r\n\r\ninterface Map {\r\n panTo: (latlng: Coordinate) => void;\r\n setPitch: (pitch: number) => void;\r\n getBaseLayer: () => TileLayer;\r\n setBaseLayer: (layer: TileLayer) => void;\r\n remove: () => void;\r\n on: (events: string, handler: () => void) => void;\r\n getCenter: () => Coordinate;\r\n setCenter: (coordinate: Coordinate) => void;\r\n getZoom: () => number;\r\n setZoom: (zoom: number) => void;\r\n getMinZoom: () => number;\r\n getMaxZoom: () => number;\r\n fitExtent: (extent: any, zoomOffset: number, option?: any) => void;\r\n getProjection: () => any;\r\n coordinateToContainerPoint: (coord: Coordinate, zoom?: number, point?: Point) => Point;\r\n setMenu: (menu: any) => void;\r\n}\r\n\r\ninterface Layer {\r\n addTo: (map: Map) => void;\r\n}\r\n\r\ninterface TileLayer extends Layer {\r\n\r\n}\r\n\r\ninterface VectorLayer extends Layer {\r\n addGeometry: (markers: Geometry | Geometry[]) => void;\r\n clear: () => void;\r\n remove: () => void;\r\n}\r\n\r\ninterface LineString extends Geometry {\r\n getCoordinates: () => Coordinate[];\r\n setCoordinates: (coordinates: Coordinate[]) => void;\r\n}\r\n\r\ninterface Geometry {\r\n show: () => void;\r\n hide: () => void;\r\n remove: () => void;\r\n getProperties: () => any;\r\n setProperties: (props: any) => void;\r\n updateSymbol: (props: any) => void;\r\n animate: (animation: any, props: any) => void;\r\n addTo: (layer: VectorLayer) => void;\r\n setInfoWindow: (infoWindow: any) => void;\r\n getInfoWindow: () => any;\r\n}\r\n\r\ninterface Marker extends Geometry {\r\n setCoordinates: (coordinate: Coordinate) => Marker;\r\n getCoordinates: () => Coordinate;\r\n setInfoWindow: (info: any) => Marker;\r\n}\r\n\r\ninterface Label extends Marker {\r\n setContent: (content: string) => void;\r\n getBoxStyle: () => any;\r\n setBoxStyle: (style: any) => void;\r\n getTextSymbol: () => any;\r\n setTextSymbol: (symbol: any) => void;\r\n}\r\n\r\ninterface Sector extends Geometry {\r\n setStartAngle: (angle: number) => void;\r\n setEndAngle: (angle: number) => void;\r\n setRadius: (radius: number) => void;\r\n getCoordinates: () => Coordinate;\r\n}\r\n\r\ninterface Circle extends Geometry {\r\n getCoordinates: () => Coordinate;\r\n setCoordinates: (corrdinates: Coordinate) => void;\r\n}\r\n\r\nconst ROUTE_AIR_COLOR = 'blue';\r\nconst ROUTE_GROUND_COLOR = 'brown';\r\n\r\nexport default class MaptalksMap implements IMap {\r\n static AIRCRAFT_SIZE = 120;\r\n static ANIMATION_DURATION = 500;\r\n static FEET_TO_METER = .3048;\r\n\r\n map: Map | undefined;\r\n markers: { [connectionId: string]: Markers } = {};\r\n atcMarkers: { [connectionId: string]: Marker } = {};\r\n\r\n onViewChangedHandler: OnViewChangedFn | null = null;\r\n onTeleportPositionSelectedHandler: (OnTeleportPositionSelectedFn | null) = null;\r\n onSetMeHandler: (OnSetOptionalClientIdFn | null) = null;\r\n onSetFollowHandler: (OnSetOptionalClientIdFn | null) = null;\r\n onSetShowPlanHandler: (OnSetOptionalClientIdFn | null) = null;\r\n onSetShowInfoHandler: (OnSetClientIdFn | null) = null;\r\n onSetShowRouteHandler: (OnSetClientIdFn | null) = null;\r\n\r\n visibleCircle: Circle = new maptalks.Circle([0, 0], 5029, {\r\n symbol: {\r\n lineColor: '#000000',\r\n lineWidth: 2,\r\n lineOpacity: 0.25,\r\n polygonFill: 'none',\r\n polygonOpacity: 0,\r\n }\r\n })\r\n\r\n atcLayer: VectorLayer = new maptalks.VectorLayer('atc');\r\n aircraftLayer: VectorLayer | undefined;\r\n airportLayer: VectorLayer = new maptalks.VectorLayer('airport');\r\n flightPlanLayer: VectorLayer = new maptalks.VectorLayer('flightPlan', {\r\n enableAltitude: true,\r\n drawAltitude: {\r\n polygonFill: '#1bbc9b',\r\n polygonOpacity: 0.3,\r\n lineWidth: 0\r\n }\r\n });\r\n routeLayers: { [id: string]: VectorLayer } = {};\r\n routeLines: { [id: string]: LineString } = {};\r\n trackingStatuses: { [id: string]: AircraftStatusBrief } = {};\r\n\r\n isDark: boolean = false;\r\n type: MapTileType = MapTileType.OpenStreetMap;\r\n\r\n initialView?: View;\r\n\r\n initialize(divId: string, view: View | undefined, mode: string | null) {\r\n const map: Map = new maptalks.Map(divId, {\r\n center: [view?.longitude || -0.09, view?.latitude || 51.505],\r\n zoom: view?.zoom || 13,\r\n pitch: 30\r\n });\r\n this.initialView = view;\r\n\r\n var options = {\r\n 'items': [\r\n { item: 'Teleport aircraft here', click: this.moveAircraft.bind(this) }\r\n ]\r\n };\r\n map.setMenu(options)\r\n\r\n map.on('zoomend', () => this.handleZoom());\r\n map.on('moveend', () => {\r\n const zoom = map.getZoom();\r\n const center = map.getCenter();\r\n if (this.onViewChangedHandler) {\r\n this.onViewChangedHandler({ latitude: center.y, longitude: center.x, zoom: zoom });\r\n }\r\n });\r\n\r\n const aircraftLayer = new maptalks.VectorLayer('aircraft', {\r\n enableAltitude: true,\r\n // draw altitude\r\n drawAltitude: {\r\n lineWidth: 1,\r\n lineColor: '#aaa'\r\n }\r\n }).addTo(map);\r\n\r\n aircraftLayer.addGeometry(this.visibleCircle);\r\n\r\n this.atcLayer.addTo(map);\r\n this.airportLayer.addTo(map);\r\n this.flightPlanLayer.addTo(map);\r\n\r\n this.visibleCircle.hide();\r\n\r\n this.aircraftLayer = aircraftLayer;\r\n this.map = map;\r\n\r\n this.drawOshkoshCircles();\r\n }\r\n\r\n deinitialize() {\r\n this.onViewChangedHandler = null;\r\n if (this.map) {\r\n this.map.remove();\r\n }\r\n }\r\n\r\n startDrawing() { }\r\n\r\n startTeleporting() { }\r\n\r\n changeMode(dark: boolean) {\r\n this.isDark = dark;\r\n this.setTileLayer(this.type);\r\n }\r\n\r\n setTileLayer(type: MapTileType) {\r\n if (!this.map) return;\r\n\r\n this.type = type;\r\n const cssFilter = this.isDark ? 'hue-rotate(180deg) invert(100%)' : '';\r\n\r\n switch (type) {\r\n case MapTileType.OpenStreetMap:\r\n this.map.setBaseLayer(new maptalks.TileLayer('openstreetmap', {\r\n urlTemplate: 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',\r\n subdomains: ['a', 'b', 'c'],\r\n maxZoom: 19,\r\n attribution: '© OpenStreetMap contributors',\r\n cssFilter: cssFilter\r\n }));\r\n break;\r\n case MapTileType.OpenTopoMap:\r\n this.map.setBaseLayer(new maptalks.TileLayer('opentopomap', {\r\n urlTemplate: 'https://{s}.tile.opentopomap.org/{z}/{x}/{y}.png',\r\n subdomains: ['a', 'b', 'c'],\r\n maxZoom: 17,\r\n attribution: 'Map data: © OpenStreetMap contributors, SRTM | Map style: © OpenTopoMap (CC-BY-SA)',\r\n cssFilter: cssFilter\r\n }));\r\n break;\r\n case MapTileType.EsriWorldImagery:\r\n this.map.setBaseLayer(new maptalks.TileLayer('esri', {\r\n urlTemplate: 'https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}',\r\n attribution: 'Tiles © Esri — Source: Esri, i-cubed, USDA, USGS, AEX, GeoEye, Getmapping, Aerogrid, IGN, IGP, UPR-EGP, and the GIS User Community',\r\n cssFilter: cssFilter\r\n }));\r\n break;\r\n case MapTileType.EsriTopo:\r\n this.map.setBaseLayer(new maptalks.TileLayer('esritopo', {\r\n urlTemplate: 'https://server.arcgisonline.com/ArcGIS/rest/services/World_Topo_Map/MapServer/tile/{z}/{y}/{x}',\r\n attribution: 'Tiles © Esri — Esri, DeLorme, NAVTEQ, TomTom, Intermap, iPC, USGS, FAO, NPS, NRCAN, GeoBase, Kadaster NL, Ordnance Survey, Esri Japan, METI, Esri China (Hong Kong), and the GIS User Community',\r\n cssFilter: cssFilter\r\n }));\r\n break;\r\n case MapTileType.Carto:\r\n this.map.setBaseLayer(new maptalks.TileLayer('carto', {\r\n urlTemplate: 'https://{s}.basemaps.cartocdn.com/light_all/{z}/{x}/{y}.png',\r\n subdomains: ['a', 'b', 'c', 'd'],\r\n attribution: '© OpenStreetMap contributors, © CARTO',\r\n cssFilter: cssFilter\r\n }));\r\n break;\r\n case MapTileType.UsVfrSectional:\r\n this.map.setBaseLayer(new maptalks.TileLayer('usvfrsection', {\r\n urlTemplate: 'https://wms.chartbundle.com/tms/v1.0/sec/{z}/{x}/{y}.png?type=google',\r\n attribution: 'Map data: © Federal Aviation Administration (FAA), ChartBundle.com',\r\n cssFilter: cssFilter\r\n }));\r\n break;\r\n }\r\n }\r\n\r\n moveATCMarker(clientId: string, status: ATCStatus | null, info: ATCInfo | null) {\r\n if (status && info) {\r\n const latlng: Coordinate = new maptalks.Coordinate([status.longitude, status.latitude]);\r\n\r\n const marker = this.atcMarkers[clientId];\r\n if (marker) {\r\n // Existing marker\r\n marker\r\n .setInfoWindow({\r\n title: `${info.callsign} [${(status.frequencyCom / 1000)}]`,\r\n content: `Name: ${info.realName}
Certificate: ${info.certificate}`,\r\n autoCloseOn: 'click'\r\n })\r\n .setCoordinates(latlng);\r\n } else {\r\n this.atcMarkers[clientId] = new maptalks.Marker(latlng, {\r\n symbol: {\r\n markerFile: 'marker-tower.png',\r\n markerWidth: 30,\r\n markerHeight: 30\r\n }\r\n })\r\n .addTo(this.atcLayer)\r\n .setInfoWindow({\r\n title: `${info.callsign} [${(status.frequencyCom / 1000)}]`,\r\n content: `Name: ${info.realName}
Certificate: ${info.certificate}`,\r\n autoCloseOn: 'click'\r\n });\r\n }\r\n } else {\r\n // Remove\r\n this.cleanUpController(clientId);\r\n }\r\n }\r\n\r\n moveMarker(connectionId: string, aircraftStatus: AircraftStatus, isMe: boolean, isFollowing: boolean, isShowingPlan: boolean, isMoreInfo: boolean, isShowingRoute: boolean) {\r\n if (!this.map || !this.aircraftLayer) return;\r\n\r\n let latlng: Coordinate = new maptalks.Coordinate([aircraftStatus.longitude, aircraftStatus.latitude]);\r\n\r\n const altitude = aircraftStatus.altitude * MaptalksMap.FEET_TO_METER\r\n\r\n let markers = this.markers[connectionId];\r\n if (markers) {\r\n // Existing marker\r\n\r\n const offset = latlng.sub(markers.aircraft.getCoordinates());\r\n\r\n markers.aircraft.setProperties({ altitude: altitude });\r\n markers.aircraft.animate({ translate: [offset['x'], offset['y']] }, { duration: MaptalksMap.ANIMATION_DURATION });\r\n markers.aircraft.setStartAngle(-aircraftStatus.trueHeading - 10 - 90);\r\n markers.aircraft.setEndAngle(-aircraftStatus.trueHeading + 10 - 90);\r\n\r\n markers.aircraftLine.setProperties({ altitude: altitude });\r\n markers.aircraftLine.animate({ translate: [offset['x'], offset['y']] }, { duration: MaptalksMap.ANIMATION_DURATION });\r\n\r\n markers.info.setProperties({ altitude: altitude });\r\n markers.info.animate({ translate: [offset['x'], offset['y']] }, { duration: MaptalksMap.ANIMATION_DURATION });\r\n\r\n // Change theme for dark mode\r\n markers.info.setBoxStyle({\r\n ...markers.info.getBoxStyle(),\r\n symbol: {\r\n markerType: 'square',\r\n markerFill: this.isDark ? 'rgba(0, 0, 0)' : 'rgba(255, 255, 255)',\r\n markerFillOpacity: 0.2,\r\n markerLineWidth: 0\r\n }\r\n })\r\n markers.info.setTextSymbol({\r\n ...markers.info.getTextSymbol(),\r\n textFill: this.isDark ? '#ddd' : '#34495e',\r\n })\r\n\r\n if (isMe) {\r\n const circleOffset = latlng.sub(this.visibleCircle.getCoordinates());\r\n this.visibleCircle.setProperties({ altitude: altitude });\r\n this.visibleCircle.animate({ translate: [circleOffset['x'], circleOffset['y']] }, { duration: MaptalksMap.ANIMATION_DURATION });\r\n }\r\n\r\n if (isMe) {\r\n markers.aircraft.updateSymbol({\r\n lineColor: this.isDark ? 'gold' : 'rgb(135,196,240)',\r\n polygonFill: this.isDark ? 'gold' : 'rgb(135,196,240)'\r\n })\r\n } else {\r\n markers.aircraft.updateSymbol({\r\n lineColor: this.isDark ? '#ddd' : '#34495e',\r\n polygonFill: this.isDark ? '#ddd' : '#34495e'\r\n })\r\n }\r\n\r\n const body = isMoreInfo ?\r\n `${aircraftStatus.callsign}\\nALT ${Math.round(aircraftStatus.altitude)} ft\\nHDG ${Math.round(aircraftStatus.heading)}\\u00B0\\nIAS ${Math.round(aircraftStatus.indicatedAirSpeed)} kts\\nGS ${Math.round(aircraftStatus.groundSpeed)} kts` :\r\n `${aircraftStatus.callsign}`\r\n markers.info.setContent(body);\r\n } else {\r\n const aircraftLine = new maptalks.Marker(latlng, {\r\n symbol: {\r\n 'markerType': 'path',\r\n 'markerPath': 'M',\r\n 'markerFill': 'rgb(216,115,149)',\r\n 'markerLineColor': '#aaa',\r\n 'markerPathWidth': 305,\r\n 'markerPathHeight': 313,\r\n 'markerWidth': 30,\r\n 'markerHeight': 42,\r\n\r\n 'markerRotation': -aircraftStatus.trueHeading\r\n },\r\n properties: {\r\n altitude: altitude\r\n },\r\n })\r\n const aircraft = new maptalks.Sector(latlng, this.determineAircraftSize(), -aircraftStatus.trueHeading - 10 - 90, -aircraftStatus.trueHeading + 10 - 90, {\r\n symbol: {\r\n lineColor: '#34495e',\r\n lineWidth: 2,\r\n polygonFill: '#34495e',\r\n polygonOpacity: 1\r\n },\r\n properties: {\r\n altitude: altitude\r\n }\r\n })\r\n const info = new maptalks.Label(`${aircraftStatus.callsign}`, latlng, {\r\n textSymbol: {\r\n textFaceName: 'Lucida Console',\r\n textFill: '#34495e',\r\n textSize: 12,\r\n textWeight: 'bold',\r\n textVerticalAlignment: 'top',\r\n textHorizontalAlignment: 'right',\r\n textDy: -10,\r\n },\r\n boxStyle: {\r\n padding: [4, 4],\r\n verticalAlignment: 'top',\r\n horizontalAlignment: 'right',\r\n minWidth: 50,\r\n minHeight: 20,\r\n symbol: {\r\n markerType: 'square',\r\n markerFill: 'rgba(255, 255, 255)',\r\n markerFillOpacity: 0.2,\r\n markerLineWidth: 0\r\n }\r\n },\r\n properties: {\r\n altitude: altitude\r\n }\r\n });\r\n markers = {\r\n aircraft: aircraft,\r\n aircraftLine: aircraftLine,\r\n info: info\r\n }\r\n this.markers[connectionId] = markers;\r\n\r\n this.aircraftLayer.addGeometry([].concat(aircraft, aircraftLine, info));\r\n\r\n if (isMe) {\r\n this.visibleCircle.setCoordinates(latlng);\r\n }\r\n }\r\n\r\n this.createInfoWindow(markers, aircraftStatus, isMe, isFollowing, isShowingPlan, isMoreInfo, isShowingRoute, connectionId);\r\n }\r\n\r\n private createInfoWindow(markers: Markers, aircraftStatus: AircraftStatus, isMe: boolean, isFollowing: boolean, isShowingPlan: boolean, isMoreInfo: boolean, isShowingRoute: boolean, connectionId: string) {\r\n let popup = `Altitude: ${Math.floor(aircraftStatus.altitude)}
Airspeed: ${Math.floor(aircraftStatus.indicatedAirSpeed)}
`;\r\n if (aircraftStatus.callsign) {\r\n popup = `${aircraftStatus.callsign}
${popup}`;\r\n }\r\n let popupElement = document.createElement(\"div\");\r\n popupElement.innerHTML = popup;\r\n\r\n const popupBtnGroup = document.createElement('div');\r\n popupBtnGroup.className = 'btn-group-vertical';\r\n popupElement.appendChild(popupBtnGroup);\r\n\r\n const setMeButton = this.createToggleButton(popupBtnGroup, 'My aircraft', isMe);\r\n const setFollowButton = this.createToggleButton(popupBtnGroup, 'Follow', isFollowing);\r\n const setFlightPlanButton = this.createToggleButton(popupBtnGroup, 'Show Plan', isShowingPlan);\r\n const setShowInfoButton = this.createToggleButton(popupBtnGroup, 'Show Info', isMoreInfo);\r\n const setShowRouteButton = this.createToggleButton(popupBtnGroup, 'Show Route', isShowingRoute);\r\n\r\n let infoWindow = markers.aircraft.getInfoWindow();\r\n if (infoWindow) {\r\n infoWindow.setContent(popupElement);\r\n } else {\r\n infoWindow = new maptalks.ui.InfoWindow({\r\n 'content': popupElement,\r\n 'autoCloseOn': 'click',\r\n 'animationOnHide': false,\r\n width: 115\r\n });\r\n markers.aircraft.setInfoWindow(infoWindow);\r\n markers.info.setInfoWindow(infoWindow);\r\n }\r\n\r\n setMeButton.addEventListener('click', () => { this.onSetMeHandler && this.onSetMeHandler(isMe ? null : connectionId); infoWindow.hide(); });\r\n setFollowButton.addEventListener('click', () => { this.onSetFollowHandler && this.onSetFollowHandler(isFollowing ? null : connectionId); infoWindow.hide(); });\r\n setFlightPlanButton.addEventListener('click', () => { this.onSetShowPlanHandler && this.onSetShowPlanHandler(isShowingPlan ? null : connectionId); infoWindow.hide(); });\r\n setShowInfoButton.addEventListener('click', () => { this.onSetShowInfoHandler && this.onSetShowInfoHandler(connectionId); infoWindow.hide(); });\r\n setShowRouteButton.addEventListener('click', () => { this.onSetShowRouteHandler && this.onSetShowRouteHandler(connectionId); infoWindow.hide(); });\r\n }\r\n\r\n private createToggleButton(container: HTMLElement, content: string, isToggled: boolean) {\r\n const button = document.createElement('button');\r\n button.className = 'btn btn-sm btn-info' + (isToggled ? ' active' : '');\r\n button.innerHTML = content;\r\n button.setAttribute('data-toggle', 'button');\r\n if (isToggled) button.setAttribute('aria-pressed', 'true');\r\n container.appendChild(button);\r\n return button;\r\n }\r\n\r\n drawAirports(airports: Airport[]) {\r\n if (this.map) {\r\n const minLongitude = airports.reduce((prev, curr) => Math.min(prev, curr.longitude), 180);\r\n const maxLongitude = airports.reduce((prev, curr) => Math.max(prev, curr.longitude), -180);\r\n const minLatitude = airports.reduce((prev, curr) => Math.min(prev, curr.latitude), 90);\r\n const maxLatitude = airports.reduce((prev, curr) => Math.max(prev, curr.latitude), -90);\r\n\r\n this.fitExtent(new maptalks.Coordinate(minLongitude, minLatitude), new maptalks.Coordinate(maxLongitude, maxLatitude));\r\n\r\n this.airportLayer.clear();\r\n\r\n for (let airport of airports) {\r\n new maptalks.ui.UIMarker(\r\n new maptalks.Coordinate([airport.longitude, airport.latitude]),\r\n {\r\n content: `
${airport.ident}
`,\r\n dy: -40\r\n }\r\n ).addTo(this.airportLayer).show();\r\n\r\n new maptalks.Marker(\r\n new maptalks.Coordinate([airport.longitude, airport.latitude])\r\n ).addTo(this.airportLayer);\r\n }\r\n }\r\n }\r\n\r\n drawFlightPlans(flightPlans: FlightPlanData[]) {\r\n if (this.map) {\r\n this.flightPlanLayer.clear();\r\n\r\n let index = 0;\r\n const colors = ['red', 'blue'];\r\n\r\n for (let flightPlan of flightPlans) {\r\n const waypoints = flightPlan.waypoints;\r\n if (waypoints) {\r\n const latlngs = waypoints.reduce((prev: Coordinate[], curr) =>\r\n prev.concat(new maptalks.Coordinate([curr.longitude, curr.latitude])),\r\n [])\r\n\r\n const altitudes = waypoints.reduce((prev: number[], curr, index) =>\r\n prev.concat(MaptalksMap.FEET_TO_METER *\r\n (curr.altitude ||\r\n (index === 0 || index === waypoints.length - 1 ? 0 : flightPlan.cruisingAltitude))),\r\n [])\r\n\r\n new maptalks.LineString(latlngs, {\r\n symbol: {\r\n lineColor: colors[(index++ % colors.length)],\r\n lineWidth: 3\r\n },\r\n properties: {\r\n altitude: altitudes\r\n }\r\n }).addTo(this.flightPlanLayer);\r\n\r\n for (let i = 0; i < waypoints.length; i++) {\r\n const waypoint = waypoints[i];\r\n new maptalks.Marker(new maptalks.Coordinate([waypoint.longitude, waypoint.latitude]), {\r\n properties: {\r\n name: waypoint.id,\r\n altitude: altitudes[i],\r\n },\r\n symbol: {\r\n textFaceName: 'Lucida Console',\r\n textName: '{name}',\r\n textWeight: 'bold',\r\n textDy: -15,\r\n }\r\n }).addTo(this.flightPlanLayer);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n focus(location: { longitude: number, latitude: number }, zoom?: number) {\r\n if (this.map) {\r\n this.map.panTo(new maptalks.Coordinate([location.longitude, location.latitude]));\r\n if (zoom) {\r\n this.map.setZoom(zoom);\r\n }\r\n }\r\n }\r\n\r\n cleanUpController(clientId: string) {\r\n const marker = this.atcMarkers[clientId];\r\n if (marker) {\r\n marker.remove();\r\n delete this.atcMarkers[clientId];\r\n }\r\n }\r\n\r\n cleanUpAircraft(clientId: string, isMe: boolean) {\r\n const marker = this.markers[clientId];\r\n if (marker) {\r\n delete this.markers[clientId];\r\n\r\n marker.aircraft.remove();\r\n marker.aircraftLine.remove();\r\n marker.info.remove();\r\n if (isMe) {\r\n this.removeRangeCircle();\r\n }\r\n }\r\n }\r\n\r\n addRangeCircle() {\r\n this.visibleCircle.show();\r\n }\r\n\r\n removeRangeCircle() {\r\n this.visibleCircle.hide();\r\n }\r\n\r\n getCurrentView(): View {\r\n if (this.map) {\r\n const center = this.map.getCenter();\r\n return { longitude: center.x, latitude: center.y, zoom: this.map.getZoom() }\r\n }\r\n return { longitude: null, latitude: null }\r\n }\r\n\r\n public onViewChanged(handler: OnViewChangedFn) {\r\n this.onViewChangedHandler = handler;\r\n }\r\n\r\n public onTeleportPositionSelected(handler: OnTeleportPositionSelectedFn) {\r\n this.onTeleportPositionSelectedHandler = handler;\r\n }\r\n\r\n public onSetMe(handler: OnSetOptionalClientIdFn) {\r\n this.onSetMeHandler = handler;\r\n }\r\n public onSetFollow(handler: OnSetOptionalClientIdFn) {\r\n this.onSetFollowHandler = handler;\r\n }\r\n public onSetShowPlan(handler: OnSetOptionalClientIdFn) {\r\n this.onSetShowPlanHandler = handler;\r\n }\r\n public onSetShowInfo(handler: OnSetClientIdFn) {\r\n this.onSetShowInfoHandler = handler;\r\n }\r\n public onSetShowRoute(handler: OnSetClientIdFn) {\r\n this.onSetShowRouteHandler = handler;\r\n }\r\n\r\n public track(id: string, status: AircraftStatus) {\r\n if (!this.routeLines[id] || !this.trackingStatuses[id] || this.trackingStatuses[id].isOnGround !== status.isOnGround) {\r\n this.routeLines[id] = this.createRouteLine(id, this.trackingStatuses[id] ? [this.trackingStatuses[id], status] : [status], status.isOnGround);\r\n } else {\r\n if (status.groundSpeed > 0.05) {\r\n const routeLine = this.routeLines[id];\r\n routeLine.setCoordinates(routeLine.getCoordinates().concat([new maptalks.Coordinate([status.longitude, status.latitude])]));\r\n routeLine.setProperties({\r\n altitude: routeLine.getProperties().altitude.concat(status.altitude * MaptalksMap.FEET_TO_METER)\r\n });\r\n }\r\n }\r\n this.trackingStatuses[id] = status;\r\n }\r\n\r\n public prependTrack(id: string, route: AircraftStatusBrief[]) {\r\n let isOnGround: boolean | null = null;\r\n let routeSoFar: AircraftStatusBrief[] = [];\r\n for (let status of route) {\r\n if (isOnGround !== status.isOnGround) {\r\n if (routeSoFar.length > 0 && isOnGround !== null) {\r\n this.createRouteLine(id, routeSoFar, isOnGround);\r\n }\r\n routeSoFar = routeSoFar.length > 0 ? routeSoFar.slice(routeSoFar.length - 1, routeSoFar.length) : [];\r\n isOnGround = status.isOnGround;\r\n }\r\n routeSoFar.push(status);\r\n }\r\n if (routeSoFar.length > 0 && isOnGround !== null) {\r\n this.createRouteLine(id, routeSoFar, isOnGround);\r\n }\r\n }\r\n\r\n private createRouteLine(id: string, route: AircraftStatusBrief[], isOnGround: boolean) {\r\n if (!this.routeLayers[id]) {\r\n this.routeLayers[id] = new maptalks.VectorLayer('route_' + id, {\r\n enableAltitude: true,\r\n drawAltitude: {\r\n polygonFill: '#1bbc9b',\r\n polygonOpacity: 0.3,\r\n lineWidth: 0\r\n }\r\n });\r\n if (this.map) {\r\n this.routeLayers[id].addTo(this.map);\r\n }\r\n }\r\n\r\n let line = new maptalks.LineString(route.map(r => new maptalks.Coordinate([r.longitude, r.latitude])), {\r\n symbol: {\r\n lineColor: isOnGround ? ROUTE_GROUND_COLOR : ROUTE_AIR_COLOR,\r\n lineWidth: 3\r\n },\r\n properties: {\r\n altitude: route.map(r => r.altitude * MaptalksMap.FEET_TO_METER)\r\n }\r\n });\r\n line.addTo(this.routeLayers[id])\r\n return line;\r\n }\r\n\r\n public clearTrack(id: string) {\r\n delete this.trackingStatuses[id];\r\n if (this.routeLayers[id]) {\r\n this.routeLayers[id].remove();\r\n delete this.routeLayers[id];\r\n }\r\n delete this.routeLines[id];\r\n }\r\n\r\n private fitExtent(c1: Coordinate, c2: Coordinate) {\r\n if (!this.map) return;\r\n\r\n const extent = new maptalks.Extent(c1, c2);\r\n this.map.setPitch(0);\r\n this.map.fitExtent(extent, -1);\r\n this.map.setPitch(30);\r\n }\r\n\r\n private handleZoom() {\r\n const radius = this.determineAircraftSize();\r\n for (let connectionId in this.markers) {\r\n const marker = this.markers[connectionId];\r\n marker.aircraft.setRadius(radius);\r\n }\r\n }\r\n\r\n private determineAircraftSize() {\r\n if (!this.map) return MaptalksMap.AIRCRAFT_SIZE;\r\n return Math.pow(2, 14 - this.map.getZoom()) * MaptalksMap.AIRCRAFT_SIZE;\r\n }\r\n\r\n private moveAircraft(e: { coordinate: Coordinate }) {\r\n if (this.onTeleportPositionSelectedHandler) {\r\n this.onTeleportPositionSelectedHandler({ latitude: e.coordinate.y, longitude: e.coordinate.x });\r\n }\r\n return true;\r\n }\r\n\r\n private drawOshkoshCircles() {\r\n if (this.map) {\r\n const commonStyle = { lineColor: '#34495e', lineWidth: 2, polygonOpacity: 0.4 };\r\n new maptalks.VectorLayer('vector', { enableAltitude: true })\r\n .addGeometry([\r\n new maptalks.Circle([-88.55649845579117, 43.98127188305071], 12, { symbol: { ...commonStyle, polygonFill: 'blue' }, properties: { altitude: 246.3 } }),\r\n new maptalks.Circle([-88.55654726863388, 43.97694160803118], 12, { symbol: { ...commonStyle, polygonFill: \"red\" }, properties: { altitude: 246.3 } }),\r\n new maptalks.Circle([-88.55660272193413, 43.972867792605214], 12, { symbol: { ...commonStyle, polygonFill: \"yellow\" }, properties: { altitude: 246.3 } }),\r\n new maptalks.Circle([-88.5566557100092, 43.968619800959615], 12, { symbol: { ...commonStyle, polygonFill: \"purple\" }, properties: { altitude: 246.3 } }),\r\n\r\n new maptalks.Circle([-88.5545677074355, 43.991529704426085], 12, { symbol: { ...commonStyle, polygonFill: \"orange\" }, properties: { altitude: 236.5248 } }),\r\n new maptalks.Circle([-88.56045717742607, 43.991566231901906], 12, { symbol: { ...commonStyle, polygonFill: \"cyan\" }, properties: { altitude: 236.5248 } }),\r\n new maptalks.Circle([-88.56532600272514, 43.99160231883673], 12, { symbol: { ...commonStyle, polygonFill: \"white\" }, properties: { altitude: 236.5248 } }),\r\n\r\n new maptalks.Rectangle(new maptalks.Coordinate(-88.55455903934717, 43.96952516618286), 10, 10, { symbol: { ...commonStyle, polygonFill: \"cyan\" }, properties: { altitude: 246.3 } }),\r\n new maptalks.Rectangle(new maptalks.Coordinate(-88.55450902110248, 43.97348742641145), 10, 10, { symbol: { ...commonStyle, polygonFill: \"red\" }, properties: { altitude: 246.3 } })\r\n ]).addTo(this.map);\r\n }\r\n }\r\n}","var pascalCasePattern = new RegExp(\"^([A-Z])([a-z]+)\");\r\n\r\nexport function pascalCaseToCamelCase(propname) {\r\n if (pascalCasePattern.test(propname)) {\r\n return propname.charAt(0).toLowerCase() + propname.slice(1);\r\n }\r\n else {\r\n return propname;\r\n }\r\n}\r\n\r\nexport function convertPropertyNames(obj, converterFn) {\r\n var r, value, t = Object.prototype.toString.apply(obj);\r\n if (t === \"[object Object]\") {\r\n r = {};\r\n for (var propname in obj) {\r\n value = obj[propname];\r\n r[converterFn(propname)] = convertPropertyNames(value, converterFn);\r\n }\r\n return r;\r\n }\r\n else if (t === \"[object Array]\") {\r\n r = [];\r\n for (var i = 0, L = obj.length; i < L; ++i) {\r\n value = obj[i];\r\n r[i] = convertPropertyNames(value, converterFn);\r\n }\r\n return r;\r\n }\r\n return obj;\r\n}","import * as React from 'react';\r\nimport * as _ from 'lodash';\r\nimport { HubConnection } from '@microsoft/signalr';\r\nimport { IMap, MapTileType, View, MapDimension, MapMode, MapPosition, OnSetOptionalClientIdFn } from '../maps/IMap';\r\nimport LeafletMap from '../maps/LeaftletMap';\r\nimport MaptalksMap from '../maps/MaptalksMap';\r\nimport { AircraftStatus, AircraftStatusBrief, Airport, ATCInfo, ATCStatus, FlightPlanData } from '../Models';\r\nimport { convertPropertyNames, pascalCaseToCamelCase } from '../Converters';\r\n\r\ninterface Props {\r\n hub: HubConnection;\r\n\r\n mode: MapMode | null;\r\n isDark: boolean;\r\n dimension: MapDimension;\r\n tileType: MapTileType;\r\n initialView: View;\r\n\r\n allClientIds: string[];\r\n\r\n group: string | null;\r\n\r\n myClientId: string | null;\r\n onMeChanged: OnSetOptionalClientIdFn;\r\n\r\n followingClientId: string | null;\r\n onFollowingChanged: OnSetOptionalClientIdFn;\r\n\r\n flightPlanClientId: string | null;\r\n onShowPlanChanged: OnSetOptionalClientIdFn;\r\n\r\n showInfoClientIds: string[];\r\n onShowInfoChanged: (clientId: string) => void;\r\n\r\n showRouteClientIds: string[];\r\n onShowRouteChanged: (clientId: string) => void;\r\n onRequestFlightRoute: (clientId: string) => void;\r\n prependingRoute: { clientId: string, route: AircraftStatusBrief[] } | null;\r\n\r\n onTeleportPositionSelected: (position: MapPosition) => void;\r\n\r\n flightPlans: FlightPlanData[];\r\n airports: Airport[];\r\n controllers: { [clientId: string]: ATCInfo & ATCStatus }\r\n\r\n focusView: View | null;\r\n callsignFilter: string[] | null;\r\n\r\n isDrawing: boolean;\r\n onDrawingCompleted: () => void;\r\n\r\n isTeleporting: boolean;\r\n onTeleportingCompleted: () => void;\r\n}\r\n\r\nvar map: IMap;\r\n\r\nconst MapComponent = (props: Props) => {\r\n const firstFocus = React.useRef(false);\r\n const previousAircraftClientIds = React.useRef([]);\r\n const previousControllerClientIds = React.useRef([]);\r\n const currentView = React.useRef();\r\n\r\n if (map) {\r\n // HACK to make sure the current view is retained when switching map\r\n currentView.current = map.getCurrentView();\r\n }\r\n\r\n React.useEffect(() => {\r\n console.info('Create map');\r\n map = props.dimension === MapDimension._2D ? new LeafletMap() : new MaptalksMap();\r\n }, [props.dimension]);\r\n\r\n React.useEffect(() => {\r\n console.info('Initialize map');\r\n if (!currentView.current) {\r\n currentView.current = props.initialView;\r\n }\r\n map.initialize('mapid', currentView.current, props.mode);\r\n\r\n return () => {\r\n map?.deinitialize();\r\n };\r\n }, [props.dimension, props.initialView, props.mode]);\r\n\r\n React.useEffect(() => {\r\n map.setTileLayer(props.tileType);\r\n }, [props.dimension, props.tileType]);\r\n\r\n React.useEffect(() => {\r\n map.onSetMe(props.onMeChanged);\r\n map.onSetFollow(props.onFollowingChanged);\r\n map.onSetShowPlan(props.onShowPlanChanged);\r\n map.onSetShowInfo(props.onShowInfoChanged);\r\n map.onSetShowRoute(props.onShowRouteChanged);\r\n map.onTeleportPositionSelected(props.onTeleportPositionSelected);\r\n }, [props.onMeChanged, props.onFollowingChanged, props.onShowPlanChanged, props.onShowInfoChanged, props.onShowRouteChanged, props.onTeleportPositionSelected]);\r\n\r\n React.useEffect(() => {\r\n map.changeMode(props.isDark);\r\n }, [props.dimension, props.isDark]);\r\n\r\n React.useEffect(() => {\r\n map.setTileLayer(props.tileType);\r\n }, [props.dimension, props.tileType]);\r\n\r\n React.useEffect(() => {\r\n if (props.myClientId) {\r\n map.addRangeCircle();\r\n } else {\r\n map.removeRangeCircle();\r\n }\r\n }, [props.dimension, props.myClientId]);\r\n\r\n React.useEffect(() => {\r\n if (props.flightPlanClientId == null) {\r\n // Clear map\r\n map.drawFlightPlans([]);\r\n }\r\n }, [props.dimension, props.flightPlanClientId]);\r\n\r\n React.useEffect(() => {\r\n map.drawFlightPlans(props.flightPlans);\r\n }, [props.dimension, props.flightPlans]);\r\n\r\n React.useEffect(() => {\r\n if (props.airports.length > 0) {\r\n map.drawAirports(props.airports);\r\n }\r\n }, [props.dimension, props.airports]);\r\n\r\n const hasInitialView = !!props.initialView.latitude && !!props.initialView.longitude;\r\n\r\n React.useEffect(() => {\r\n const updateHandler = (clientId, aircraftStatus: AircraftStatus) => {\r\n aircraftStatus = convertPropertyNames(aircraftStatus, pascalCaseToCamelCase);\r\n\r\n if (props.callsignFilter && !props.callsignFilter.includes(aircraftStatus.callsign)) {\r\n return\r\n }\r\n\r\n if (props.group && props.group !== aircraftStatus.group) {\r\n return;\r\n }\r\n\r\n try {\r\n const isReady = !(Math.abs(aircraftStatus.latitude) < 0.02 && Math.abs(aircraftStatus.longitude) < 0.02);\r\n\r\n if (isReady) {\r\n map.moveMarker(clientId, aircraftStatus,\r\n props.myClientId === clientId,\r\n props.followingClientId === clientId,\r\n props.flightPlanClientId === clientId,\r\n props.showInfoClientIds.includes(clientId),\r\n props.showRouteClientIds.includes(clientId)\r\n );\r\n } else {\r\n // Aircraft not loaded\r\n map.cleanUpAircraft(clientId, props.myClientId === clientId);\r\n }\r\n\r\n if (isReady && props.showRouteClientIds.includes(clientId)) {\r\n map.track(clientId, aircraftStatus);\r\n } else {\r\n map.clearTrack(clientId);\r\n }\r\n\r\n //const focusAircraft = !props.followingClientId && !props.initialView.latitude && !props.initialView.longitude && !props.eventId\r\n\r\n // Focus the first ready aircraft\r\n if (!firstFocus.current && isReady && !hasInitialView) {\r\n firstFocus.current = true;\r\n map.focus(aircraftStatus);\r\n }\r\n // Follow an aircraft\r\n else if (isReady && props.followingClientId === clientId) {\r\n map.focus(aircraftStatus);\r\n }\r\n } catch (e) {\r\n console.error(e);\r\n }\r\n }\r\n\r\n props.hub.on(\"UpdateAircraft\", updateHandler);\r\n\r\n return () => {\r\n props.hub.off(\"UpdateAircraft\", updateHandler);\r\n }\r\n }, [props.hub, props.group, props.myClientId, props.followingClientId, props.flightPlanClientId, props.showInfoClientIds, props.showRouteClientIds, props.callsignFilter, hasInitialView]);\r\n\r\n React.useEffect(() => {\r\n const toRemove = _.difference(previousAircraftClientIds.current, props.allClientIds);\r\n previousAircraftClientIds.current = props.allClientIds;\r\n\r\n for (let clientId of toRemove) {\r\n map.cleanUpAircraft(clientId, clientId === props.myClientId);\r\n }\r\n }, [props.allClientIds, props.myClientId])\r\n\r\n React.useEffect(() => {\r\n const currentClientIds = Object.keys(props.controllers);\r\n const toRemove = _.difference(previousControllerClientIds.current, currentClientIds);\r\n previousControllerClientIds.current = currentClientIds;\r\n\r\n for (let clientId of toRemove) {\r\n map.cleanUpController(clientId);\r\n }\r\n\r\n for (let [clientId, atc] of Object.entries(props.controllers)) {\r\n map.moveATCMarker(clientId, atc, atc);\r\n }\r\n }, [props.controllers]);\r\n\r\n const { showRouteClientIds, onRequestFlightRoute, isDrawing, onDrawingCompleted, isTeleporting, onTeleportingCompleted } = props;\r\n\r\n React.useEffect(() => {\r\n for (let clientId of showRouteClientIds) {\r\n onRequestFlightRoute(clientId);\r\n }\r\n }, [props.dimension, showRouteClientIds, onRequestFlightRoute]);\r\n\r\n React.useEffect(() => {\r\n if (props.prependingRoute) {\r\n map.prependTrack(props.prependingRoute.clientId, props.prependingRoute.route);\r\n }\r\n }, [props.dimension, props.prependingRoute])\r\n\r\n React.useEffect(() => {\r\n if (props.focusView && props.focusView.latitude && props.focusView.longitude) {\r\n map.focus({ longitude: props.focusView.longitude, latitude: props.focusView.latitude }, props.focusView.zoom);\r\n }\r\n }, [props.focusView]);\r\n\r\n React.useEffect(() => {\r\n if (isDrawing) {\r\n map.startDrawing();\r\n onDrawingCompleted();\r\n }\r\n }, [isDrawing, onDrawingCompleted]);\r\n\r\n React.useEffect(() => {\r\n if (isTeleporting) {\r\n map.startTeleporting();\r\n onTeleportingCompleted();\r\n }\r\n }, [isTeleporting, onTeleportingCompleted]);\r\n\r\n return <>\r\n {props.isDark &&