@mappedin/react-native-sdk 3.4.5 → 3.5.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/get-venue/package.json +1 -3
- package/dist/get-venue/src/Mappedin.d.ts.map +1 -1
- package/dist/get-venue/src/Mappedin.js +0 -1
- package/dist/get-venue/src/MappedinLocation.d.ts +1 -1
- package/dist/get-venue/src/MappedinLocation.d.ts.map +1 -1
- package/dist/get-venue/src/MappedinNode.d.ts +1 -1
- package/dist/get-venue/src/MappedinNode.js +1 -1
- package/dist/get-venue/src/fixtures/JoesZoo-MissingScene.json +1 -0
- package/dist/get-venue/src/index.cjs.js +1 -1
- package/dist/get-venue/src/index.d.ts +2 -2
- package/dist/get-venue/src/index.d.ts.map +1 -1
- package/dist/get-venue/src/index.js +1 -1
- package/dist/get-venue/src/index.test.d.ts +2 -0
- package/dist/get-venue/src/index.test.d.ts.map +1 -0
- package/dist/get-venue/src/index.test.js +46 -0
- package/dist/get-venue/src/utils.d.ts.map +1 -1
- package/dist/get-venue/src/utils.js +16 -3
- package/dist/get-venue/src/utils.test.d.ts +2 -0
- package/dist/get-venue/src/utils.test.d.ts.map +1 -0
- package/dist/get-venue/src/utils.test.js +17 -0
- package/dist/get-venue/tsconfig.isomorphic.tsbuildinfo +9 -9
- package/dist/get-venue/tsconfig.tsbuildinfo +41 -15
- package/dist/sdk/src/MiMapView.store.d.ts +9 -7
- package/dist/sdk/src/MiMapView.store.d.ts.map +1 -1
- package/dist/sdk/src/MiMapView.store.js +1 -1
- package/dist/sdk/src/assets/index.html.js +1 -1
- package/dist/sdk/src/index.d.ts +48 -3
- package/dist/sdk/src/index.d.ts.map +1 -1
- package/dist/sdk/src/utils.d.ts +9 -3
- package/dist/sdk/src/utils.d.ts.map +1 -1
- package/dist/sdk/src/utils.js +1 -1
- package/dist/sdk/tsconfig.build.tsbuildinfo +996 -860
- package/dist/types/src/Mappedin.bridge.events.d.ts +2 -0
- package/dist/types/src/Mappedin.bridge.events.d.ts.map +1 -1
- package/dist/types/src/Mappedin.bridge.events.js +1 -1
- package/dist/types/tsconfig.tsbuildinfo +2 -20
- package/docs/assets/js/search.js +1 -1
- package/docs/classes/mappedinlocation.html +1 -1
- package/docs/classes/mappedinnode.html +1 -1
- package/docs/classes/mapviewstore.html +20 -13
- package/docs/index.html +9 -0
- package/docs/modules.html +133 -26
- package/package.json +1 -1
|
@@ -13,4 +13,4 @@ INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
|
|
13
13
|
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
|
14
14
|
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
15
15
|
PERFORMANCE OF THIS SOFTWARE.
|
|
16
|
-
***************************************************************************** */function getMapScale$1(map){if(map.scale||map.x_scale)return 1/(map.scale||map.x_scale||1);try{if(!map.georeference)throw new Error("map "+(map.name||map.shortName||map.id)+" does not have a georeference field");if(map.georeference.length<3)throw new Error("map "+(map.name||map.shortName||map.id)+" has less than 3 georeference points, we require at least 3 for proper map scaling");var anchor1=map.georeference[0],anchor2=map.georeference[2],worldDistance=es.getDistance({latitude:anchor1.target.x,longitude:anchor1.target.y},{latitude:anchor2.target.x,longitude:anchor2.target.y}),xDiff=anchor1.control.x-anchor2.control.x,yDiff=anchor1.control.y-anchor2.control.y;return Math.sqrt(xDiff*xDiff+yDiff*yDiff)/worldDistance}catch(e){return console.error(e),1}}function getAngle(origin,destination){var xDelta=origin.x-destination.x,yDelta=origin.y-destination.y;return(Math.atan2(yDelta,xDelta)+2.5*Math.PI)%(2*Math.PI)}var ACTION_TYPE,BEARING_TYPE,VORTEX_DIRECTION_TYPE,NavigationGraph=function(){function NavigationGraph(_a){var _this=this,nodes=_a.nodes,vortexes=_a.vortexes,maps=_a.maps,_b=_a.showVortexNames,showVortexNames=void 0!==_b&&_b;this.edges={},this.mapsById=maps.map((function(map){return __assign(__assign({},map),{_scale:getMapScale$1(map)})})).reduce((function(result,map){return result[map.id]=map,result}),{});var cleanedNodes=nodes.filter((function(node){return!!_this.mapsById[node.map]})).map((function(node){return __assign(__assign({},node),{paths:node.paths?node.paths.filter((function(_a){return _a.map===node.map})):[]})}));for(var id in this.nodesById=cleanedNodes.reduce((function(result,node){return result[node.id]=node,result}),{}),this.nodesById)this.nodesById.hasOwnProperty(id)&&(this.nodesById[id].paths=this.nodesById[id].paths.filter((function(_a){var node=_a.node;return!!_this.nodesById[node]})));var cleanedVortexes=vortexes.map((function(vortex){return __assign(__assign({},vortex),{name:showVortexNames?vortex.name:vortex.type,nodes:vortex.nodes?vortex.nodes.filter((function(nodeId){return!!_this.nodesById[nodeId]})):[]})}));cleanedNodes.forEach((function(origin){_this.edges[origin.id]=origin.paths.map((function(_a){var node=_a.node,destination=_this.nodesById[node];return new Edge({angle:getAngle(origin,destination),destination:destination,distance:_this.getDistance(origin,destination),origin:origin})}))})),cleanedVortexes.forEach((function(vortex){if(null!=vortex.nodes&&0!==vortex.nodes.length)for(var originIndex=0;originIndex<vortex.nodes.length-1;){var origin_1=_this.nodesById[vortex.nodes[originIndex]];if(originIndex++,null!=origin_1)for(var destinationIndex=originIndex;destinationIndex<vortex.nodes.length;){var destination=_this.nodesById[vortex.nodes[destinationIndex]];if(destinationIndex++,null!=destination){var originElevation=_this.mapsById[origin_1.map].elevation||0,destinationElevation=_this.mapsById[destination.map].elevation||0,elevationDelta=Math.abs(originElevation-destinationElevation);_this.edges[origin_1.id].push(new Edge({destination:destination,elevationDelta:elevationDelta,origin:origin_1,vortex:vortex})),_this.edges[destination.id].push(new Edge({destination:origin_1,elevationDelta:elevationDelta,origin:destination,vortex:vortex}))}}}}))}return NavigationGraph.prototype.aStar=function(originIds,destinationNodeIds,accessible){var _this=this,origins=originIds.map((function(id){return _this.nodesById[id]})).filter((function(x){return x})),destinations=destinationNodeIds.map((function(id){return _this.nodesById[id]})).filter((function(x){return x}));if(0===origins.length||0===destinations.length)return[];var frontier=[],cameFrom={},costSoFar={};for(origins.forEach((function(origin){var priority=_this.getShortestEuclideanDistance(origin,destinations);frontier.push({origin:origin,priority:priority}),cameFrom[origin.id]=null,costSoFar[origin.id]=0})),frontier.sort((function(a,b){return a.priority-b.priority}));frontier.length>0;){var current=frontier[0];if(destinations.includes(current.origin)){for(var directions=[],step=cameFrom[current.origin.id];null!=step;){directions.push(step);var nextStep=cameFrom[step.origin.id];step=null!=nextStep?nextStep:null}return directions.reverse()}for(var _i=0,_a=this.edges[current.origin.id];_i<_a.length;_i++){var edge=_a[_i],vortexNotAccessible=edge.vortex&&!1===edge.vortex.accessible;if(!accessible||!vortexNotAccessible&&!1!==edge.origin.accessible&&!1!==edge.destination.accessible){var newCost=costSoFar[current.origin.id]+edge.weight;if(null==costSoFar[edge.destination.id]||newCost<costSoFar[edge.destination.id]){costSoFar[edge.destination.id]=newCost;var cost=newCost+this.getShortestEuclideanDistance(edge.destination,destinations);frontier.push({origin:edge.destination,priority:cost}),cameFrom[edge.destination.id]=edge}}}frontier.splice(0,1),frontier.sort((function(a,b){return a.priority-b.priority}))}return[]},NavigationGraph.prototype.getDistance=function(origin,destination){var scale,xDelta=origin.x-destination.x,yDelta=origin.y-destination.y,lengthSquared=xDelta*xDelta+yDelta*yDelta;return scale=null==this.mapsById[origin.map]?1:this.mapsById[origin.map]._scale,Math.sqrt(lengthSquared)/scale},NavigationGraph.prototype.getShortestEuclideanDistance=function(origin,destinations){var _this=this;return destinations.reduce((function(result,destination){var distance=_this.getDistance(origin,destination);return Math.min(result,distance)}),Number.MAX_VALUE)},NavigationGraph}();!function(ACTION_TYPE){ACTION_TYPE.DEPARTURE="Departure",ACTION_TYPE.TAKEVORTEX="TakeVortex",ACTION_TYPE.EXITVORTEX="ExitVortex",ACTION_TYPE.TURN="Turn",ACTION_TYPE.ARRIVAL="Arrival"}(ACTION_TYPE||(ACTION_TYPE={})),function(BEARING_TYPE){BEARING_TYPE.STRAIGHT="Straight",BEARING_TYPE.RIGHT="Right",BEARING_TYPE.SLIGHTRIGHT="SlightRight",BEARING_TYPE.LEFT="Left",BEARING_TYPE.SLIGHTLEFT="SlightLeft"}(BEARING_TYPE||(BEARING_TYPE={})),function(VORTEX_DIRECTION_TYPE){VORTEX_DIRECTION_TYPE.UP="up",VORTEX_DIRECTION_TYPE.DOWN="down",VORTEX_DIRECTION_TYPE.NONE="none"}(VORTEX_DIRECTION_TYPE||(VORTEX_DIRECTION_TYPE={}));var E_MESSAGES,Directive=function(_a){var origin=_a.origin,action=_a.action,distance=_a.distance,atLocation=_a.atLocation,instruction=_a.instruction;this.distance=0,this.node=origin,this.action=action,this.distance=distance||0,this.atLocation=atLocation,this.instruction="",instruction?this.instruction=instruction:(null!=action&&action.type===ACTION_TYPE.DEPARTURE?this.instruction=null!=atLocation?"Depart from "+atLocation.name:"Depart from current location":null!=action&&action.type===ACTION_TYPE.ARRIVAL?this.instruction=null!=atLocation?"Arrive at "+atLocation.name:"Arrive at destination":null!=action&&action.type===ACTION_TYPE.TAKEVORTEX?this.instruction="Take "+(atLocation&&atLocation.name)+" "+function(direction){switch(direction){case VORTEX_DIRECTION_TYPE.DOWN:case VORTEX_DIRECTION_TYPE.UP:return direction+" ";default:return""}}(action.direction)+"to "+action.toMap.name:null!=action&&action.type===ACTION_TYPE.EXITVORTEX?this.instruction="Exit "+(atLocation&&atLocation.name)+" at "+action.toMap.name:null!=action&&action.bearing===BEARING_TYPE.RIGHT?this.instruction="Turn right":null!=action&&action.bearing===BEARING_TYPE.SLIGHTRIGHT?this.instruction="Turn slightly right":null!=action&&action.bearing===BEARING_TYPE.STRAIGHT?this.instruction="Head straight":null!=action&&action.bearing===BEARING_TYPE.SLIGHTLEFT?this.instruction="Turn slightly left":null!=action&&action.bearing===BEARING_TYPE.LEFT&&(this.instruction="Turn left"),null!=action&&action.type===ACTION_TYPE.TURN&&atLocation&&(this.instruction+=" at "+atLocation.name))};!function(E_MESSAGES){E_MESSAGES.NO_VALID_PATH="No Valid Path Available"}(E_MESSAGES||(E_MESSAGES={}));var BEARING_CHANGE_THRESHOLD=.1*Math.PI;function differenceBetweenAngles(a,b){return((b-a+Math.PI)%(2*Math.PI)+2*Math.PI)%(2*Math.PI)-Math.PI}var Navigator=function(){function Navigator(_a){var locations=_a.locations,nodes=_a.nodes,vortexes=_a.vortexes,maps=_a.maps,showVortexNames=_a.showVortexNames;this.graph=new NavigationGraph({maps:maps,nodes:nodes,showVortexNames:showVortexNames,vortexes:vortexes}),this.locationsByNodeId=locations.reduce((function(result,location){return location.nodes&&location.nodes.forEach((function(node){result[node.node]=location})),location.polygons&&location.polygons.forEach((function(polygon){polygon.entrances&&polygon.entrances.forEach((function(nodeId){result[nodeId]=location}))})),result}),{})}return Navigator.prototype.getClosestLocationInRay=function(startingEdge,angleThreshold,distanceThreshold){void 0===angleThreshold&&(angleThreshold=.5*Math.PI),void 0===distanceThreshold&&(distanceThreshold=10);for(var totalAngle=0,totalDistance=0,currentEdge=startingEdge;Math.abs(totalAngle)<angleThreshold&&totalDistance<distanceThreshold;){for(var straightestEdge=null,deltaAngle=0,_i=0,exits_1=this.graph.edges[currentEdge.destination.id];_i<exits_1.length;_i++){var exit=exits_1[_i];if(exit.distance>0)if(null!=straightestEdge){var newDelta=-differenceBetweenAngles(currentEdge.angle,exit.angle);Math.abs(newDelta)<Math.abs(deltaAngle)&&(straightestEdge=exit,deltaAngle=newDelta)}else straightestEdge=exit,deltaAngle=-differenceBetweenAngles(currentEdge.angle,exit.angle)}if(null==straightestEdge)return null;if(Math.abs(deltaAngle)>=angleThreshold)return null;if(totalAngle+=deltaAngle,totalDistance+=straightestEdge.distance,Math.abs(totalAngle)>=angleThreshold||totalDistance>distanceThreshold)return null;var location_1=this.locationsByNodeId[straightestEdge.destination.id];if(null!=location_1)return location_1;currentEdge=straightestEdge}return null},Navigator.prototype.getDirections=function(_a){var originIds=_a.originIds,destinationNodeIds=_a.destinationNodeIds,accessible=_a.accessible,departFrom=_a.departFrom,arriveAt=_a.arriveAt,steps=this.graph.aStar(originIds,destinationNodeIds,accessible);if(0===steps.length)return{distance:0,instructions:[new Directive({distance:0,instruction:E_MESSAGES.NO_VALID_PATH})],path:[]};for(var distance=0,path=new Array(steps.length+1),i=0;i<steps.length;i++)path[i]=steps[i].origin;path[steps.length]=steps[steps.length-1].destination;var instructions=[],prevNode=null,prevEdge=null,distanceToInstruction=0,totalWalkedDistance=0,_loop_1=function(i){var edge=steps[i],origin_1=edge.origin,destination=edge.destination;if(distance+=edge.distance,distanceToInstruction+=(null==prevEdge?void 0:prevEdge.distance)||0,0===i&&instructions.push(new Directive({action:{type:ACTION_TYPE.DEPARTURE},atLocation:departFrom,distance:0,origin:origin_1})),null!=edge.vortex){var fromMap=this_1.graph.mapsById[origin_1.map],toMap=this_1.graph.mapsById[destination.map],direction=VORTEX_DIRECTION_TYPE.NONE;if(null!=fromMap.elevation&&null!=toMap.elevation){var elevationDelta=fromMap.elevation-toMap.elevation;elevationDelta>0?direction=VORTEX_DIRECTION_TYPE.DOWN:elevationDelta<0&&(direction=VORTEX_DIRECTION_TYPE.UP)}instructions.push(new Directive({action:{direction:direction,fromMap:fromMap,toMap:toMap,type:ACTION_TYPE.TAKEVORTEX},atLocation:edge.vortex,distance:distanceToInstruction,origin:origin_1})),totalWalkedDistance+=distanceToInstruction,distanceToInstruction=0}else if(null!=prevNode&&null!=prevEdge)if(null!=prevEdge.vortex){fromMap=this_1.graph.mapsById[prevNode.map],toMap=this_1.graph.mapsById[prevEdge.destination.map];instructions.push(new Directive({action:{fromMap:fromMap,toMap:toMap,type:ACTION_TYPE.EXITVORTEX},atLocation:prevEdge.vortex,distance:distanceToInstruction,origin:origin_1})),totalWalkedDistance+=distanceToInstruction,distanceToInstruction=0}else{var otherExits=this_1.graph.edges[origin_1.id].filter((function(exit){return exit.destination!==prevNode&&exit.destination!==edge.destination}));if(otherExits.length>0){var relativeBearingAngle=-differenceBetweenAngles(prevEdge.angle,edge.angle),closestOptionDelta=otherExits.reduce((function(result,exit){var newDelta=-differenceBetweenAngles(edge.angle,exit.angle);return Math.min(result,Math.abs(newDelta))}),Math.PI);if(Math.abs(relativeBearingAngle)>=BEARING_CHANGE_THRESHOLD||Math.abs(closestOptionDelta)<=BEARING_CHANGE_THRESHOLD){var relativeBearing=void 0;relativeBearing=relativeBearingAngle<=-Math.PI/4?BEARING_TYPE.RIGHT:relativeBearingAngle<=-BEARING_CHANGE_THRESHOLD?BEARING_TYPE.SLIGHTRIGHT:relativeBearingAngle<=BEARING_CHANGE_THRESHOLD?BEARING_TYPE.STRAIGHT:relativeBearingAngle<=Math.PI/4?BEARING_TYPE.SLIGHTLEFT:BEARING_TYPE.LEFT;var referenceLocation=this_1.locationsByNodeId[origin_1.id];if(referenceLocation||(referenceLocation=this_1.getClosestLocationInRay(prevEdge,.5*Math.PI,10)),null!=referenceLocation){var instruction=new Directive({action:{bearing:relativeBearing,referencePosition:"At",type:ACTION_TYPE.TURN},atLocation:referenceLocation,distance:distanceToInstruction,origin:origin_1});instruction.type=relativeBearing,instructions.push(instruction)}else instructions.push(new Directive({action:{bearing:relativeBearing,referencePosition:"At",type:ACTION_TYPE.TURN},distance:distanceToInstruction,origin:origin_1}));totalWalkedDistance+=distanceToInstruction,distanceToInstruction=0}}}i===steps.length-1&&(instructions.push(new Directive({action:{type:ACTION_TYPE.ARRIVAL},atLocation:arriveAt,distance:distance-totalWalkedDistance<0?0:distance-totalWalkedDistance,origin:edge.destination})),totalWalkedDistance+=distanceToInstruction,distanceToInstruction=0),prevNode=origin_1,prevEdge=edge},this_1=this;for(i=0;i<steps.length;i++)_loop_1(i);for(var filteredInstructions=[],previousVortexNode=null,l=instructions.length-1;l>=0;l--){var filteredInstruction=instructions[l],action=filteredInstruction.action;action&&action.type===ACTION_TYPE.TAKEVORTEX?(previousVortexNode=filteredInstruction.node,filteredInstructions.unshift(filteredInstruction)):action&&action.type===ACTION_TYPE.TURN&&null!=previousVortexNode?this.graph.getDistance(filteredInstruction.node,previousVortexNode)>5&&filteredInstructions.unshift(filteredInstruction):filteredInstructions.unshift(filteredInstruction)}return{distance:distance,instructions:filteredInstructions,path:path}},Navigator}(),dms=createCommonjsModule((function(module){var Dms={parseDMS:function(dmsStr){if("number"==typeof dmsStr&&isFinite(dmsStr))return Number(dmsStr);var deg,dms=String(dmsStr).trim().replace(/^-/,"").replace(/[NSEW]$/i,"").split(/[^0-9.,]+/);if(""==dms[dms.length-1]&&dms.splice(dms.length-1),""==dms)return NaN;switch(dms.length){case 3:deg=dms[0]/1+dms[1]/60+dms[2]/3600;break;case 2:deg=dms[0]/1+dms[1]/60;break;case 1:deg=dms[0];break;default:return NaN}return/^-|[WS]$/i.test(dmsStr.trim())&&(deg=-deg),Number(deg)},separator:"",toDMS:function(deg,format,dp){if(isNaN(deg))return null;if(void 0===format&&(format="dms"),void 0===dp)switch(format){case"d":case"deg":dp=4;break;case"dm":case"deg+min":dp=2;break;case"dms":case"deg+min+sec":dp=0;break;default:format="dms",dp=0}var dms,d,m,s;switch(deg=Math.abs(deg),format){default:case"d":case"deg":(d=deg.toFixed(dp))<100&&(d="0"+d),d<10&&(d="0"+d),dms=d+"°";break;case"dm":case"deg+min":d=Math.floor(deg),60==(m=(60*deg%60).toFixed(dp))&&(m=0,d++),m<10&&(m="0"+m),dms=(d=("000"+d).slice(-3))+"°"+Dms.separator+m+"′";break;case"dms":case"deg+min+sec":d=Math.floor(deg),m=Math.floor(3600*deg/60)%60,60==(s=(3600*deg%60).toFixed(dp))&&(s=(0).toFixed(dp),m++),60==m&&(m=0,d++),d=("000"+d).slice(-3),m=("00"+m).slice(-2),s<10&&(s="0"+s),dms=d+"°"+Dms.separator+m+"′"+Dms.separator+s+"″"}return dms},toLat:function(deg,format,dp){var lat=Dms.toDMS(deg,format,dp);return null===lat?"–":lat.slice(1)+Dms.separator+(deg<0?"S":"N")},toLon:function(deg,format,dp){var lon=Dms.toDMS(deg,format,dp);return null===lon?"–":lon+Dms.separator+(deg<0?"W":"E")},toBrng:function(deg,format,dp){deg=(Number(deg)+360)%360;var brng=Dms.toDMS(deg,format,dp);return null===brng?"–":brng.replace("360","0")},compassPoint:function(bearing,precision){void 0===precision&&(precision=3),bearing=(bearing%360+360)%360;var n=4*Math.pow(2,precision-1);return["N","NNE","NE","ENE","E","ESE","SE","SSE","S","SSW","SW","WSW","W","WNW","NW","NNW"][Math.round(bearing*n/360)%n*16/n]}};module.exports&&(module.exports=Dms)})),latlonSpherical=createCommonjsModule((function(module){var Dms;function LatLon(lat,lon){if(!(this instanceof LatLon))return new LatLon(lat,lon);this.lat=Number(lat),this.lon=Number(lon)}module.exports&&(Dms=dms),LatLon.prototype.distanceTo=function(point,radius){if(!(point instanceof LatLon))throw new TypeError("point is not LatLon object");var R=radius=void 0===radius?6371e3:Number(radius),φ1=this.lat.toRadians(),λ1=this.lon.toRadians(),φ2=point.lat.toRadians(),Δφ=φ2-φ1,Δλ=point.lon.toRadians()-λ1,a=Math.sin(Δφ/2)*Math.sin(Δφ/2)+Math.cos(φ1)*Math.cos(φ2)*Math.sin(Δλ/2)*Math.sin(Δλ/2);return R*(2*Math.atan2(Math.sqrt(a),Math.sqrt(1-a)))},LatLon.prototype.bearingTo=function(point){if(!(point instanceof LatLon))throw new TypeError("point is not LatLon object");var φ1=this.lat.toRadians(),φ2=point.lat.toRadians(),Δλ=(point.lon-this.lon).toRadians(),y=Math.sin(Δλ)*Math.cos(φ2),x=Math.cos(φ1)*Math.sin(φ2)-Math.sin(φ1)*Math.cos(φ2)*Math.cos(Δλ);return(Math.atan2(y,x).toDegrees()+360)%360},LatLon.prototype.finalBearingTo=function(point){if(!(point instanceof LatLon))throw new TypeError("point is not LatLon object");return(point.bearingTo(this)+180)%360},LatLon.prototype.midpointTo=function(point){if(!(point instanceof LatLon))throw new TypeError("point is not LatLon object");var φ1=this.lat.toRadians(),λ1=this.lon.toRadians(),φ2=point.lat.toRadians(),Δλ=(point.lon-this.lon).toRadians(),Bx=Math.cos(φ2)*Math.cos(Δλ),By=Math.cos(φ2)*Math.sin(Δλ),x=Math.sqrt((Math.cos(φ1)+Bx)*(Math.cos(φ1)+Bx)+By*By),y=Math.sin(φ1)+Math.sin(φ2),φ3=Math.atan2(y,x),λ3=λ1+Math.atan2(By,Math.cos(φ1)+Bx);return new LatLon(φ3.toDegrees(),(λ3.toDegrees()+540)%360-180)},LatLon.prototype.intermediatePointTo=function(point,fraction){if(!(point instanceof LatLon))throw new TypeError("point is not LatLon object");var φ1=this.lat.toRadians(),λ1=this.lon.toRadians(),φ2=point.lat.toRadians(),λ2=point.lon.toRadians(),sinφ1=Math.sin(φ1),cosφ1=Math.cos(φ1),sinλ1=Math.sin(λ1),cosλ1=Math.cos(λ1),sinφ2=Math.sin(φ2),cosφ2=Math.cos(φ2),sinλ2=Math.sin(λ2),cosλ2=Math.cos(λ2),Δφ=φ2-φ1,Δλ=λ2-λ1,a=Math.sin(Δφ/2)*Math.sin(Δφ/2)+Math.cos(φ1)*Math.cos(φ2)*Math.sin(Δλ/2)*Math.sin(Δλ/2),δ=2*Math.atan2(Math.sqrt(a),Math.sqrt(1-a)),A=Math.sin((1-fraction)*δ)/Math.sin(δ),B=Math.sin(fraction*δ)/Math.sin(δ),x=A*cosφ1*cosλ1+B*cosφ2*cosλ2,y=A*cosφ1*sinλ1+B*cosφ2*sinλ2,z=A*sinφ1+B*sinφ2,φ3=Math.atan2(z,Math.sqrt(x*x+y*y)),λ3=Math.atan2(y,x);return new LatLon(φ3.toDegrees(),(λ3.toDegrees()+540)%360-180)},LatLon.prototype.destinationPoint=function(distance,bearing,radius){radius=void 0===radius?6371e3:Number(radius);var δ=Number(distance)/radius,θ=Number(bearing).toRadians(),φ1=this.lat.toRadians(),λ1=this.lon.toRadians(),sinφ1=Math.sin(φ1),cosφ1=Math.cos(φ1),sinδ=Math.sin(δ),cosδ=Math.cos(δ),sinθ=Math.sin(θ),sinφ2=sinφ1*cosδ+cosφ1*sinδ*Math.cos(θ),φ2=Math.asin(sinφ2),y=sinθ*sinδ*cosφ1,x=cosδ-sinφ1*sinφ2,λ2=λ1+Math.atan2(y,x);return new LatLon(φ2.toDegrees(),(λ2.toDegrees()+540)%360-180)},LatLon.intersection=function(p1,brng1,p2,brng2){if(!(p1 instanceof LatLon))throw new TypeError("p1 is not LatLon object");if(!(p2 instanceof LatLon))throw new TypeError("p2 is not LatLon object");var φ1=p1.lat.toRadians(),λ1=p1.lon.toRadians(),φ2=p2.lat.toRadians(),λ2=p2.lon.toRadians(),θ13=Number(brng1).toRadians(),θ23=Number(brng2).toRadians(),Δφ=φ2-φ1,Δλ=λ2-λ1,δ12=2*Math.asin(Math.sqrt(Math.sin(Δφ/2)*Math.sin(Δφ/2)+Math.cos(φ1)*Math.cos(φ2)*Math.sin(Δλ/2)*Math.sin(Δλ/2)));if(0==δ12)return null;var θa=Math.acos((Math.sin(φ2)-Math.sin(φ1)*Math.cos(δ12))/(Math.sin(δ12)*Math.cos(φ1)));isNaN(θa)&&(θa=0);var θb=Math.acos((Math.sin(φ1)-Math.sin(φ2)*Math.cos(δ12))/(Math.sin(δ12)*Math.cos(φ2))),α1=θ13-(Math.sin(λ2-λ1)>0?θa:2*Math.PI-θa),α2=(Math.sin(λ2-λ1)>0?2*Math.PI-θb:θb)-θ23;if(0==Math.sin(α1)&&0==Math.sin(α2))return null;if(Math.sin(α1)*Math.sin(α2)<0)return null;var α3=Math.acos(-Math.cos(α1)*Math.cos(α2)+Math.sin(α1)*Math.sin(α2)*Math.cos(δ12)),δ13=Math.atan2(Math.sin(δ12)*Math.sin(α1)*Math.sin(α2),Math.cos(α2)+Math.cos(α1)*Math.cos(α3)),φ3=Math.asin(Math.sin(φ1)*Math.cos(δ13)+Math.cos(φ1)*Math.sin(δ13)*Math.cos(θ13)),λ3=λ1+Math.atan2(Math.sin(θ13)*Math.sin(δ13)*Math.cos(φ1),Math.cos(δ13)-Math.sin(φ1)*Math.sin(φ3));return new LatLon(φ3.toDegrees(),(λ3.toDegrees()+540)%360-180)},LatLon.prototype.crossTrackDistanceTo=function(pathStart,pathEnd,radius){if(!(pathStart instanceof LatLon))throw new TypeError("pathStart is not LatLon object");if(!(pathEnd instanceof LatLon))throw new TypeError("pathEnd is not LatLon object");var R=void 0===radius?6371e3:Number(radius),δ13=pathStart.distanceTo(this,R)/R,θ13=pathStart.bearingTo(this).toRadians(),θ12=pathStart.bearingTo(pathEnd).toRadians();return Math.asin(Math.sin(δ13)*Math.sin(θ13-θ12))*R},LatLon.prototype.alongTrackDistanceTo=function(pathStart,pathEnd,radius){if(!(pathStart instanceof LatLon))throw new TypeError("pathStart is not LatLon object");if(!(pathEnd instanceof LatLon))throw new TypeError("pathEnd is not LatLon object");var R=void 0===radius?6371e3:Number(radius),δ13=pathStart.distanceTo(this,R)/R,θ13=pathStart.bearingTo(this).toRadians(),θ12=pathStart.bearingTo(pathEnd).toRadians(),δxt=Math.asin(Math.sin(δ13)*Math.sin(θ13-θ12));return Math.acos(Math.cos(δ13)/Math.abs(Math.cos(δxt)))*Math.sign(Math.cos(θ12-θ13))*R},LatLon.prototype.maxLatitude=function(bearing){var θ=Number(bearing).toRadians(),φ=this.lat.toRadians();return Math.acos(Math.abs(Math.sin(θ)*Math.cos(φ))).toDegrees()},LatLon.crossingParallels=function(point1,point2,latitude){var φ=Number(latitude).toRadians(),φ1=point1.lat.toRadians(),λ1=point1.lon.toRadians(),φ2=point2.lat.toRadians(),Δλ=point2.lon.toRadians()-λ1,x=Math.sin(φ1)*Math.cos(φ2)*Math.cos(φ)*Math.sin(Δλ),y=Math.sin(φ1)*Math.cos(φ2)*Math.cos(φ)*Math.cos(Δλ)-Math.cos(φ1)*Math.sin(φ2)*Math.cos(φ),z=Math.cos(φ1)*Math.cos(φ2)*Math.sin(φ)*Math.sin(Δλ);if(z*z>x*x+y*y)return null;var λm=Math.atan2(-y,x),Δλi=Math.acos(z/Math.sqrt(x*x+y*y)),λi2=λ1+λm+Δλi;return{lon1:((λ1+λm-Δλi).toDegrees()+540)%360-180,lon2:(λi2.toDegrees()+540)%360-180}},LatLon.prototype.rhumbDistanceTo=function(point,radius){if(!(point instanceof LatLon))throw new TypeError("point is not LatLon object");var R=radius=void 0===radius?6371e3:Number(radius),φ1=this.lat.toRadians(),φ2=point.lat.toRadians(),Δφ=φ2-φ1,Δλ=Math.abs(point.lon-this.lon).toRadians();Δλ>Math.PI&&(Δλ-=2*Math.PI);var Δψ=Math.log(Math.tan(φ2/2+Math.PI/4)/Math.tan(φ1/2+Math.PI/4)),q=Math.abs(Δψ)>1e-11?Δφ/Δψ:Math.cos(φ1);return Math.sqrt(Δφ*Δφ+q*q*Δλ*Δλ)*R},LatLon.prototype.rhumbBearingTo=function(point){if(!(point instanceof LatLon))throw new TypeError("point is not LatLon object");var φ1=this.lat.toRadians(),φ2=point.lat.toRadians(),Δλ=(point.lon-this.lon).toRadians();Δλ>Math.PI&&(Δλ-=2*Math.PI),Δλ<-Math.PI&&(Δλ+=2*Math.PI);var Δψ=Math.log(Math.tan(φ2/2+Math.PI/4)/Math.tan(φ1/2+Math.PI/4));return(Math.atan2(Δλ,Δψ).toDegrees()+360)%360},LatLon.prototype.rhumbDestinationPoint=function(distance,bearing,radius){radius=void 0===radius?6371e3:Number(radius);var δ=Number(distance)/radius,φ1=this.lat.toRadians(),λ1=this.lon.toRadians(),θ=Number(bearing).toRadians(),Δφ=δ*Math.cos(θ),φ2=φ1+Δφ;Math.abs(φ2)>Math.PI/2&&(φ2=φ2>0?Math.PI-φ2:-Math.PI-φ2);var Δψ=Math.log(Math.tan(φ2/2+Math.PI/4)/Math.tan(φ1/2+Math.PI/4)),q=Math.abs(Δψ)>1e-11?Δφ/Δψ:Math.cos(φ1),λ2=λ1+δ*Math.sin(θ)/q;return new LatLon(φ2.toDegrees(),(λ2.toDegrees()+540)%360-180)},LatLon.prototype.rhumbMidpointTo=function(point){if(!(point instanceof LatLon))throw new TypeError("point is not LatLon object");var φ1=this.lat.toRadians(),λ1=this.lon.toRadians(),φ2=point.lat.toRadians(),λ2=point.lon.toRadians();Math.abs(λ2-λ1)>Math.PI&&(λ1+=2*Math.PI);var φ3=(φ1+φ2)/2,f1=Math.tan(Math.PI/4+φ1/2),f2=Math.tan(Math.PI/4+φ2/2),f3=Math.tan(Math.PI/4+φ3/2),λ3=((λ2-λ1)*Math.log(f3)+λ1*Math.log(f2)-λ2*Math.log(f1))/Math.log(f2/f1);return isFinite(λ3)||(λ3=(λ1+λ2)/2),LatLon(φ3.toDegrees(),(λ3.toDegrees()+540)%360-180)},LatLon.areaOf=function(polygon,radius){var R=void 0===radius?6371e3:Number(radius),closed=polygon[0].equals(polygon[polygon.length-1]);closed||polygon.push(polygon[0]);for(var nVertices=polygon.length-1,S=0,v=0;v<nVertices;v++){var φ1=polygon[v].lat.toRadians(),φ2=polygon[v+1].lat.toRadians(),Δλ=(polygon[v+1].lon-polygon[v].lon).toRadians();S+=2*Math.atan2(Math.tan(Δλ/2)*(Math.tan(φ1/2)+Math.tan(φ2/2)),1+Math.tan(φ1/2)*Math.tan(φ2/2))}(function(polygon){for(var ΣΔ=0,prevBrng=polygon[0].bearingTo(polygon[1]),v=0;v<polygon.length-1;v++){var initBrng=polygon[v].bearingTo(polygon[v+1]),finalBrng=polygon[v].finalBearingTo(polygon[v+1]);ΣΔ+=(initBrng-prevBrng+540)%360-180,ΣΔ+=(finalBrng-initBrng+540)%360-180,prevBrng=finalBrng}initBrng=polygon[0].bearingTo(polygon[1]);return ΣΔ+=(initBrng-prevBrng+540)%360-180,Math.abs(ΣΔ)<90})(polygon)&&(S=Math.abs(S)-2*Math.PI);var A=Math.abs(S*R*R);return closed||polygon.pop(),A},LatLon.prototype.equals=function(point){if(!(point instanceof LatLon))throw new TypeError("point is not LatLon object");return this.lat==point.lat&&this.lon==point.lon},LatLon.prototype.toString=function(format,dp){return Dms.toLat(this.lat,format,dp)+", "+Dms.toLon(this.lon,format,dp)},void 0===Number.prototype.toRadians&&(Number.prototype.toRadians=function(){return this*Math.PI/180}),void 0===Number.prototype.toDegrees&&(Number.prototype.toDegrees=function(){return 180*this/Math.PI}),module.exports&&(module.exports=LatLon)})),vector3d=createCommonjsModule((function(module){function Vector3d(x,y,z){if(!(this instanceof Vector3d))return new Vector3d(x,y,z);this.x=Number(x),this.y=Number(y),this.z=Number(z)}Vector3d.prototype.plus=function(v){if(!(v instanceof Vector3d))throw new TypeError("v is not Vector3d object");return new Vector3d(this.x+v.x,this.y+v.y,this.z+v.z)},Vector3d.prototype.minus=function(v){if(!(v instanceof Vector3d))throw new TypeError("v is not Vector3d object");return new Vector3d(this.x-v.x,this.y-v.y,this.z-v.z)},Vector3d.prototype.times=function(x){return x=Number(x),new Vector3d(this.x*x,this.y*x,this.z*x)},Vector3d.prototype.dividedBy=function(x){return x=Number(x),new Vector3d(this.x/x,this.y/x,this.z/x)},Vector3d.prototype.dot=function(v){if(!(v instanceof Vector3d))throw new TypeError("v is not Vector3d object");return this.x*v.x+this.y*v.y+this.z*v.z},Vector3d.prototype.cross=function(v){if(!(v instanceof Vector3d))throw new TypeError("v is not Vector3d object");return new Vector3d(this.y*v.z-this.z*v.y,this.z*v.x-this.x*v.z,this.x*v.y-this.y*v.x)},Vector3d.prototype.negate=function(){return new Vector3d(-this.x,-this.y,-this.z)},Vector3d.prototype.length=function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)},Vector3d.prototype.unit=function(){var norm=this.length();return 1==norm||0==norm?this:new Vector3d(this.x/norm,this.y/norm,this.z/norm)},Vector3d.prototype.angleTo=function(v,n){if(!(v instanceof Vector3d))throw new TypeError("v is not Vector3d object");if(!(n instanceof Vector3d||null==n))throw new TypeError("n is not Vector3d object");var sign=null==n?1:Math.sign(this.cross(v).dot(n)),sinθ=this.cross(v).length()*sign,cosθ=this.dot(v);return Math.atan2(sinθ,cosθ)},Vector3d.prototype.rotateAround=function(axis,theta){if(!(axis instanceof Vector3d))throw new TypeError("axis is not Vector3d object");for(var p1=this.unit(),p=[p1.x,p1.y,p1.z],a=axis.unit(),s=Math.sin(theta),c=Math.cos(theta),q=[[a.x*a.x*(1-c)+c,a.x*a.y*(1-c)-a.z*s,a.x*a.z*(1-c)+a.y*s],[a.y*a.x*(1-c)+a.z*s,a.y*a.y*(1-c)+c,a.y*a.z*(1-c)-a.x*s],[a.z*a.x*(1-c)-a.y*s,a.z*a.y*(1-c)+a.x*s,a.z*a.z*(1-c)+c]],qp=[0,0,0],i=0;i<3;i++)for(var j=0;j<3;j++)qp[i]+=q[i][j]*p[j];return new Vector3d(qp[0],qp[1],qp[2])},Vector3d.prototype.toString=function(precision){var p=void 0===precision?3:Number(precision);return"["+this.x.toFixed(p)+","+this.y.toFixed(p)+","+this.z.toFixed(p)+"]"},void 0===Math.sign&&(Math.sign=function(x){return 0===(x=+x)||isNaN(x)?x:x>0?1:-1}),module.exports&&(module.exports=Vector3d)})),latlonEllipsoidal=createCommonjsModule((function(module){var Vector3d,Dms;function LatLon(lat,lon,datum){if(!(this instanceof LatLon))return new LatLon(lat,lon,datum);void 0===datum&&(datum=LatLon.datum.WGS84),this.lat=Number(lat),this.lon=Number(lon),this.datum=datum}module.exports&&(Vector3d=vector3d),module.exports&&(Dms=dms),LatLon.ellipsoid={WGS84:{a:6378137,b:6356752.314245,f:1/298.257223563},Airy1830:{a:6377563.396,b:6356256.909,f:1/299.3249646},AiryModified:{a:6377340.189,b:6356034.448,f:1/299.3249646},Bessel1841:{a:6377397.155,b:6356078.962818,f:1/299.1528128},Clarke1866:{a:6378206.4,b:6356583.8,f:1/294.978698214},Clarke1880IGN:{a:6378249.2,b:6356515,f:1/293.466021294},GRS80:{a:6378137,b:6356752.31414,f:1/298.257222101},Intl1924:{a:6378388,b:6356911.946,f:1/297},WGS72:{a:6378135,b:6356750.5,f:1/298.26}},LatLon.datum={ED50:{ellipsoid:LatLon.ellipsoid.Intl1924,transform:[89.5,93.8,123.1,-1.2,0,0,.156]},Irl1975:{ellipsoid:LatLon.ellipsoid.AiryModified,transform:[-482.53,130.596,-564.557,-8.15,-1.042,-.214,-.631]},NAD27:{ellipsoid:LatLon.ellipsoid.Clarke1866,transform:[8,-160,-176,0,0,0,0]},NAD83:{ellipsoid:LatLon.ellipsoid.GRS80,transform:[1.004,-1.91,-.515,-.0015,.0267,34e-5,.011]},NTF:{ellipsoid:LatLon.ellipsoid.Clarke1880IGN,transform:[168,60,-320,0,0,0,0]},OSGB36:{ellipsoid:LatLon.ellipsoid.Airy1830,transform:[-446.448,125.157,-542.06,20.4894,-.1502,-.247,-.8421]},Potsdam:{ellipsoid:LatLon.ellipsoid.Bessel1841,transform:[-582,-105,-414,-8.3,1.04,.35,-3.08]},TokyoJapan:{ellipsoid:LatLon.ellipsoid.Bessel1841,transform:[148,-507,-685,0,0,0,0]},WGS72:{ellipsoid:LatLon.ellipsoid.WGS72,transform:[0,0,-4.5,-.22,0,0,.554]},WGS84:{ellipsoid:LatLon.ellipsoid.WGS84,transform:[0,0,0,0,0,0,0]}},LatLon.prototype.convertDatum=function(toDatum){var oldLatLon=this,transform=null;if(oldLatLon.datum==LatLon.datum.WGS84&&(transform=toDatum.transform),toDatum==LatLon.datum.WGS84){transform=[];for(var p=0;p<7;p++)transform[p]=-oldLatLon.datum.transform[p]}return null==transform&&(oldLatLon=this.convertDatum(LatLon.datum.WGS84),transform=toDatum.transform),oldLatLon.toCartesian().applyTransform(transform).toLatLonE(toDatum)},LatLon.prototype.toCartesian=function(){var φ=this.lat.toRadians(),λ=this.lon.toRadians(),a=this.datum.ellipsoid.a,f=this.datum.ellipsoid.f,sinφ=Math.sin(φ),cosφ=Math.cos(φ),sinλ=Math.sin(λ),cosλ=Math.cos(λ),eSq=2*f-f*f,ν=a/Math.sqrt(1-eSq*sinφ*sinφ);return new Vector3d((ν+0)*cosφ*cosλ,(ν+0)*cosφ*sinλ,(ν*(1-eSq)+0)*sinφ)},Vector3d.prototype.toLatLonE=function(datum){var x=this.x,y=this.y,z=this.z,a=datum.ellipsoid.a,b=datum.ellipsoid.b,f=datum.ellipsoid.f,e2=2*f-f*f,ε2=e2/(1-e2),p=Math.sqrt(x*x+y*y),tanβ=b*z/(a*p)*(1+ε2*b/Math.sqrt(p*p+z*z)),sinβ=tanβ/Math.sqrt(1+tanβ*tanβ),cosβ=sinβ/tanβ,φ=isNaN(cosβ)?0:Math.atan2(z+ε2*b*sinβ*sinβ*sinβ,p-e2*a*cosβ*cosβ*cosβ),λ=Math.atan2(y,x);return new LatLon(φ.toDegrees(),λ.toDegrees(),datum)},Vector3d.prototype.applyTransform=function(t){var x1=this.x,y1=this.y,z1=this.z,tx=t[0],ty=t[1],tz=t[2],s1=t[3]/1e6+1,rx=(t[4]/3600).toRadians(),ry=(t[5]/3600).toRadians(),rz=(t[6]/3600).toRadians();return new Vector3d(tx+x1*s1-y1*rz+z1*ry,ty+x1*rz+y1*s1-z1*rx,tz-x1*ry+y1*rx+z1*s1)},LatLon.prototype.toString=function(format,dp){return Dms.toLat(this.lat,format,dp)+", "+Dms.toLon(this.lon,format,dp)},void 0===Number.prototype.toRadians&&(Number.prototype.toRadians=function(){return this*Math.PI/180}),void 0===Number.prototype.toDegrees&&(Number.prototype.toDegrees=function(){return 180*this/Math.PI}),module.exports&&(module.exports=LatLon,module.exports.Vector3d=Vector3d)})),latlonVincenty=createCommonjsModule((function(module){var LatLon;module.exports&&(LatLon=latlonEllipsoidal),LatLon.prototype.distanceTo=function(point){if(!(point instanceof LatLon))throw new TypeError("point is not LatLon object");try{return Number(this.inverse(point).distance.toFixed(3))}catch(e){return NaN}},LatLon.prototype.initialBearingTo=function(point){if(!(point instanceof LatLon))throw new TypeError("point is not LatLon object");try{return Number(this.inverse(point).initialBearing.toFixed(9))}catch(e){return NaN}},LatLon.prototype.finalBearingTo=function(point){if(!(point instanceof LatLon))throw new TypeError("point is not LatLon object");try{return Number(this.inverse(point).finalBearing.toFixed(9))}catch(e){return NaN}},LatLon.prototype.destinationPoint=function(distance,initialBearing){return this.direct(Number(distance),Number(initialBearing)).point},LatLon.prototype.finalBearingOn=function(distance,initialBearing){return Number(this.direct(Number(distance),Number(initialBearing)).finalBearing.toFixed(9))},LatLon.prototype.direct=function(distance,initialBearing){var cos2σM,sinσ,cosσ,σʹ,φ1=this.lat.toRadians(),λ1=this.lon.toRadians(),α1=initialBearing.toRadians(),s=distance,a=this.datum.ellipsoid.a,b=this.datum.ellipsoid.b,f=this.datum.ellipsoid.f,sinα1=Math.sin(α1),cosα1=Math.cos(α1),tanU1=(1-f)*Math.tan(φ1),cosU1=1/Math.sqrt(1+tanU1*tanU1),sinU1=tanU1*cosU1,σ1=Math.atan2(tanU1,cosα1),sinα=cosU1*sinα1,cosSqα=1-sinα*sinα,uSq=cosSqα*(a*a-b*b)/(b*b),A=1+uSq/16384*(4096+uSq*(uSq*(320-175*uSq)-768)),B=uSq/1024*(256+uSq*(uSq*(74-47*uSq)-128)),σ=s/(b*A),iterations=0;do{cos2σM=Math.cos(2*σ1+σ),σʹ=σ,σ=s/(b*A)+B*(sinσ=Math.sin(σ))*(cos2σM+B/4*((cosσ=Math.cos(σ))*(2*cos2σM*cos2σM-1)-B/6*cos2σM*(4*sinσ*sinσ-3)*(4*cos2σM*cos2σM-3)))}while(Math.abs(σ-σʹ)>1e-12&&++iterations<100);if(iterations>=100)throw new Error("Formula failed to converge");var x=sinU1*sinσ-cosU1*cosσ*cosα1,φ2=Math.atan2(sinU1*cosσ+cosU1*sinσ*cosα1,(1-f)*Math.sqrt(sinα*sinα+x*x)),C=f/16*cosSqα*(4+f*(4-3*cosSqα)),λ2=(λ1+(Math.atan2(sinσ*sinα1,cosU1*cosσ-sinU1*sinσ*cosα1)-(1-C)*f*sinα*(σ+C*sinσ*(cos2σM+C*cosσ*(2*cos2σM*cos2σM-1))))+3*Math.PI)%(2*Math.PI)-Math.PI,α2=Math.atan2(sinα,-x);return α2=(α2+2*Math.PI)%(2*Math.PI),{point:new LatLon(φ2.toDegrees(),λ2.toDegrees(),this.datum),finalBearing:α2.toDegrees(),iterations:iterations}},LatLon.prototype.inverse=function(point){var p2=point;-180==this.lon&&(this.lon=180);var sinλ,cosλ,sinSqσ,sinα,C,λʹ,φ1=this.lat.toRadians(),λ1=this.lon.toRadians(),φ2=p2.lat.toRadians(),λ2=p2.lon.toRadians(),a=this.datum.ellipsoid.a,b=this.datum.ellipsoid.b,f=this.datum.ellipsoid.f,L=λ2-λ1,tanU1=(1-f)*Math.tan(φ1),cosU1=1/Math.sqrt(1+tanU1*tanU1),sinU1=tanU1*cosU1,tanU2=(1-f)*Math.tan(φ2),cosU2=1/Math.sqrt(1+tanU2*tanU2),sinU2=tanU2*cosU2,sinσ=0,cosσ=0,σ=0,cosSqα=0,cos2σM=0,λ=L,iterations=0,antimeridian=Math.abs(L)>Math.PI;do{if(0==(sinSqσ=cosU2*(sinλ=Math.sin(λ))*(cosU2*sinλ)+(cosU1*sinU2-sinU1*cosU2*(cosλ=Math.cos(λ)))*(cosU1*sinU2-sinU1*cosU2*cosλ)))break;if(cosσ=sinU1*sinU2+cosU1*cosU2*cosλ,λʹ=λ,λ=L+(1-(C=f/16*(cosSqα=1-(sinα=cosU1*cosU2*sinλ/(sinσ=Math.sqrt(sinSqσ)))*sinα)*(4+f*(4-3*cosSqα))))*f*sinα*((σ=Math.atan2(sinσ,cosσ))+C*sinσ*((cos2σM=0!=cosSqα?cosσ-2*sinU1*sinU2/cosSqα:0)+C*cosσ*(2*cos2σM*cos2σM-1))),(antimeridian?Math.abs(λ)-Math.PI:Math.abs(λ))>Math.PI)throw new Error("λ > π")}while(Math.abs(λ-λʹ)>1e-12&&++iterations<1e3);if(iterations>=1e3)throw new Error("Formula failed to converge");var uSq=cosSqα*(a*a-b*b)/(b*b),B=uSq/1024*(256+uSq*(uSq*(74-47*uSq)-128)),s=b*(1+uSq/16384*(4096+uSq*(uSq*(320-175*uSq)-768)))*(σ-B*sinσ*(cos2σM+B/4*(cosσ*(2*cos2σM*cos2σM-1)-B/6*cos2σM*(4*sinσ*sinσ-3)*(4*cos2σM*cos2σM-3)))),α1=Math.atan2(cosU2*sinλ,cosU1*sinU2-sinU1*cosU2*cosλ),α2=Math.atan2(cosU1*sinλ,-sinU1*cosU2+cosU1*sinU2*cosλ);return α1=(α1+2*Math.PI)%(2*Math.PI),α2=(α2+2*Math.PI)%(2*Math.PI),{distance:s,initialBearing:0==s?NaN:α1.toDegrees(),finalBearing:0==s?NaN:α2.toDegrees(),iterations:iterations}},void 0===Number.prototype.toRadians&&(Number.prototype.toRadians=function(){return this*Math.PI/180}),void 0===Number.prototype.toDegrees&&(Number.prototype.toDegrees=function(){return 180*this/Math.PI}),module.exports&&(module.exports=LatLon)})),latlonVectors=createCommonjsModule((function(module){var Vector3d,Dms;function LatLon(lat,lon){if(!(this instanceof LatLon))return new LatLon(lat,lon);this.lat=Number(lat),this.lon=Number(lon)}module.exports&&(Vector3d=vector3d),module.exports&&(Dms=dms),LatLon.prototype.toVector=function(){var φ=this.lat.toRadians(),λ=this.lon.toRadians(),x=Math.cos(φ)*Math.cos(λ),y=Math.cos(φ)*Math.sin(λ),z=Math.sin(φ);return new Vector3d(x,y,z)},Vector3d.prototype.toLatLonS=function(){var φ=Math.atan2(this.z,Math.sqrt(this.x*this.x+this.y*this.y)),λ=Math.atan2(this.y,this.x);return new LatLon(φ.toDegrees(),λ.toDegrees())},LatLon.prototype.greatCircle=function(bearing){var φ=this.lat.toRadians(),λ=this.lon.toRadians(),θ=Number(bearing).toRadians(),x=Math.sin(λ)*Math.cos(θ)-Math.sin(φ)*Math.cos(λ)*Math.sin(θ),y=-Math.cos(λ)*Math.cos(θ)-Math.sin(φ)*Math.sin(λ)*Math.sin(θ),z=Math.cos(φ)*Math.sin(θ);return new Vector3d(x,y,z)},Vector3d.prototype.greatCircle=function(bearing){var θ=Number(bearing).toRadians(),e=new Vector3d(0,0,1).cross(this),n=this.cross(e),eʹ=e.times(Math.cos(θ)/e.length());return n.times(Math.sin(θ)/n.length()).minus(eʹ)},LatLon.prototype.distanceTo=function(point,radius){if(!(point instanceof LatLon))throw new TypeError("point is not LatLon object");radius=void 0===radius?6371e3:Number(radius);var p1=this.toVector(),p2=point.toVector();return p1.angleTo(p2)*radius},LatLon.prototype.bearingTo=function(point){if(!(point instanceof LatLon))throw new TypeError("point is not LatLon object");var p1=this.toVector(),p2=point.toVector(),N=new Vector3d(0,0,1),c1=p1.cross(p2),c2=p1.cross(N);return(c1.angleTo(c2,p1).toDegrees()+360)%360},LatLon.prototype.midpointTo=function(point){if(!(point instanceof LatLon))throw new TypeError("point is not LatLon object");var p1=this.toVector(),p2=point.toVector();return p1.plus(p2).unit().toLatLonS()},LatLon.prototype.intermediatePointTo=function(point,fraction){if(!(point instanceof LatLon))throw new TypeError("point is not LatLon object");var n1=this.toVector(),n2=point.toVector(),sinθ=n1.cross(n2).length(),cosθ=n1.dot(n2),δi=Math.atan2(sinθ,cosθ)*Number(fraction),sinδi=Math.sin(δi),cosδi=Math.cos(δi),d=n1.cross(n2).unit().cross(n1),int=n1.times(cosδi).plus(d.times(sinδi));return new Vector3d(int.x,int.y,int.z).toLatLonS()},LatLon.prototype.intermediatePointOnChordTo=function(point,fraction){if(!(point instanceof LatLon))throw new TypeError("point is not LatLon object");var n1=this.toVector(),n2=point.toVector(),int=n1.plus(n2.minus(n1).times(Number(fraction)));return new Vector3d(int.x,int.y,int.z).toLatLonS()},LatLon.prototype.destinationPoint=function(distance,bearing,radius){radius=void 0===radius?6371e3:Number(radius);var n1=this.toVector(),δ=Number(distance)/radius,θ=Number(bearing).toRadians(),de=new Vector3d(0,0,1).cross(n1).unit(),dn=n1.cross(de),deSinθ=de.times(Math.sin(θ)),d=dn.times(Math.cos(θ)).plus(deSinθ),x=n1.times(Math.cos(δ)),y=d.times(Math.sin(δ));return x.plus(y).toLatLonS()},LatLon.intersection=function(path1start,path1brngEnd,path2start,path2brngEnd){if(!(path1start instanceof LatLon))throw new TypeError("path1start is not LatLon object");if(!(path2start instanceof LatLon))throw new TypeError("path2start is not LatLon object");if(!(path1brngEnd instanceof LatLon)&&isNaN(path1brngEnd))throw new TypeError("path1brngEnd is not LatLon object or bearing");if(!(path2brngEnd instanceof LatLon)&&isNaN(path2brngEnd))throw new TypeError("path2brngEnd is not LatLon object or bearing");var c1,c2,path1def,path2def,p1=path1start.toVector(),p2=path2start.toVector();path1brngEnd instanceof LatLon?(c1=p1.cross(path1brngEnd.toVector()),path1def="endpoint"):(c1=path1start.greatCircle(Number(path1brngEnd)),path1def="bearing"),path2brngEnd instanceof LatLon?(c2=p2.cross(path2brngEnd.toVector()),path2def="endpoint"):(c2=path2start.greatCircle(Number(path2brngEnd)),path2def="bearing");var i1=c1.cross(c2),i2=c2.cross(c1),intersection=null;switch(path1def+"+"+path2def){case"bearing+bearing":switch(Math.sign(c1.cross(p1).dot(i1))+Math.sign(c2.cross(p2).dot(i1))){case 2:intersection=i1;break;case-2:intersection=i2;break;case 0:intersection=p1.plus(p2).dot(i1)>0?i2:i1}break;case"bearing+endpoint":intersection=Math.sign(c1.cross(p1).dot(i1))>0?i1:i2;break;case"endpoint+bearing":intersection=Math.sign(c2.cross(p2).dot(i1))>0?i1:i2;break;case"endpoint+endpoint":intersection=p1.plus(p2).plus(path1brngEnd.toVector()).plus(path2brngEnd.toVector()).dot(i1)>0?i1:i2}return intersection.toLatLonS()},LatLon.prototype.crossTrackDistanceTo=function(pathStart,pathBrngEnd,radius){if(!(pathStart instanceof LatLon))throw new TypeError("pathStart is not LatLon object");var R=void 0===radius?6371e3:Number(radius),p=this.toVector();return((pathBrngEnd instanceof LatLon?pathStart.toVector().cross(pathBrngEnd.toVector()):pathStart.greatCircle(Number(pathBrngEnd))).angleTo(p)-Math.PI/2)*R},LatLon.prototype.alongTrackDistanceTo=function(pathStart,pathBrngEnd,radius){if(!(pathStart instanceof LatLon))throw new TypeError("pathStart is not LatLon object");var R=void 0===radius?6371e3:Number(radius),p=this.toVector(),gc=pathBrngEnd instanceof LatLon?pathStart.toVector().cross(pathBrngEnd.toVector()):pathStart.greatCircle(Number(pathBrngEnd)),pat=gc.cross(p).cross(gc);return pathStart.toVector().angleTo(pat,gc)*R},LatLon.prototype.nearestPointOnSegment=function(point1,point2){var p=null;if(this.isBetween(point1,point2)){var n0=this.toVector(),n1=point1.toVector(),n2=point2.toVector(),c1=n1.cross(n2),c2=n0.cross(c1);p=c1.cross(c2).toLatLonS()}else{p=this.distanceTo(point1)<this.distanceTo(point2)?point1:point2}return p},LatLon.prototype.isBetween=function(point1,point2){var n0=this.toVector(),n1=point1.toVector(),n2=point2.toVector(),δ10=n0.minus(n1),δ12=n2.minus(n1),δ20=n0.minus(n2),δ21=n1.minus(n2),extent1=δ10.dot(δ12),extent2=δ20.dot(δ21),isBetween=extent1>=0&&extent2>=0,isSameHemisphere=n0.dot(n1)>=0&&n0.dot(n2)>=0;return isBetween&&isSameHemisphere},LatLon.prototype.enclosedBy=function(polygon){var closed=polygon[0].equals(polygon[polygon.length-1]);closed||polygon.push(polygon[0]);for(var nVertices=polygon.length-1,p=this.toVector(),vectorToVertex=[],v=0;v<nVertices;v++)vectorToVertex[v]=p.minus(polygon[v].toVector());vectorToVertex.push(vectorToVertex[0]);var Σθ=0;for(v=0;v<nVertices;v++)Σθ+=vectorToVertex[v].angleTo(vectorToVertex[v+1],p);var enclosed=Math.abs(Σθ)>Math.PI;return closed||polygon.pop(),enclosed},LatLon.areaOf=function(polygon,radius){var R=null==radius?6371e3:Number(radius),closed=polygon[0].equals(polygon[polygon.length-1]);closed||polygon.push(polygon[0]);for(var n=polygon.length-1,c=[],v=0;v<n;v++){var i=polygon[v].toVector(),j=polygon[v+1].toVector();c[v]=i.cross(j)}c.push(c[0]);var n1=polygon[0].toVector(),Σα=0;for(v=0;v<n;v++)Σα+=c[v].angleTo(c[v+1],n1);var A=(n*Math.PI-Math.abs(Σα)-(n-2)*Math.PI)*R*R;return closed||polygon.pop(),A},LatLon.meanOf=function(points){for(var m=new Vector3d(0,0,0),p=0;p<points.length;p++)m=m.plus(points[p].toVector());return m.unit().toLatLonS()},LatLon.prototype.equals=function(point){if(!(point instanceof LatLon))throw new TypeError("point is not LatLon object");return this.lat==point.lat&&this.lon==point.lon},LatLon.prototype.toString=function(format,dp){return Dms.toLat(this.lat,format,dp)+", "+Dms.toLon(this.lon,format,dp)},void 0===Number.prototype.toRadians&&(Number.prototype.toRadians=function(){return this*Math.PI/180}),void 0===Number.prototype.toDegrees&&(Number.prototype.toDegrees=function(){return 180*this/Math.PI}),void 0===Math.sign&&(Math.sign=function(x){return 0===(x=+x)||isNaN(x)?x:x>0?1:-1}),module.exports&&(module.exports=LatLon,module.exports.Vector3d=Vector3d)})),utm=createCommonjsModule((function(module){var LatLon;function Utm(zone,hemisphere,easting,northing,datum,convergence,scale){if(!(this instanceof Utm))return new Utm(zone,hemisphere,easting,northing,datum,convergence,scale);if(void 0===datum&&(datum=LatLon.datum.WGS84),void 0===convergence&&(convergence=null),void 0===scale&&(scale=null),!(1<=zone&&zone<=60))throw new Error("Invalid UTM zone "+zone);if(!hemisphere.match(/[NS]/i))throw new Error("Invalid UTM hemisphere "+hemisphere);this.zone=Number(zone),this.hemisphere=hemisphere.toUpperCase(),this.easting=Number(easting),this.northing=Number(northing),this.datum=datum,this.convergence=null===convergence?null:Number(convergence),this.scale=null===scale?null:Number(scale)}module.exports&&(LatLon=latlonEllipsoidal),LatLon.prototype.toUtm=function(){if(isNaN(this.lat)||isNaN(this.lon))throw new Error("Invalid point");if(!(-80<=this.lat&&this.lat<=84))throw new Error("Outside UTM limits");var zone=Math.floor((this.lon+180)/6)+1,λ0=(6*(zone-1)-180+3).toRadians(),latBand="CDEFGHJKLMNPQRSTUVWXX".charAt(Math.floor(this.lat/8+10));31==zone&&"V"==latBand&&this.lon>=3&&(zone++,λ0+=6..toRadians()),32==zone&&"X"==latBand&&this.lon<9&&(zone--,λ0-=6..toRadians()),32==zone&&"X"==latBand&&this.lon>=9&&(zone++,λ0+=6..toRadians()),34==zone&&"X"==latBand&&this.lon<21&&(zone--,λ0-=6..toRadians()),34==zone&&"X"==latBand&&this.lon>=21&&(zone++,λ0+=6..toRadians()),36==zone&&"X"==latBand&&this.lon<33&&(zone--,λ0-=6..toRadians()),36==zone&&"X"==latBand&&this.lon>=33&&(zone++,λ0+=6..toRadians());for(var φ=this.lat.toRadians(),λ=this.lon.toRadians()-λ0,a=this.datum.ellipsoid.a,f=this.datum.ellipsoid.f,k0=.9996,e=Math.sqrt(f*(2-f)),n=f/(2-f),n2=n*n,n3=n*n2,n4=n*n3,n5=n*n4,n6=n*n5,cosλ=Math.cos(λ),sinλ=Math.sin(λ),tanλ=Math.tan(λ),τ=Math.tan(φ),σ=Math.sinh(e*Math.atanh(e*τ/Math.sqrt(1+τ*τ))),τʹ=τ*Math.sqrt(1+σ*σ)-σ*Math.sqrt(1+τ*τ),ξʹ=Math.atan2(τʹ,cosλ),ηʹ=Math.asinh(sinλ/Math.sqrt(τʹ*τʹ+cosλ*cosλ)),A=a/(1+n)*(1+1/4*n2+1/64*n4+1/256*n6),α=[null,.5*n-2/3*n2+5/16*n3+41/180*n4-127/288*n5+7891/37800*n6,13/48*n2-.6*n3+557/1440*n4+281/630*n5-1983433/1935360*n6,61/240*n3-103/140*n4+15061/26880*n5+167603/181440*n6,49561/161280*n4-179/168*n5+6601661/7257600*n6,34729/80640*n5-3418889/1995840*n6,.6650675310896665*n6],ξ=ξʹ,j=1;j<=6;j++)ξ+=α[j]*Math.sin(2*j*ξʹ)*Math.cosh(2*j*ηʹ);var η=ηʹ;for(j=1;j<=6;j++)η+=α[j]*Math.cos(2*j*ξʹ)*Math.sinh(2*j*ηʹ);var x=k0*A*η,y=k0*A*ξ,pʹ=1;for(j=1;j<=6;j++)pʹ+=2*j*α[j]*Math.cos(2*j*ξʹ)*Math.cosh(2*j*ηʹ);var qʹ=0;for(j=1;j<=6;j++)qʹ+=2*j*α[j]*Math.sin(2*j*ξʹ)*Math.sinh(2*j*ηʹ);var γ=Math.atan(τʹ/Math.sqrt(1+τʹ*τʹ)*tanλ)+Math.atan2(qʹ,pʹ),sinφ=Math.sin(φ),k=k0*(Math.sqrt(1-e*e*sinφ*sinφ)*Math.sqrt(1+τ*τ)/Math.sqrt(τʹ*τʹ+cosλ*cosλ))*(A/a*Math.sqrt(pʹ*pʹ+qʹ*qʹ));x+=5e5,y<0&&(y+=1e7),x=Number(x.toFixed(6)),y=Number(y.toFixed(6));var convergence=Number(γ.toDegrees().toFixed(9)),scale=Number(k.toFixed(12));return new Utm(zone,this.lat>=0?"N":"S",x,y,this.datum,convergence,scale)},Utm.prototype.toLatLonE=function(){var z=this.zone,h=this.hemisphere,x=this.easting,y=this.northing;if(isNaN(z)||isNaN(x)||isNaN(y))throw new Error("Invalid coordinate");var a=this.datum.ellipsoid.a,f=this.datum.ellipsoid.f,k0=.9996;x-=5e5,y="S"==h?y-1e7:y;for(var e=Math.sqrt(f*(2-f)),n=f/(2-f),n2=n*n,n3=n*n2,n4=n*n3,n5=n*n4,n6=n*n5,A=a/(1+n)*(1+1/4*n2+1/64*n4+1/256*n6),η=x/(k0*A),ξ=y/(k0*A),β=[null,.5*n-2/3*n2+37/96*n3-1/360*n4-81/512*n5+96199/604800*n6,1/48*n2+1/15*n3-437/1440*n4+46/105*n5-1118711/3870720*n6,17/480*n3-37/840*n4-209/4480*n5+5569/90720*n6,4397/161280*n4-11/504*n5-830251/7257600*n6,4583/161280*n5-108847/3991680*n6,20648693/638668800*n6],ξʹ=ξ,j=1;j<=6;j++)ξʹ-=β[j]*Math.sin(2*j*ξ)*Math.cosh(2*j*η);var ηʹ=η;for(j=1;j<=6;j++)ηʹ-=β[j]*Math.cos(2*j*ξ)*Math.sinh(2*j*η);var sinhηʹ=Math.sinh(ηʹ),sinξʹ=Math.sin(ξʹ),cosξʹ=Math.cos(ξʹ),τʹ=sinξʹ/Math.sqrt(sinhηʹ*sinhηʹ+cosξʹ*cosξʹ),τi=τʹ;do{var σi=Math.sinh(e*Math.atanh(e*τi/Math.sqrt(1+τi*τi))),τiʹ=τi*Math.sqrt(1+σi*σi)-σi*Math.sqrt(1+τi*τi),δτi=(τʹ-τiʹ)/Math.sqrt(1+τiʹ*τiʹ)*(1+(1-e*e)*τi*τi)/((1-e*e)*Math.sqrt(1+τi*τi));τi+=δτi}while(Math.abs(δτi)>1e-12);var τ=τi,φ=Math.atan(τ),λ=Math.atan2(sinhηʹ,cosξʹ),p=1;for(j=1;j<=6;j++)p-=2*j*β[j]*Math.cos(2*j*ξ)*Math.cosh(2*j*η);var q=0;for(j=1;j<=6;j++)q+=2*j*β[j]*Math.sin(2*j*ξ)*Math.sinh(2*j*η);var γ=Math.atan(Math.tan(ξʹ)*Math.tanh(ηʹ))+Math.atan2(q,p),sinφ=Math.sin(φ),k=k0*(Math.sqrt(1-e*e*sinφ*sinφ)*Math.sqrt(1+τ*τ)*Math.sqrt(sinhηʹ*sinhηʹ+cosξʹ*cosξʹ))*(A/a/Math.sqrt(p*p+q*q));λ+=(6*(z-1)-180+3).toRadians();var lat=Number(φ.toDegrees().toFixed(11)),lon=Number(λ.toDegrees().toFixed(11)),convergence=Number(γ.toDegrees().toFixed(9)),scale=Number(k.toFixed(12)),latLong=new LatLon(lat,lon,this.datum);return latLong.convergence=convergence,latLong.scale=scale,latLong},Utm.parse=function(utmCoord,datum){if(void 0===datum&&(datum=LatLon.datum.WGS84),null==(utmCoord=utmCoord.trim().match(/\S+/g))||4!=utmCoord.length)throw new Error("Invalid UTM coordinate ‘"+utmCoord+"’");return new Utm(utmCoord[0],utmCoord[1],utmCoord[2],utmCoord[3],datum)},Utm.prototype.toString=function(digits){digits=Number(digits||0);var z=this.zone<10?"0"+this.zone:this.zone,h=this.hemisphere,e=this.easting,n=this.northing;return isNaN(z)||!h.match(/[NS]/)||isNaN(e)||isNaN(n)?"":z+" "+h+" "+e.toFixed(digits)+" "+n.toFixed(digits)},void 0===Math.sinh&&(Math.sinh=function(x){return(Math.exp(x)-Math.exp(-x))/2}),void 0===Math.cosh&&(Math.cosh=function(x){return(Math.exp(x)+Math.exp(-x))/2}),void 0===Math.tanh&&(Math.tanh=function(x){return(Math.exp(x)-Math.exp(-x))/(Math.exp(x)+Math.exp(-x))}),void 0===Math.asinh&&(Math.asinh=function(x){return Math.log(x+Math.sqrt(1+x*x))}),void 0===Math.atanh&&(Math.atanh=function(x){return Math.log((1+x)/(1-x))/2}),module.exports&&(module.exports=Utm)})),mgrs=createCommonjsModule((function(module){var Utm,LatLon;function Mgrs(zone,band,e100k,n100k,easting,northing,datum){if(!(this instanceof Mgrs))return new Mgrs(zone,band,e100k,n100k,easting,northing,datum);if(void 0===datum&&(datum=LatLon.datum.WGS84),!(1<=zone&&zone<=60))throw new Error("Invalid MGRS grid reference (zone ‘"+zone+"’)");if(1!=band.length)throw new Error("Invalid MGRS grid reference (band ‘"+band+"’)");if(-1==Mgrs.latBands.indexOf(band))throw new Error("Invalid MGRS grid reference (band ‘"+band+"’)");if(1!=e100k.length)throw new Error("Invalid MGRS grid reference (e100k ‘"+e100k+"’)");if(1!=n100k.length)throw new Error("Invalid MGRS grid reference (n100k ‘"+n100k+"’)");this.zone=Number(zone),this.band=band,this.e100k=e100k,this.n100k=n100k,this.easting=Number(easting),this.northing=Number(northing),this.datum=datum}module.exports&&(Utm=utm),module.exports&&(LatLon=latlonEllipsoidal),Mgrs.latBands="CDEFGHJKLMNPQRSTUVWXX",Mgrs.e100kLetters=["ABCDEFGH","JKLMNPQR","STUVWXYZ"],Mgrs.n100kLetters=["ABCDEFGHJKLMNPQRSTUV","FGHJKLMNPQRSTUVABCDE"],Utm.prototype.toMgrs=function(){if(isNaN(this.zone+this.easting+this.northing))throw new Error("Invalid UTM coordinate ‘"+this.toString()+"’");var zone=this.zone,latlong=this.toLatLonE(),band=Mgrs.latBands.charAt(Math.floor(latlong.lat/8+10)),col=Math.floor(this.easting/1e5),e100k=Mgrs.e100kLetters[(zone-1)%3].charAt(col-1),row=Math.floor(this.northing/1e5)%20,n100k=Mgrs.n100kLetters[(zone-1)%2].charAt(row),easting=this.easting%1e5,northing=this.northing%1e5;return new Mgrs(zone,band,e100k,n100k,easting=Number(easting.toFixed(6)),northing=Number(northing.toFixed(6)))},Mgrs.prototype.toUtm=function(){for(var zone=this.zone,band=this.band,e100k=this.e100k,n100k=this.n100k,easting=this.easting,northing=this.northing,hemisphere=band>="N"?"N":"S",e100kNum=1e5*(Mgrs.e100kLetters[(zone-1)%3].indexOf(e100k)+1),n100kNum=1e5*Mgrs.n100kLetters[(zone-1)%2].indexOf(n100k),latBand=8*(Mgrs.latBands.indexOf(band)-10),nBand=1e5*Math.floor(new LatLon(latBand,0).toUtm().northing/1e5),n2M=0;n2M+n100kNum+northing<nBand;)n2M+=2e6;return new Utm(zone,hemisphere,e100kNum+easting,n2M+n100kNum+northing,this.datum)},Mgrs.parse=function(mgrsGridRef){if(!(mgrsGridRef=mgrsGridRef.trim()).match(/\s/)){var en=mgrsGridRef.slice(5);en=en.slice(0,en.length/2)+" "+en.slice(-en.length/2),mgrsGridRef=mgrsGridRef.slice(0,3)+" "+mgrsGridRef.slice(3,5)+" "+en}if(null==(mgrsGridRef=mgrsGridRef.match(/\S+/g))||4!=mgrsGridRef.length)throw new Error("Invalid MGRS grid reference ‘"+mgrsGridRef+"’");var gzd=mgrsGridRef[0],zone=gzd.slice(0,2),band=gzd.slice(2,3),en100k=mgrsGridRef[1],e100k=en100k.slice(0,1),n100k=en100k.slice(1,2),e=mgrsGridRef[2],n=mgrsGridRef[3];return new Mgrs(zone,band,e100k,n100k,e=e.length>=5?e:(e+"00000").slice(0,5),n=n.length>=5?n:(n+"00000").slice(0,5))},Mgrs.prototype.toString=function(digits){if(digits=void 0===digits?10:Number(digits),-1==[2,4,6,8,10].indexOf(digits))throw new Error("Invalid precision ‘"+digits+"’");var zone=("00"+this.zone).slice(-2),band=this.band,e100k=this.e100k,n100k=this.n100k,eRounded=Math.floor(this.easting/Math.pow(10,5-digits/2)),nRounded=Math.floor(this.northing/Math.pow(10,5-digits/2));return zone+band+" "+e100k+n100k+" "+("00000"+eRounded).slice(-digits/2)+" "+("00000"+nRounded).slice(-digits/2)},module.exports&&(module.exports=Mgrs)})),osgridref=createCommonjsModule((function(module){var LatLon;function OsGridRef(easting,northing){if(!(this instanceof OsGridRef))return new OsGridRef(easting,northing);this.easting=Number(easting),this.northing=Number(northing)}module.exports&&(LatLon=latlonEllipsoidal),OsGridRef.latLonToOsGrid=function(point){if(!(point instanceof LatLon))throw new TypeError("point is not LatLon object");point.datum!=LatLon.datum.OSGB36&&(point=point.convertDatum(LatLon.datum.OSGB36));var φ=point.lat.toRadians(),λ=point.lon.toRadians(),a=6377563.396,b=6356256.909,F0=.9996012717,φ0=49..toRadians(),λ0=(-2).toRadians(),e2=1-b*b/(a*a),n=(a-b)/(a+b),n2=n*n,n3=n*n*n,cosφ=Math.cos(φ),sinφ=Math.sin(φ),ν=a*F0/Math.sqrt(1-e2*sinφ*sinφ),ρ=a*F0*(1-e2)/Math.pow(1-e2*sinφ*sinφ,1.5),η2=ν/ρ-1,M=b*F0*((1+n+5/4*n2+5/4*n3)*(φ-φ0)-(3*n+3*n*n+21/8*n3)*Math.sin(φ-φ0)*Math.cos(φ+φ0)+(15/8*n2+15/8*n3)*Math.sin(2*(φ-φ0))*Math.cos(2*(φ+φ0))-35/24*n3*Math.sin(3*(φ-φ0))*Math.cos(3*(φ+φ0))),cos3φ=cosφ*cosφ*cosφ,cos5φ=cos3φ*cosφ*cosφ,tan2φ=Math.tan(φ)*Math.tan(φ),tan4φ=tan2φ*tan2φ,Δλ=λ-λ0,Δλ2=Δλ*Δλ,Δλ3=Δλ2*Δλ,Δλ4=Δλ3*Δλ,Δλ5=Δλ4*Δλ,N=M+-1e5+ν/2*sinφ*cosφ*Δλ2+ν/24*sinφ*cos3φ*(5-tan2φ+9*η2)*Δλ4+ν/720*sinφ*cos5φ*(61-58*tan2φ+tan4φ)*(Δλ5*Δλ),E=4e5+ν*cosφ*Δλ+ν/6*cos3φ*(ν/ρ-tan2φ)*Δλ3+ν/120*cos5φ*(5-18*tan2φ+tan4φ+14*η2-58*tan2φ*η2)*Δλ5;return N=Number(N.toFixed(3)),new OsGridRef(E=Number(E.toFixed(3)),N)},OsGridRef.osGridToLatLon=function(gridref,datum){if(!(gridref instanceof OsGridRef))throw new TypeError("gridref is not OsGridRef object");void 0===datum&&(datum=LatLon.datum.WGS84);var E=gridref.easting,N=gridref.northing,a=6377563.396,b=6356256.909,F0=.9996012717,φ0=49..toRadians(),λ0=(-2).toRadians(),e2=1-b*b/(a*a),n=(a-b)/(a+b),n2=n*n,n3=n*n*n,φ=φ0,M=0;do{M=b*F0*((1+n+5/4*n2+5/4*n3)*((φ=(N- -1e5-M)/(a*F0)+φ)-φ0)-(3*n+3*n*n+21/8*n3)*Math.sin(φ-φ0)*Math.cos(φ+φ0)+(15/8*n2+15/8*n3)*Math.sin(2*(φ-φ0))*Math.cos(2*(φ+φ0))-35/24*n3*Math.sin(3*(φ-φ0))*Math.cos(3*(φ+φ0)))}while(N- -1e5-M>=1e-5);var cosφ=Math.cos(φ),sinφ=Math.sin(φ),ν=a*F0/Math.sqrt(1-e2*sinφ*sinφ),ρ=a*F0*(1-e2)/Math.pow(1-e2*sinφ*sinφ,1.5),η2=ν/ρ-1,tanφ=Math.tan(φ),tan2φ=tanφ*tanφ,tan4φ=tan2φ*tan2φ,secφ=1/cosφ,ν3=ν*ν*ν,ν5=ν3*ν*ν,dE=E-4e5,dE2=dE*dE,dE3=dE2*dE,dE4=dE2*dE2,dE5=dE3*dE2,λ=λ0+secφ/ν*dE-secφ/(6*ν3)*(ν/ρ+2*tan2φ)*dE3+secφ/(120*ν5)*(5+28*tan2φ+24*tan4φ)*dE5-secφ/(5040*(ν5*ν*ν))*(61+662*tan2φ+1320*tan4φ+720*(tan4φ*tan2φ))*(dE5*dE2),point=new LatLon((φ=φ-tanφ/(2*ρ*ν)*dE2+tanφ/(24*ρ*ν3)*(5+3*tan2φ+η2-9*tan2φ*η2)*dE4-tanφ/(720*ρ*ν5)*(61+90*tan2φ+45*tan4φ)*(dE4*dE2)).toDegrees(),λ.toDegrees(),LatLon.datum.OSGB36);return datum!=LatLon.datum.OSGB36&&(point=point.convertDatum(datum)),point},OsGridRef.parse=function(gridref){var match=(gridref=String(gridref).trim()).match(/^(\d+),\s*(\d+)$/);if(match)return new OsGridRef(match[1],match[2]);if(!(match=gridref.match(/^[A-Z]{2}\s*[0-9]+\s*[0-9]+$/i)))throw new Error("Invalid grid reference");var l1=gridref.toUpperCase().charCodeAt(0)-"A".charCodeAt(0),l2=gridref.toUpperCase().charCodeAt(1)-"A".charCodeAt(0);l1>7&&l1--,l2>7&&l2--;var e100km=(l1-2)%5*5+l2%5,n100km=19-5*Math.floor(l1/5)-Math.floor(l2/5),en=gridref.slice(2).trim().split(/\s+/);if(1==en.length&&(en=[en[0].slice(0,en[0].length/2),en[0].slice(en[0].length/2)]),e100km<0||e100km>6||n100km<0||n100km>12)throw new Error("Invalid grid reference");if(2!=en.length)throw new Error("Invalid grid reference");if(en[0].length!=en[1].length)throw new Error("Invalid grid reference");return en[0]=(en[0]+"00000").slice(0,5),en[1]=(en[1]+"00000").slice(0,5),new OsGridRef(e100km+en[0],n100km+en[1])},OsGridRef.prototype.toString=function(digits){if(digits=void 0===digits?10:Number(digits),isNaN(digits)||digits%2!=0||digits>16)throw new RangeError("Invalid precision ‘"+digits+"’");var e=this.easting,n=this.northing;if(isNaN(e)||isNaN(n))throw new Error("Invalid grid reference");if(0==digits){var eInt=Math.floor(e),eDec=e-eInt,nInt=Math.floor(n),nDec=n-nInt;return("000000"+eInt).slice(-6)+(eDec>0?eDec.toFixed(3).slice(1):"")+","+((nInt<1e6?("000000"+nInt).slice(-6):nInt)+(nDec>0?nDec.toFixed(3).slice(1):""))}var e100k=Math.floor(e/1e5),n100k=Math.floor(n/1e5);if(e100k<0||e100k>6||n100k<0||n100k>12)return"";var l1=19-n100k-(19-n100k)%5+Math.floor((e100k+10)/5),l2=5*(19-n100k)%25+e100k%5;l1>7&&l1++,l2>7&&l2++;var letterPair=String.fromCharCode(l1+"A".charCodeAt(0),l2+"A".charCodeAt(0));return e=Math.floor(e%1e5/Math.pow(10,5-digits/2)),n=Math.floor(n%1e5/Math.pow(10,5-digits/2)),letterPair+" "+(e=("00000000"+e).slice(-digits/2))+" "+(n=("00000000"+n).slice(-digits/2))},module.exports&&(module.exports=OsGridRef)})),npm=createCommonjsModule((function(module,exports){for(var prop in exports.LatLonSpherical=latlonSpherical,exports.LatLonEllipsoidal=latlonEllipsoidal,latlonVincenty)exports.LatLonEllipsoidal[prop]=latlonVincenty[prop];exports.LatLonVectors=latlonVectors,exports.Vector3d=vector3d,exports.Utm=utm,exports.Mgrs=mgrs,exports.OsGridRef=osgridref,exports.Dms=dms})),MappedinDestinationSet=function MappedinDestinationSet(destinations){_classCallCheck(this,MappedinDestinationSet),_defineProperty(this,"destinations",[]),this.destinations=destinations},_data$e=new WeakMap,_mappedin$8=new WeakMap,MappedinDirections=function(){function MappedinDirections(mappedin,directions){var _this=this;_classCallCheck(this,MappedinDirections),_data$e.set(this,{writable:!0,value:void 0}),_mappedin$8.set(this,{writable:!0,value:void 0}),_defineProperty(this,"distance",0),_defineProperty(this,"path",[]),_defineProperty(this,"instructions",[]),_classPrivateFieldSet(this,_mappedin$8,mappedin),_classPrivateFieldSet(this,_data$e,directions),this.distance=directions.distance,this.instructions=directions.instructions.map((function(i){var _i$atLocation,_classPrivateFieldGet2,_classPrivateFieldGet3,_i$node,_classPrivateFieldGet4,_classPrivateFieldGet5,_instruction$action,_instruction$action2,_classPrivateFieldGet6,_instruction$action3,_classPrivateFieldGet7,_instruction$action4,instruction=_objectSpread2(_objectSpread2({},i),{},{action:_objectSpread2({},i.action),atLocation:null!==(_i$atLocation=i.atLocation)&&void 0!==_i$atLocation&&_i$atLocation.id?null===(_classPrivateFieldGet2=_classPrivateFieldGet(_this,_mappedin$8))||void 0===_classPrivateFieldGet2||null===(_classPrivateFieldGet3=_classPrivateFieldGet2._vortexesById)||void 0===_classPrivateFieldGet3?void 0:_classPrivateFieldGet3[i.atLocation.id]:void 0,node:null!==(_i$node=i.node)&&void 0!==_i$node&&_i$node.id?null===(_classPrivateFieldGet4=_classPrivateFieldGet(_this,_mappedin$8))||void 0===_classPrivateFieldGet4||null===(_classPrivateFieldGet5=_classPrivateFieldGet4._nodesById)||void 0===_classPrivateFieldGet5?void 0:_classPrivateFieldGet5[i.node.id]:void 0});(null===(_instruction$action=instruction.action)||void 0===_instruction$action?void 0:_instruction$action.type)!==ACTION_TYPE.TAKEVORTEX&&(null===(_instruction$action2=instruction.action)||void 0===_instruction$action2?void 0:_instruction$action2.type)!==ACTION_TYPE.EXITVORTEX||(instruction.action.fromMap=null===(_classPrivateFieldGet6=_classPrivateFieldGet(_this,_mappedin$8)._mapsById)||void 0===_classPrivateFieldGet6?void 0:_classPrivateFieldGet6[null===(_instruction$action3=instruction.action)||void 0===_instruction$action3?void 0:_instruction$action3.fromMap.id],instruction.action.toMap=null===(_classPrivateFieldGet7=_classPrivateFieldGet(_this,_mappedin$8)._mapsById)||void 0===_classPrivateFieldGet7?void 0:_classPrivateFieldGet7[null===(_instruction$action4=instruction.action)||void 0===_instruction$action4?void 0:_instruction$action4.toMap.id]);return instruction})),this.path=directions.path.map((function(node){var _classPrivateFieldGet8,_classPrivateFieldGet9;return null===(_classPrivateFieldGet8=_classPrivateFieldGet(_this,_mappedin$8))||void 0===_classPrivateFieldGet8||null===(_classPrivateFieldGet9=_classPrivateFieldGet8._nodesById)||void 0===_classPrivateFieldGet9?void 0:_classPrivateFieldGet9[node.id]}))}return _createClass(MappedinDirections,[{key:"toJSON",value:function(){return _classPrivateFieldGet(this,_data$e)}}]),MappedinDirections}(),_mappedin$7=new WeakMap,MappedinNavigatable=function(){function MappedinNavigatable(mappedin){_classCallCheck(this,MappedinNavigatable),_mappedin$7.set(this,{writable:!0,value:void 0}),_classPrivateFieldSet(this,_mappedin$7,mappedin)}return _createClass(MappedinNavigatable,[{key:"directionsTo",value:function(destination,options,cb){if(destination instanceof MappedinDestinationSet){for(var allDirections=[],currentStepDeparture=this,i=0;i<destination.destinations.length;i++){var currentStepDestination=destination.destinations[i],departureNodes=getNodesForNavigatable(currentStepDeparture),destinationNodes=getNodesForNavigatable(currentStepDestination),directionsObject=_classPrivateFieldGet(this,_mappedin$7).navigator.getDirections({originIds:departureNodes,destinationNodeIds:destinationNodes,accessible:(null==options?void 0:options.accessible)||!1}),_directions=new MappedinDirections(_classPrivateFieldGet(this,_mappedin$7),directionsObject);allDirections.push(_directions),currentStepDeparture=currentStepDestination}return allDirections}var _departureNodes=getNodesForNavigatable(this),_destinationNodes=getNodesForNavigatable(destination),_directionsObject=_classPrivateFieldGet(this,_mappedin$7).navigator.getDirections({originIds:_departureNodes,destinationNodeIds:_destinationNodes,accessible:(null==options?void 0:options.accessible)||!1}),_directions2=new MappedinDirections(_classPrivateFieldGet(this,_mappedin$7),_directionsObject);if("function"!=typeof cb)return _directions2;cb(null,_directions2)}},{key:"distanceTo",value:function(destination,options,cb){var directions=this.directionsTo(destination,options);return"function"!=typeof cb?(null==directions?void 0:directions.distance)||0:(cb(null,(null==directions?void 0:directions.distance)||0),0)}},{key:"directionsToCallback",value:function(destination,options,cb){var directions=this.directionsTo(destination,options);if("function"!=typeof cb)return directions;cb(null,directions)}}]),MappedinNavigatable}();var _mappedin$6=new WeakMap,_data$d=new WeakMap,_cache$7=new WeakMap,_polygons=new WeakMap,_nodes=new WeakMap,_parent=new WeakMap,MappedinLocation=function(_MappedinNavigatable){_inherits(MappedinLocation,MappedinNavigatable);var _fetch,_super=_createSuper(MappedinLocation);function MappedinLocation(mappedin,data){var _this;return _classCallCheck(this,MappedinLocation),_this=_super.call(this,mappedin),_mappedin$6.set(_assertThisInitialized(_this),{writable:!0,value:void 0}),_data$d.set(_assertThisInitialized(_this),{writable:!0,value:void 0}),_cache$7.set(_assertThisInitialized(_this),{writable:!0,value:{}}),_defineProperty(_assertThisInitialized(_this),"states",void 0),_defineProperty(_assertThisInitialized(_this),"id",""),_defineProperty(_assertThisInitialized(_this),"name",""),_defineProperty(_assertThisInitialized(_this),"type",""),_defineProperty(_assertThisInitialized(_this),"description",void 0),_defineProperty(_assertThisInitialized(_this),"sortOrder",void 0),_defineProperty(_assertThisInitialized(_this),"logo",void 0),_defineProperty(_assertThisInitialized(_this),"phone",void 0),_defineProperty(_assertThisInitialized(_this),"social",void 0),_defineProperty(_assertThisInitialized(_this),"color",void 0),_defineProperty(_assertThisInitialized(_this),"shortName",void 0),_defineProperty(_assertThisInitialized(_this),"detailsUrl",void 0),_defineProperty(_assertThisInitialized(_this),"tags",void 0),_defineProperty(_assertThisInitialized(_this),"externalId",void 0),_defineProperty(_assertThisInitialized(_this),"picture",void 0),_defineProperty(_assertThisInitialized(_this),"operationHours",void 0),_defineProperty(_assertThisInitialized(_this),"siblingGroups",void 0),_defineProperty(_assertThisInitialized(_this),"gallery",void 0),_defineProperty(_assertThisInitialized(_this),"categories",[]),_polygons.set(_assertThisInitialized(_this),{writable:!0,value:void 0}),_nodes.set(_assertThisInitialized(_this),{writable:!0,value:[]}),_parent.set(_assertThisInitialized(_this),{writable:!0,value:void 0}),_classPrivateFieldSet(_assertThisInitialized(_this),_mappedin$6,mappedin),_classPrivateFieldSet(_assertThisInitialized(_this),_data$d,data),Object.assign(_assertThisInitialized(_this),data),_this}return _createClass(MappedinLocation,[{key:"polygons",get:function(){var cache=_classPrivateFieldGet(this,_cache$7).polygons;if(void 0!==cache)return cache;var related=[],through=_classPrivateFieldGet(this,_polygons),index=_classPrivateFieldGet(this,_mappedin$6)._polygonsById;if(Array.isArray(through))for(var i=0,iLen=through.length;i<iLen;++i){var polygon=index[through[i].id];null!=polygon&&polygon.geometry.visible&&related.push(polygon)}return _classPrivateFieldGet(this,_cache$7).polygons=related,related},set:function(polygons){_classPrivateFieldSet(this,_polygons,polygons)}},{key:"rank",get:function(){var _this2=this,cache=_classPrivateFieldGet(this,_cache$7).rank;if(void 0!==cache)return cache;var rankings=_classPrivateFieldGet(this,_mappedin$6).locationRankings;if(!rankings||!rankings.locations)return null;var thisRankData=rankings.locations.find((function(datum){return datum.ids.find((function(x){return x===_this2.id}))}));return thisRankData?(_classPrivateFieldGet(this,_cache$7).rank=thisRankData.score,thisRankData.score):null}},{key:"nodes",get:function(){var cache=_classPrivateFieldGet(this,_cache$7).nodes;if(void 0!==cache)return cache;var related=[],through=_classPrivateFieldGet(this,_nodes),index=_classPrivateFieldGet(this,_mappedin$6)._nodesById;if(through)for(var i=0,iLen=through.length;i<iLen;++i){var node=index[through[i].node];null!=node&&related.push(node)}return _classPrivateFieldGet(this,_cache$7).nodes=related,related},set:function(nodes){_classPrivateFieldSet(this,_nodes,nodes)}},{key:"parent",get:function(){var related,cache=_classPrivateFieldGet(this,_cache$7).parent;if(void 0!==cache)return cache;var locations=_classPrivateFieldGet(this,_mappedin$6)._locationsById,parentId=_classPrivateFieldGet(this,_parent);return void 0!==parentId&&(related=locations[parentId]),_classPrivateFieldGet(this,_cache$7).parent=related,related},set:function(parent){_classPrivateFieldSet(this,_parent,parent)}},{key:"state",get:function(){return function(location,states){var date=arguments.length>2&&void 0!==arguments[2]?arguments[2]:new Date;if(location.states){var now=date||new Date,currentState=location.states.find((function(state){var start=new Date(state.start||0),end=new Date(state.end||"9999-12-31T00:00:00.000Z");return start<now&&end>now}));if(currentState)return states.find((function(state){return state.value===currentState.type}))}}(this,_classPrivateFieldGet(this,_mappedin$6).locationStates)}},{key:"clone",value:function(){return new MappedinLocation(_classPrivateFieldGet(this,_mappedin$6),_classPrivateFieldGet(this,_data$d))}},{key:"nodeOperationHours",get:function(){var cache=_classPrivateFieldGet(this,_cache$7).nodeOperationHours;if(void 0!==cache)return cache;if(null==this.nodes)return{};var result=_classPrivateFieldGet(this,_data$d).nodes.reduce((function(map,node){return null!=node.operationHours&&(map[node.node]=node.operationHours),map}),{});return _classPrivateFieldGet(this,_cache$7).nodeOperationHours=result,result}},{key:"toJSON",value:function(){return _classPrivateFieldGet(this,_data$d)}}],[{key:"hydrate",value:function(locations,mappedin){return locations.map((function(l){return new MappedinLocation(mappedin,l)}))}},{key:"fetch",value:(_fetch=_asyncToGenerator(regeneratorRuntime.mark((function _callee(mappedin){var fields,query,data;return regeneratorRuntime.wrap((function(_context){for(;;)switch(_context.prev=_context.next){case 0:return fields=mappedin.options.things.locations.slice(),mappedin.options.things.categories&&addToSet(fields,"categories"),mappedin.options.things.nodes&&addToSet(fields,"nodes"),mappedin.options.things.polygons&&addToSet(fields,"polygons"),mappedin.options.things.locationStates&&addToSet(fields,"states"),query={fields:fields,venue:mappedin.options.venue},_context.prev=6,_context.next=9,getArray(mappedin.options,"location",query);case 9:return data=_context.sent,mappedin.options.includeHidden||(data=data.filter((function(datum){return!datum.hidden}))),_context.abrupt("return",data.map((function(l){return new MappedinLocation(mappedin,l)})));case 14:return _context.prev=14,_context.t0=_context.catch(6),console.error("Fetch Locations:",_context.t0),_context.abrupt("return",[]);case 18:case"end":return _context.stop()}}),_callee,null,[[6,14]])}))),function(_x){return _fetch.apply(this,arguments)})}]),MappedinLocation}(),_mappedin$5=new WeakMap,_data$c=new WeakMap,_cache$6=new WeakMap,_entrances=new WeakMap,MappedinPolygon=function(_MappedinNavigatable){_inherits(MappedinPolygon,MappedinNavigatable);var _fetch,_super=_createSuper(MappedinPolygon);function MappedinPolygon(mappedin,data){var _this;return _classCallCheck(this,MappedinPolygon),_this=_super.call(this,mappedin),_mappedin$5.set(_assertThisInitialized(_this),{writable:!0,value:void 0}),_data$c.set(_assertThisInitialized(_this),{writable:!0,value:void 0}),_cache$6.set(_assertThisInitialized(_this),{writable:!0,value:{}}),_defineProperty(_assertThisInitialized(_this),"geometry",void 0),_defineProperty(_assertThisInitialized(_this),"id",""),_defineProperty(_assertThisInitialized(_this),"map",""),_defineProperty(_assertThisInitialized(_this),"layer",void 0),_defineProperty(_assertThisInitialized(_this),"layerId",void 0),_defineProperty(_assertThisInitialized(_this),"name",void 0),_defineProperty(_assertThisInitialized(_this),"externalId",void 0),_defineProperty(_assertThisInitialized(_this),"vertexes",void 0),_entrances.set(_assertThisInitialized(_this),{writable:!0,value:void 0}),_classPrivateFieldSet(_assertThisInitialized(_this),_mappedin$5,mappedin),_classPrivateFieldSet(_assertThisInitialized(_this),_data$c,data),Object.assign(_assertThisInitialized(_this),data),_this}return _createClass(MappedinPolygon,[{key:"locations",get:function(){var cache=_classPrivateFieldGet(this,_cache$6).locations;if(void 0!==cache)return cache;for(var related=[],locations=_classPrivateFieldGet(this,_mappedin$5).locations,id=this.id,i=0,iLen=locations.length;i<iLen;++i){var location=locations[i],through=location.polygons;if(Array.isArray(through))for(var j=0,jLen=through.length;j<jLen;++j){if(through[j].id===id){related.push(location);break}}}return _classPrivateFieldGet(this,_cache$6).locations=related,related}},{key:"entrances",get:function(){var cache=_classPrivateFieldGet(this,_cache$6).entrances;if(void 0!==cache)return cache;var related=[],through=_classPrivateFieldGet(this,_entrances),index=_classPrivateFieldGet(this,_mappedin$5)._nodesById;if(Array.isArray(through)){for(var i=0,iLen=through.length;i<iLen;++i){var node=index[through[i].id];null!=node&&related.push(node)}return _classPrivateFieldGet(this,_cache$6).entrances=related,related}return[]},set:function(entrances){_classPrivateFieldSet(this,_entrances,entrances)}},{key:"rank",get:function(){var _this2=this,cache=_classPrivateFieldGet(this,_cache$6).rank;if(void 0!==cache)return cache;var rankings=_classPrivateFieldGet(this,_mappedin$5).rankings;if(!rankings||!rankings.polygons)return null;var thisRankData=rankings.polygons.find((function(x){return x.polygonId===_this2.id}));return thisRankData?(_classPrivateFieldGet(this,_cache$6).rank={score:thisRankData.score,node:thisRankData.entranceNodeId},{score:thisRankData.score,node:thisRankData.entranceNodeId}):(_classPrivateFieldGet(this,_cache$6).rank=null,null)}},{key:"toJSON",value:function(){return _classPrivateFieldGet(this,_data$c)}}],[{key:"hydrate",value:function(polygons,mappedin){return polygons.map((function(p){return new MappedinPolygon(mappedin,p)}))}},{key:"fetch",value:(_fetch=_asyncToGenerator(regeneratorRuntime.mark((function _callee(mappedin){var fields,query,data;return regeneratorRuntime.wrap((function(_context){for(;;)switch(_context.prev=_context.next){case 0:return fields=mappedin.options.things.polygons.slice(),mappedin.options.things.maps&&addToSet(fields,"map"),mappedin.options.things.nodes&&addToSet(fields,"entrances"),query={fields:fields,perspective:mappedin.options.do2D&&mappedin.options.perspective||void 0,venue:mappedin.options.venue},_context.prev=4,_context.next=7,getArray(mappedin.options,"polygon",query);case 7:return data=_context.sent,_context.abrupt("return",data.filter((function(item){return item.geometry.visible})).map((function(item){return new MappedinPolygon(mappedin,item)})));case 11:return _context.prev=11,_context.t0=_context.catch(4),console.error("Fetch Polygons:",_context.t0),_context.abrupt("return",[]);case 15:case"end":return _context.stop()}}),_callee,null,[[4,11]])}))),function(_x){return _fetch.apply(this,arguments)})}]),MappedinPolygon}();function isGatewayKey(key){return/^[\da-f]{24}$/i.test(key)}function stringifyQuery(query){var gateway=arguments.length>1&&void 0!==arguments[1]&&arguments[1],queryString="";if(null!=query)for(var delim="?",keys=gateway?Object.keys(query).filter((function(key){return!["slug","venue"].includes(key)})):Object.keys(query),i=0,iLen=keys.length;i<iLen;++i){var name=keys[i],value=query[name];null!=value&&(queryString+=delim+encodeURIComponent(name)+"="+encodeURIComponent(value),delim="&")}return queryString}function buildUrl(options,pathname,query){var _options$baseUrl,_options$baseUrl2,supplementary=arguments.length>3&&void 0!==arguments[3]&&arguments[3];return supplementary?""+options.supplementaryUrl+pathname+"?venue="+(query.venue||query.slug):null!==(_options$baseUrl=options.baseUrl)&&void 0!==_options$baseUrl&&_options$baseUrl.includes("gateway")?""+options.baseUrl+pathname+"/"+(query.venue||query.slug)+stringifyQuery(query,null===(_options$baseUrl2=options.baseUrl)||void 0===_options$baseUrl2?void 0:_options$baseUrl2.includes("gateway")):options.baseUrl+pathname+stringifyQuery(query)}function getArray(_x,_x2,_x3){return _getArray.apply(this,arguments)}function _getArray(){return(_getArray=_asyncToGenerator(regeneratorRuntime.mark((function _callee(options,pathname,query){var supplementary,_args=arguments;return regeneratorRuntime.wrap((function(_context){for(;;)switch(_context.prev=_context.next){case 0:return supplementary=_args.length>3&&void 0!==_args[3]&&_args[3],_context.abrupt("return",getObject(options,pathname,query,supplementary,!0));case 2:case"end":return _context.stop()}}),_callee)})))).apply(this,arguments)}function getObject(_x4,_x5,_x6){return _getObject.apply(this,arguments)}function _getObject(){return(_getObject=_asyncToGenerator(regeneratorRuntime.mark((function _callee2(options,pathname,query){var supplementary,isExpectingArray,url,res,_args2=arguments;return regeneratorRuntime.wrap((function(_context2){for(;;)switch(_context2.prev=_context2.next){case 0:return supplementary=_args2.length>3&&void 0!==_args2[3]&&_args2[3],isExpectingArray=_args2.length>4&&void 0!==_args2[4]&&_args2[4],url=buildUrl(options,pathname,query,supplementary),_context2.next=5,generateAPIRequest(options,url,supplementary);case 5:if(res=_context2.sent,isExpectingArray||!Array.isArray(res)){_context2.next=12;break}if(1!==res.length){_context2.next=9;break}return _context2.abrupt("return",res[0]);case 9:throw new Error("Invalid response object");case 12:return _context2.abrupt("return",res);case 13:case"end":return _context2.stop()}}),_callee2)})))).apply(this,arguments)}function generateAPIRequest(_x7,_x8){return _generateAPIRequest.apply(this,arguments)}function _generateAPIRequest(){return(_generateAPIRequest=_asyncToGenerator(regeneratorRuntime.mark((function _callee3(options,url){var supplementary,requestOptions,headers,req,response,_args3=arguments;return regeneratorRuntime.wrap((function(_context3){for(;;)switch(_context3.prev=_context3.next){case 0:return supplementary=_args3.length>2&&void 0!==_args3[2]&&_args3[2],requestOptions={language:options.language,clientId:options.clientId,clientSecret:options.clientSecret},supplementary&&delete requestOptions.language,requestOptions.language&&(url+="&lang="+encodeURIComponent(requestOptions.language)),(headers=options.headers)["Content-Type"]="text/json",options.authorization&&(headers.Authorization=options.authorization),requestOptions.language&&(headers["Accept-Language"]=requestOptions.language),req={method:"GET",headers:headers},_context3.next=11,fetch(url,req);case 11:if((response=_context3.sent).ok){_context3.next=14;break}throw new Error(response.status+" "+response.statusText);case 14:return _context3.abrupt("return",response.json());case 15:case"end":return _context3.stop()}}),_callee3)})))).apply(this,arguments)}function addToSet(array,value){array.indexOf(value)<0&&array.push(value)}function getNodesForNavigatable(obj){return obj instanceof MappedinPolygon?obj.entrances.map((function(node){return node.id})):obj instanceof MappedinLocation?(null===(_obj$nodes=obj.nodes)||void 0===_obj$nodes?void 0:_obj$nodes.map((function(node){return node.id})))||[]:[obj.id];var _obj$nodes}function preloadImagesFromBundle(_x9){return _preloadImagesFromBundle.apply(this,arguments)}function _preloadImagesFromBundle(){return(_preloadImagesFromBundle=_asyncToGenerator(regeneratorRuntime.mark((function _callee4(data){var imageBlobMap,maps,images,scenes,polygons,promises;return regeneratorRuntime.wrap((function(_context4){for(;;)switch(_context4.prev=_context4.next){case 0:if(imageBlobMap={},maps=data.maps,images=data.images,scenes=data.scenes,polygons=data.polygons,null==images){_context4.next=12;break}return _context4.prev=3,promises=Object.keys(images).map((function(filename){return fetch("data:image/png;base64,"+images[filename]).then((function(res){return res.blob()})).then((function(blob){imageBlobMap[filename]=blob})).catch((function(e){console.error(e)}))})),_context4.next=7,Promise.all(promises);case 7:_context4.next=12;break;case 9:_context4.prev=9,_context4.t0=_context4.catch(3),console.error(_context4.t0);case 12:return maps.forEach((function(m){null!=scenes&&(m.scene.polygons=scenes[m.id]),null!=images&&(m.scene.images=m.scene.images.map((function(_ref5){var filename=_ref5.filename;return{filename:filename,url:imageBlobMap[filename]}})),m.scene.polygons.forEach((function(p){var _p$image;null!=p&&null!==(_p$image=p.image)&&void 0!==_p$image&&_p$image.url&&(p.image.url=imageBlobMap[p.image.url.split("uploads/")[1]])})))})),null!=images&&polygons.forEach((function(p){var _p$image2;null!=p&&null!==(_p$image2=p.image)&&void 0!==_p$image2&&_p$image2.url&&(p.image.url=imageBlobMap[p.image.url.split("uploads/")[1]])})),null!=data.images&&delete data.images,null!=data.scenes&&delete data.scenes,_context4.abrupt("return",data);case 17:case"end":return _context4.stop()}}),_callee4,null,[[3,9]])})))).apply(this,arguments)}var CollectionType,_mappedin$4=new WeakMap,_cache$5=new WeakMap,_data$b=new WeakMap,MappedinCategory=function(){function MappedinCategory(mappedin,data){_classCallCheck(this,MappedinCategory),_mappedin$4.set(this,{writable:!0,value:void 0}),_cache$5.set(this,{writable:!0,value:{}}),_data$b.set(this,{writable:!0,value:void 0}),_defineProperty(this,"name",void 0),_defineProperty(this,"externalId",void 0),_defineProperty(this,"parents",void 0),_defineProperty(this,"id",void 0),_defineProperty(this,"icon",void 0),this.id=data.id,_classPrivateFieldSet(this,_data$b,data),_classPrivateFieldSet(this,_mappedin$4,mappedin),Object.assign(this,data)}var _fetch;return _createClass(MappedinCategory,[{key:"locations",get:function(){var cache=_classPrivateFieldGet(this,_cache$5).locations;if(void 0!==cache)return cache;for(var related=[],locations=_classPrivateFieldGet(this,_mappedin$4).locations,id=this.id,i=0,iLen=locations.length;i<iLen;++i){var location=locations[i],through=location.categories;if(Array.isArray(through))for(var j=0,jLen=through.length;j<jLen;++j)if(through[j]===id){related.push(location);break}}return _classPrivateFieldGet(this,_cache$5).locations=related,related}},{key:"toJSON",value:function(){return _classPrivateFieldGet(this,_data$b)}}],[{key:"hydrate",value:function(categories,mappedin){return categories.map((function(c){return new MappedinCategory(mappedin,c)}))}},{key:"fetch",value:(_fetch=_asyncToGenerator(regeneratorRuntime.mark((function _callee(mappedin){var query,data;return regeneratorRuntime.wrap((function(_context){for(;;)switch(_context.prev=_context.next){case 0:return query={fields:mappedin.options.things.categories,venue:mappedin.options.venue},_context.prev=1,_context.next=4,getArray(mappedin.options,"category",query);case 4:return data=_context.sent,_context.abrupt("return",data.map((function(c){return new MappedinCategory(mappedin,c)})));case 8:return _context.prev=8,_context.t0=_context.catch(1),console.error("Fetch Categories:",_context.t0),_context.abrupt("return",[]);case 12:case"end":return _context.stop()}}),_callee,null,[[1,8]])}))),function(_x){return _fetch.apply(this,arguments)})}]),MappedinCategory}(),_mappedin$3=new WeakMap,_data$a=new WeakMap,_cache$4=new WeakMap,MappedinEvent=function(){function MappedinEvent(mappedin,data){_classCallCheck(this,MappedinEvent),_mappedin$3.set(this,{writable:!0,value:void 0}),_data$a.set(this,{writable:!0,value:void 0}),_cache$4.set(this,{writable:!0,value:{}}),_defineProperty(this,"id",""),_defineProperty(this,"type",""),_defineProperty(this,"name",""),_defineProperty(this,"description",void 0),_defineProperty(this,"image",void 0),_defineProperty(this,"startDate",void 0),_defineProperty(this,"endDate",void 0),_defineProperty(this,"showDate",void 0),_classPrivateFieldSet(this,_data$a,data),_classPrivateFieldSet(this,_mappedin$3,mappedin),Object.assign(this,data)}var _fetch;return _createClass(MappedinEvent,[{key:"location",value:function(){var related,cache=_classPrivateFieldGet(this,_cache$4).location;if(void 0!==cache)return cache;var through=_classPrivateFieldGet(this,_mappedin$3)._locationsById,locationId=_classPrivateFieldGet(this,_data$a).location;if(null!=locationId){var location=through[locationId];null!=location&&(related=location)}return _classPrivateFieldGet(this,_cache$4).location=related,related}},{key:"toJSON",value:function(){return _classPrivateFieldGet(this,_data$a)}}],[{key:"hydrate",value:function(events,mappedin){return events.map((function(e){return new MappedinEvent(mappedin,e)}))}},{key:"fetch",value:(_fetch=_asyncToGenerator(regeneratorRuntime.mark((function _callee(mappedin){var fields,query,data;return regeneratorRuntime.wrap((function(_context){for(;;)switch(_context.prev=_context.next){case 0:return fields=mappedin.options.things.events.slice(),mappedin.options.things.locations&&addToSet(fields,"location"),query={fields:fields,venue:mappedin.options.venue,activeAtOrAfter:Date.now()},_context.prev=3,_context.next=6,getArray(mappedin.options,"event",query);case 6:return data=_context.sent,_context.abrupt("return",data.map((function(e){return new MappedinEvent(mappedin,e)})));case 10:return _context.prev=10,_context.t0=_context.catch(3),console.error("Fetch Events:",_context.t0),_context.abrupt("return",[]);case 14:case"end":return _context.stop()}}),_callee,null,[[3,10]])}))),function(_x){return _fetch.apply(this,arguments)})}]),MappedinEvent}(),_data$9=new WeakMap,MappedinLocationRankings=function(){function MappedinLocationRankings(data){_classCallCheck(this,MappedinLocationRankings),_data$9.set(this,{writable:!0,value:void 0}),_defineProperty(this,"locations",[]),_classPrivateFieldSet(this,_data$9,data),Object.assign(this,data)}var _fetch;return _createClass(MappedinLocationRankings,[{key:"toJSON",value:function(){return _classPrivateFieldGet(this,_data$9)}}],[{key:"hydrate",value:function(locationRankings){return new MappedinLocationRankings(locationRankings)}},{key:"fetch",value:(_fetch=_asyncToGenerator(regeneratorRuntime.mark((function _callee(mappedin){var data;return regeneratorRuntime.wrap((function(_context){for(;;)switch(_context.prev=_context.next){case 0:return _context.prev=0,_context.next=3,getObject(mappedin.options,"smart-labels/location-label-ranking",{venue:mappedin.options.venue},!0);case 3:return data=_context.sent,_context.abrupt("return",new MappedinLocationRankings(data));case 7:return _context.prev=7,_context.t0=_context.catch(0),console.error("Fetch Location Rankings:",_context.t0),_context.abrupt("return",{});case 11:case"end":return _context.stop()}}),_callee,null,[[0,7]])}))),function(_x){return _fetch.apply(this,arguments)})}]),MappedinLocationRankings}(),_data$8=new WeakMap,MappedinLocationState=function(){function MappedinLocationState(data){_classCallCheck(this,MappedinLocationState),_data$8.set(this,{writable:!0,value:void 0}),_defineProperty(this,"value",void 0),_classPrivateFieldSet(this,_data$8,data),Object.assign(this,data)}var _fetch;return _createClass(MappedinLocationState,[{key:"toJSON",value:function(){return _classPrivateFieldGet(this,_data$8)}}],[{key:"hydrate",value:function(locationStates){return locationStates.map((function(ls){return new MappedinLocationState(ls)}))}},{key:"fetch",value:(_fetch=_asyncToGenerator(regeneratorRuntime.mark((function _callee(mappedin){var fields,query,data;return regeneratorRuntime.wrap((function(_context){for(;;)switch(_context.prev=_context.next){case 0:return fields=mappedin.options.things.locationStates.slice(),query={fields:fields,venue:mappedin.options.venue},_context.prev=2,_context.next=5,getArray(mappedin.options,"location-state",query);case 5:return data=_context.sent,_context.abrupt("return",data.map((function(ls){return new MappedinLocationState(ls)})));case 9:return _context.prev=9,_context.t0=_context.catch(2),console.error("Fetch Location States:",_context.t0),_context.abrupt("return",[]);case 13:case"end":return _context.stop()}}),_callee,null,[[2,9]])}))),function(_x){return _fetch.apply(this,arguments)})}]),MappedinLocationState}(),MappedinCoordinate=function(){function MappedinCoordinate(lat,lon,x,y,map){_classCallCheck(this,MappedinCoordinate),_defineProperty(this,"map",void 0),_defineProperty(this,"x",0),_defineProperty(this,"y",0),_defineProperty(this,"lat",0),_defineProperty(this,"lon",0),this.lat=lat,this.lon=lon,this.map="string"==typeof map?map:map.id,this.x=x,this.y=y}return _createClass(MappedinCoordinate,[{key:"absoluteDistanceTo",value:function(destination){return _ref=[destination.lat,destination.lon],_ref2=[this.lat,this.lon],_ref3=_slicedToArray(_ref,2),lat1=_ref3[0],lon1=_ref3[1],_ref4=_slicedToArray(_ref2,2),lat2=_ref4[0],lon2=_ref4[1],ll1=new npm.LatLonSpherical(lat1,lon1),ll2=new npm.LatLonSpherical(lat2,lon2),ll1.distanceTo(ll2);var _ref,_ref2,_ref3,lat1,lon1,_ref4,lat2,lon2,ll1,ll2}}]),MappedinCoordinate}(),_mappedin$2=new WeakMap,_cache$3=new WeakMap,_data$7=new WeakMap,MappedinMap=function(){function MappedinMap(mappedin,data){_classCallCheck(this,MappedinMap),_mappedin$2.set(this,{writable:!0,value:void 0}),_cache$3.set(this,{writable:!0,value:{}}),_data$7.set(this,{writable:!0,value:void 0}),_defineProperty(this,"id",""),_defineProperty(this,"group",""),_defineProperty(this,"name",""),_defineProperty(this,"shortName",""),_defineProperty(this,"elevation",void 0),_defineProperty(this,"scale",0),_defineProperty(this,"x_scale",void 0),_defineProperty(this,"georeference",[]),_defineProperty(this,"_scale",0),_classPrivateFieldSet(this,_mappedin$2,mappedin),_classPrivateFieldSet(this,_data$7,data),Object.assign(this,data),this._scale=function(map){if(map.scale||map.x_scale)return 1/(map.scale||map.x_scale);var mapScale;try{var anchor1=map.georeference[0],anchor2=map.georeference[2],ll1=new npm.LatLonSpherical(anchor1.target.x,anchor1.target.y),ll2=new npm.LatLonSpherical(anchor2.target.x,anchor2.target.y),worldDistance=ll1.distanceTo(ll2),xDiff=anchor1.control.x-anchor2.control.x,yDiff=anchor1.control.y-anchor2.control.y;mapScale=Math.sqrt(xDiff*xDiff+yDiff*yDiff)/worldDistance}catch(e){mapScale=1,console.warn(e),console.warn("Couldn't georeference "+(map.name||map.shortName||map.id)+". Probably not enough geocoordinates.")}return mapScale}(this),this.scale=this.x_scale}var _fetch;return _createClass(MappedinMap,[{key:"polygons",get:function(){var cache=_classPrivateFieldGet(this,_cache$3).polygons;if(void 0!==cache)return cache;for(var related=[],polygons=_classPrivateFieldGet(this,_mappedin$2).polygons,id=this.id,i=0,iLen=polygons.length;i<iLen;++i){var polygon=polygons[i];polygon.map===id&&related.push(polygon)}return _classPrivateFieldGet(this,_cache$3).polygons=related,related}},{key:"mapGroup",get:function(){var cache=_classPrivateFieldGet(this,_cache$3).mapGroup;if(void 0!==cache)return cache;var id=this.group,related=id&&_classPrivateFieldGet(this,_mappedin$2)._mapGroupsById[id]||null;return _classPrivateFieldGet(this,_cache$3).mapGroup=related,related}},{key:"createCoordinate",value:function(lat,lon){var anchor=this.georeference[0],anchorLatLon=new npm.LatLonSpherical(anchor.target.x,anchor.target.y),targetLatLon=new npm.LatLonSpherical(lat,lon),worldDistance=anchorLatLon.distanceTo(targetLatLon),worldBearing=(anchorLatLon.finalBearingTo(targetLatLon)+360)%360*Math.PI/180,mappedinDistance=worldDistance*(1/this.scale),mappedinBearing=worldBearing+this.getNorth(),deltaX=Math.sin(mappedinBearing)*mappedinDistance,deltaY=Math.cos(mappedinBearing)*mappedinDistance;return new MappedinCoordinate(lat,lon,anchor.control.x+deltaX,anchor.control.y-deltaY,this.id)}},{key:"getNorth",value:function(){var north;try{var anchor1=this.georeference[0],anchor2=this.georeference[2],ll1=new npm.LatLonSpherical(anchor1.target.x,anchor1.target.y),ll2=new npm.LatLonSpherical(anchor2.target.x,anchor2.target.y);north=-((ll1.finalBearingTo(ll2)+0)*Math.PI/180-Math.atan2(anchor2.control.y-anchor1.control.y,anchor2.control.x-anchor1.control.x)-Math.PI/2)}catch(e){north=0,console.warn(e),console.warn("Couldn't georeference "+(this.name||this.shortName||this.id)+". Probably not enough geocoordinates.")}return north}},{key:"toJSON",value:function(){return _classPrivateFieldGet(this,_data$7)}}],[{key:"hydrate",value:function(maps,mappedin){return maps.map((function(m){return new MappedinMap(mappedin,m)}))}},{key:"fetch",value:(_fetch=_asyncToGenerator(regeneratorRuntime.mark((function _callee(mappedin){var fields,query,data,setVisibleLayer,i,iLen,map,per;return regeneratorRuntime.wrap((function(_context){for(;;)switch(_context.prev=_context.next){case 0:return fields=mappedin.options.things.maps.slice(),mappedin.options.perspective&&addToSet(fields,"perspectives"),mappedin.options.things.mapGroups&&addToSet(fields,"group"),addToSet(fields,"elevation"),addToSet(fields,"x_scale"),addToSet(fields,"scale"),addToSet(fields,"georeference"),query={fields:fields,perspective:mappedin.options.perspective,venue:mappedin.options.venue},_context.prev=8,_context.next=11,getArray(mappedin.options,"map",query);case 11:for(data=_context.sent,setVisibleLayer=function(layerName){var layerObject=map.layers.find((function(l){return l.id===layerName}));layerObject?layerObject.visible=!0:map.layers.push({id:layerName,visible:!0})},i=0,iLen=data.length;i<iLen;++i)(map=data[i])&&(null!=(per=map.perspective)&&(map.perspectiveId=per.id,mappedin.options.do2D?(fields.indexOf("width")>-1&&(map.width=per.size&&per.size.width||per.width),fields.indexOf("height")>-1&&(map.height=per.size&&per.size.height||per.height),fields.indexOf("tiles")>-1&&(map.tiles=per.tiles),fields.indexOf("original")>-1&&(map.original=per.original)):(fields.indexOf("scene")>-1&&(map.scene=per.scene),per.layers?(map.layers.forEach((function(layer){layer.visible=!1})),per.layers.forEach(setVisibleLayer)):map.layers.forEach((function(layer){layer.visible=!0})))),delete map.perspective),data[i]=new MappedinMap(mappedin,map);return _context.abrupt("return",data);case 17:return _context.prev=17,_context.t0=_context.catch(8),console.error("Fetch Maps:",_context.t0),_context.abrupt("return",[]);case 21:case"end":return _context.stop()}}),_callee,null,[[8,17]])}))),function(_x){return _fetch.apply(this,arguments)})}]),MappedinMap}(),_mappedin$1=new WeakMap,_data$6=new WeakMap,_cache$2=new WeakMap,MappedinMapGroup=function(){function MappedinMapGroup(mappedin,data){_classCallCheck(this,MappedinMapGroup),_mappedin$1.set(this,{writable:!0,value:void 0}),_data$6.set(this,{writable:!0,value:void 0}),_cache$2.set(this,{writable:!0,value:{}}),_defineProperty(this,"id",""),_defineProperty(this,"name",""),_classPrivateFieldSet(this,_data$6,data),_classPrivateFieldSet(this,_mappedin$1,mappedin),Object.assign(this,data)}var _fetch;return _createClass(MappedinMapGroup,[{key:"maps",get:function(){var cache=_classPrivateFieldGet(this,_cache$2).maps;if(void 0!==cache)return cache;for(var related=[],maps=_classPrivateFieldGet(this,_mappedin$1).maps,id=_classPrivateFieldGet(this,_data$6).id,i=0,iLen=maps.length;i<iLen;++i){var map=maps[i];map.group===id&&related.push(map)}return _classPrivateFieldGet(this,_cache$2).maps=related,related}},{key:"toJSON",value:function(){return _classPrivateFieldGet(this,_data$6)}}],[{key:"hydrate",value:function(mapGroups,mappedin){return mapGroups.map((function(mg){return new MappedinMapGroup(mappedin,mg)}))}},{key:"fetch",value:(_fetch=_asyncToGenerator(regeneratorRuntime.mark((function _callee(mappedin){var fields,query,data;return regeneratorRuntime.wrap((function(_context){for(;;)switch(_context.prev=_context.next){case 0:return fields=mappedin.options.things.mapGroups.slice(),query={fields:fields,venue:mappedin.options.venue},_context.prev=2,_context.next=5,getArray(mappedin.options,"map-group",query);case 5:return data=_context.sent,_context.abrupt("return",data.map((function(mg){return new MappedinMapGroup(mappedin,mg)})));case 9:return _context.prev=9,_context.t0=_context.catch(2),console.error("Fetch Map Groups:",_context.t0),_context.abrupt("return",[]);case 13:case"end":return _context.stop()}}),_callee,null,[[2,9]])}))),function(_x){return _fetch.apply(this,arguments)})}]),MappedinMapGroup}(),_mappedin=new WeakMap,_data$5=new WeakMap,_cache$1=new WeakMap,_paths=new WeakMap,MappedinNode=function(_MappedinNavigatable){_inherits(MappedinNode,MappedinNavigatable);var _fetch,_super=_createSuper(MappedinNode);function MappedinNode(mappedin,data){var _this;return _classCallCheck(this,MappedinNode),_this=_super.call(this,mappedin),_mappedin.set(_assertThisInitialized(_this),{writable:!0,value:void 0}),_data$5.set(_assertThisInitialized(_this),{writable:!0,value:void 0}),_cache$1.set(_assertThisInitialized(_this),{writable:!0,value:{}}),_defineProperty(_assertThisInitialized(_this),"id",""),_defineProperty(_assertThisInitialized(_this),"map",""),_defineProperty(_assertThisInitialized(_this),"x",0),_defineProperty(_assertThisInitialized(_this),"y",0),_defineProperty(_assertThisInitialized(_this),"operationHours",void 0),_defineProperty(_assertThisInitialized(_this),"externalId",void 0),_paths.set(_assertThisInitialized(_this),{writable:!0,value:void 0}),_classPrivateFieldSet(_assertThisInitialized(_this),_mappedin,mappedin),_classPrivateFieldSet(_assertThisInitialized(_this),_data$5,data),Object.assign(_assertThisInitialized(_this),data),_this}return _createClass(MappedinNode,[{key:"paths",get:function(){var cache=_classPrivateFieldGet(this,_cache$1).paths;if(void 0!==cache)return cache;var related=[],index=_classPrivateFieldGet(this,_mappedin)._nodesById,through=_classPrivateFieldGet(this,_paths);if(Array.isArray(through))for(var i=0,iLen=through.length;i<iLen;++i){var node=index[through[i].node];null!=node&&related.push(node)}return _classPrivateFieldGet(this,_cache$1).paths=related,related},set:function(paths){_classPrivateFieldSet(this,_paths,paths)}},{key:"locations",get:function(){var cache=_classPrivateFieldGet(this,_cache$1).locations;if(void 0!==cache)return cache;for(var related=[],locations=_classPrivateFieldGet(this,_mappedin).locations,nodeId=this.id,i=0,iLen=locations.length;i<iLen;++i){var location=locations[i],through=location.nodes;if(Array.isArray(through))for(var j=0,jLen=through.length;j<jLen;++j){if(through[j].id===nodeId){related.push(location);break}}}return _classPrivateFieldGet(this,_cache$1).locations=related,related}},{key:"polygon",get:function(){var polygonContainingThisNode,cache=_classPrivateFieldGet(this,_cache$1).polygon;if(void 0!==cache)return cache;for(var polygons=_classPrivateFieldGet(this,_mappedin).polygons,nodeId=this.id,i=0,iLen=polygons.length;i<iLen;++i){var polygon=polygons[i];polygon.entrances.map((function(e){return e.id})).includes(nodeId)&&(polygonContainingThisNode=polygon)}return _classPrivateFieldGet(this,_cache$1).polygon=polygonContainingThisNode,polygonContainingThisNode}},{key:"toJSON",value:function(){return _classPrivateFieldGet(this,_data$5)}}],[{key:"hydrate",value:function(nodes,mappedin){return nodes.map((function(n){return new MappedinNode(mappedin,n)}))}},{key:"fetch",value:(_fetch=_asyncToGenerator(regeneratorRuntime.mark((function _callee(mappedin){var fields,query,data;return regeneratorRuntime.wrap((function(_context){for(;;)switch(_context.prev=_context.next){case 0:return fields=mappedin.options.things.nodes.slice(),mappedin.options.things.maps&&addToSet(fields,"map"),["weight","multiplier","accessible"].forEach((function(field){addToSet(fields,field)})),query={fields:fields,perspective:mappedin.options.do2D&&mappedin.options.perspective||void 0,venue:mappedin.options.venue},_context.prev=5,_context.next=8,getArray(mappedin.options,"node",query);case 8:return data=_context.sent,_context.abrupt("return",data.map((function(n){return new MappedinNode(mappedin,n)})));case 12:return _context.prev=12,_context.t0=_context.catch(5),console.error("Fetch Nodes:",_context.t0),_context.abrupt("return",[]);case 16:case"end":return _context.stop()}}),_callee,null,[[5,12]])}))),function(_x){return _fetch.apply(this,arguments)})}]),MappedinNode}(),_data$4=new WeakMap,MappedinRankings=function(){function MappedinRankings(data){_classCallCheck(this,MappedinRankings),_data$4.set(this,{writable:!0,value:void 0}),_defineProperty(this,"polygons",[]),_classPrivateFieldSet(this,_data$4,data),Object.assign(this,data)}var _fetch;return _createClass(MappedinRankings,[{key:"toJSON",value:function(){return _classPrivateFieldGet(this,_data$4)}}],[{key:"hydrate",value:function(rankings){return new MappedinRankings(rankings)}},{key:"fetch",value:(_fetch=_asyncToGenerator(regeneratorRuntime.mark((function _callee(mappedin){var data;return regeneratorRuntime.wrap((function(_context){for(;;)switch(_context.prev=_context.next){case 0:return _context.prev=0,_context.next=3,getObject(mappedin.options,"smart-labels/polygon-label-ranking",{venue:mappedin.options.venue},!0);case 3:return data=_context.sent,_context.abrupt("return",new MappedinRankings(data));case 7:return _context.prev=7,_context.t0=_context.catch(0),console.error("Fetch Rankings:",_context.t0),_context.abrupt("return",null);case 11:case"end":return _context.stop()}}),_callee,null,[[0,7]])}))),function(_x){return _fetch.apply(this,arguments)})}]),MappedinRankings}(),_data$3=new WeakMap,MappedinTheme=function(){function MappedinTheme(data){_classCallCheck(this,MappedinTheme),_defineProperty(this,"id",""),_data$3.set(this,{writable:!0,value:void 0}),_classPrivateFieldSet(this,_data$3,data),Object.assign(this,data)}var _fetch;return _createClass(MappedinTheme,[{key:"toJSON",value:function(){return _classPrivateFieldGet(this,_data$3)}}],[{key:"hydrate",value:function(themes){return themes.map((function(t){return new MappedinTheme(t)}))}},{key:"fetch",value:(_fetch=_asyncToGenerator(regeneratorRuntime.mark((function _callee(mappedin){var fields,query,data;return regeneratorRuntime.wrap((function(_context){for(;;)switch(_context.prev=_context.next){case 0:return fields=mappedin.options.things.themes.slice(),query={fields:fields,venue:mappedin.options.venue},_context.prev=2,_context.next=5,getArray(mappedin.options,"apollo-theme",query);case 5:return data=_context.sent,_context.abrupt("return",data.map((function(t){return new MappedinTheme(t)})));case 9:return _context.prev=9,_context.t0=_context.catch(2),console.error("Fetch Theme:",_context.t0),_context.abrupt("return",[]);case 13:case"end":return _context.stop()}}),_callee,null,[[2,9]])}))),function(_x){return _fetch.apply(this,arguments)})}]),MappedinTheme}(),_data$2=new WeakMap,MappedinVenue=function(){function MappedinVenue(data){_classCallCheck(this,MappedinVenue),_data$2.set(this,{writable:!0,value:void 0}),_defineProperty(this,"defaultMap",""),_defineProperty(this,"address",""),_defineProperty(this,"city",""),_defineProperty(this,"countrycode",""),_defineProperty(this,"externalId",""),_defineProperty(this,"id",""),_defineProperty(this,"latitude",void 0),_defineProperty(this,"logo",void 0),_defineProperty(this,"longitude",void 0),_defineProperty(this,"metadata",void 0),_defineProperty(this,"name",""),_defineProperty(this,"operationHours",void 0),_defineProperty(this,"postal",""),_defineProperty(this,"slug",""),_defineProperty(this,"state",""),_defineProperty(this,"telephone",""),_defineProperty(this,"tzid",""),_defineProperty(this,"tzidOverride",""),_defineProperty(this,"utcOffset",""),_defineProperty(this,"website",""),_classPrivateFieldSet(this,_data$2,data),Object.assign(this,data)}var _fetch;return _createClass(MappedinVenue,[{key:"toJSON",value:function(){return _classPrivateFieldGet(this,_data$2)}}],[{key:"hydrate",value:function(data){return new MappedinVenue(data)}},{key:"fetch",value:(_fetch=_asyncToGenerator(regeneratorRuntime.mark((function _callee(mappedin){var query,data;return regeneratorRuntime.wrap((function(_context){for(;;)switch(_context.prev=_context.next){case 0:return query={fields:mappedin.options.things.venue,slug:mappedin.options.venue,limit:1},_context.prev=1,_context.next=4,getArray(mappedin.options,"venue",query);case 4:return data=_context.sent,_context.abrupt("return",new MappedinVenue(data[0]));case 8:return _context.prev=8,_context.t0=_context.catch(1),console.error("Fetch Venue:",_context.t0),_context.abrupt("return",{});case 12:case"end":return _context.stop()}}),_callee,null,[[1,8]])}))),function(_x){return _fetch.apply(this,arguments)})}]),MappedinVenue}(),_data$1=new WeakMap,MappedinVortex=function(){function MappedinVortex(data){_classCallCheck(this,MappedinVortex),_defineProperty(this,"id",""),_data$1.set(this,{writable:!0,value:void 0}),_defineProperty(this,"name",void 0),_defineProperty(this,"type",void 0),_defineProperty(this,"weight",void 0),_defineProperty(this,"multiplier",void 0),_classPrivateFieldSet(this,_data$1,data),Object.assign(this,data)}var _fetch;return _createClass(MappedinVortex,[{key:"toJSON",value:function(){return _classPrivateFieldGet(this,_data$1)}}],[{key:"hydrate",value:function(vortexes){return vortexes.map((function(v){return new MappedinVortex(v)}))}},{key:"fetch",value:(_fetch=_asyncToGenerator(regeneratorRuntime.mark((function _callee(mappedin){var fields,query,data;return regeneratorRuntime.wrap((function(_context){for(;;)switch(_context.prev=_context.next){case 0:return fields=mappedin.options.things.vortexes.slice(),["name","type","accessible","weight","multiplier","nodes"].forEach((function(field){addToSet(fields,field)})),query={fields:fields,venue:mappedin.options.venue},_context.prev=4,_context.next=7,getArray(mappedin.options,"vortex",query);case 7:return data=_context.sent,_context.abrupt("return",data.map((function(v){return new MappedinVortex(v)})));case 11:return _context.prev=11,_context.t0=_context.catch(4),console.error("Fetch Vortexes:",_context.t0),_context.abrupt("return",[]);case 15:case"end":return _context.stop()}}),_callee,null,[[4,11]])}))),function(_x){return _fetch.apply(this,arguments)})}]),MappedinVortex}(),defaultOptions={baseUrl:"https://api-gateway.mappedin.com/public/1/",supplementaryUrl:"https://api-gateway.mappedin.com/analytics/",headers:{},accessToken:"",clientId:"",noAuth:!1,includeHidden:!0,do2D:!1,clientSecret:"",apiGateway:"",authorization:"",perspective:"Website",language:"",things:{},venue:""};!function(CollectionType){CollectionType.CATEGORY="categories",CollectionType.EVENT="events",CollectionType.LOCATION="locations",CollectionType.MAPGROUP="mapGroups",CollectionType.MAP="maps",CollectionType.NODE="nodes",CollectionType.POLYGON="polygons",CollectionType.VORTEX="vortexes"}(CollectionType||(CollectionType={}));var THINGS={categories:MappedinCategory,locations:MappedinLocation,vortexes:MappedinVortex,maps:MappedinMap,nodes:MappedinNode,polygons:MappedinPolygon,venue:MappedinVenue,events:MappedinEvent,mapGroups:MappedinMapGroup,themes:MappedinTheme,locationStates:MappedinLocationState,locationRankings:MappedinLocationRankings,rankings:MappedinRankings},_cache=new WeakMap,_data=new WeakMap,Mappedin=function(){function Mappedin(options){_classCallCheck(this,Mappedin),_defineProperty(this,"perspective",void 0),_defineProperty(this,"things",void 0),_defineProperty(this,"options",void 0),_cache.set(this,{writable:!0,value:{}}),_data.set(this,{writable:!0,value:""}),_defineProperty(this,"updatedAt",void 0),_defineProperty(this,"categories",[]),_defineProperty(this,"locations",[]),_defineProperty(this,"vortexes",[]),_defineProperty(this,"maps",[]),_defineProperty(this,"nodes",[]),_defineProperty(this,"polygons",[]),_defineProperty(this,"venue",{}),_defineProperty(this,"events",[]),_defineProperty(this,"mapGroups",[]),_defineProperty(this,"themes",[]),_defineProperty(this,"locationStates",[]),_defineProperty(this,"locationRankings",[]),_defineProperty(this,"rankings",void 0),_defineProperty(this,"_categoriesById",void 0),_defineProperty(this,"_locationsById",void 0),_defineProperty(this,"_vortexesById",void 0),_defineProperty(this,"_mapsById",void 0),_defineProperty(this,"_nodesById",void 0),_defineProperty(this,"_polygonsById",void 0),_defineProperty(this,"_eventsById",void 0),_defineProperty(this,"_mapGroupsById",void 0),_defineProperty(this,"_locationStatesById",void 0),_defineProperty(this,"_locationRankingsById",void 0),_defineProperty(this,"_rankingsById",void 0),_defineProperty(this,"_categoriesByExternalId",void 0),_defineProperty(this,"_locationsByExternalId",void 0),_defineProperty(this,"_vortexesByExternalId",void 0),_defineProperty(this,"_mapsByExternalId",void 0),_defineProperty(this,"_nodesByExternalId",void 0),_defineProperty(this,"_polygonsByExternalId",void 0),_defineProperty(this,"_eventsByExternalId",void 0),_defineProperty(this,"_mapGroupsByExternalId",void 0),_defineProperty(this,"_locationStatesByExternalId",void 0),_defineProperty(this,"_locationRankingsByExternalId",void 0),_defineProperty(this,"_rankingsByExternalId",void 0),_defineProperty(this,"images",void 0),_defineProperty(this,"scenes",void 0),_defineProperty(this,"navigator",void 0),this.options=options}var _fetch,_hydrate;return _createClass(Mappedin,[{key:"generateGetters",value:function(names){var _this=this;try{for(var _loop=function(i,iLen){var name=names[i];Array.isArray(_this[name])&&(Object.defineProperty(_this,"_"+name+"ByExternalId",{get:function(){var cache=_classPrivateFieldGet(this,_cache)[name];if(void 0!==cache)return cache;var result={};return this[name].forEach((function(l){return result[l.externalId]=l})),_classPrivateFieldGet(this,_cache)[name]=result,result}}),Object.defineProperty(_this,"_"+name+"ById",{get:function(){var cache=_classPrivateFieldGet(this,_cache)[name];if(void 0!==cache)return cache;var result={};return this[name].forEach((function(l){return result[l.id]=l})),_classPrivateFieldGet(this,_cache)[name]=result,result}}))},i=0,iLen=names.length;i<iLen;++i)_loop(i);return this}catch(e){throw new Error(e)}}},{key:"getCollectionItemById",value:function(name,id){var indexByExternalId="_"+name+"ByExternalId",collection=this["_"+name+"ById"];return null!=collection&&null!=collection[id]||null!=(collection=this[indexByExternalId])&&null!=collection[id]?collection[id]:null}},{key:"hydrate",value:(_hydrate=_asyncToGenerator(regeneratorRuntime.mark((function _callee(mappedinSerializableData){var mappedinData,names,i,iLen,name,data,_mappedinData,images,scenes;return regeneratorRuntime.wrap((function(_context){for(;;)switch(_context.prev=_context.next){case 0:if("string"!=typeof mappedinSerializableData){_context.next=15;break}_context.prev=1,_classPrivateFieldSet(this,_data,mappedinSerializableData),mappedinData=JSON.parse(mappedinSerializableData),_context.next=10;break;case 6:return _context.prev=6,_context.t0=_context.catch(1),console.error("Unable to parse JSON",_context.t0),_context.abrupt("return");case 10:if(!0!==this.options.useBundleAssets){_context.next=13;break}return _context.next=13,preloadImagesFromBundle(mappedinData);case 13:_context.next=17;break;case 15:mappedinData=mappedinSerializableData,_classPrivateFieldSet(this,_data,JSON.stringify(mappedinData));case 17:for(names=Object.keys(mappedinData),i=0,iLen=names.length;i<iLen;++i)name=names[i],data=mappedinData[name],null!=THINGS[name]&&"function"==typeof THINGS[name].hydrate&&(this[name]=THINGS[name].hydrate(data,this));images=(_mappedinData=mappedinData).images,scenes=_mappedinData.scenes,this.images=images,this.scenes=scenes,this.generateGetters(names),this.initNavigator();case 24:case"end":return _context.stop()}}),_callee,this,[[1,6]])}))),function(_x){return _hydrate.apply(this,arguments)})},{key:"fetch",value:(_fetch=_asyncToGenerator(regeneratorRuntime.mark((function _callee2(){var things,promises,names,_loop2,i,iLen,_this2=this;return regeneratorRuntime.wrap((function(_context2){for(;;)switch(_context2.prev=_context2.next){case 0:"vortexes"in this.options.things||(this.options.things.vortexes=["name","type","accessible","weight","multiplier","nodes"]),"locationStates"in this.options.things||(this.options.things.locationStates=["name","id","value"]),isGatewayKey(this.options.clientId)||(this.options.things.rankings&&delete this.options.things.rankings,this.options.things.locationRankings&&delete this.options.things.locationRankings),things=this.options.things,promises=[],names=Object.keys(things),_loop2=function(i,iLen){var name=names[i];THINGS[name]&&promises.push(THINGS[name].fetch(_this2).then((function(data){return _this2[name]=data,Promise.resolve()})))};for(i=0,iLen=names.length;i<iLen;++i)_loop2(i);return this.generateGetters(names),_context2.abrupt("return",Promise.all(promises).then((function(){_this2.initNavigator(),_classPrivateFieldSet(_this2,_data,JSON.stringify(_this2.toJSON()))})));case 10:case"end":return _context2.stop()}}),_callee2,this)}))),function(){return _fetch.apply(this,arguments)})},{key:"initNavigator",value:function(){this.navigator=new Navigator({locations:this.locations.map((function(l){return l.toJSON()})),nodes:this.nodes.map((function(n){return n.toJSON()})),vortexes:this.vortexes.map((function(v){return v.toJSON()})),maps:this.maps.map((function(m){return m.toJSON()}))})}},{key:"toJSON",value:function(){var _this$rankings,jsonVenue={};for(var item in THINGS)Array.isArray(this[item])&&(jsonVenue[item]=this[item].map((function(p){return p.toJSON()})));return _objectSpread2(_objectSpread2({},jsonVenue),{},{venue:this.venue.toJSON(),rankings:null===(_this$rankings=this.rankings)||void 0===_this$rankings?void 0:_this$rankings.toJSON()})}},{key:"toString",value:function(){return _classPrivateFieldGet(this,_data)}}]),Mappedin}(),defaultThings={venue:["slug","name","defaultMap","metadata","countrycode","tzid","logo","externalId"],nodes:["externalId","x","y","paths","accessible","operationHours"],vortexes:["externalId","nodes","types","accessible"],polygons:["vertexes","geometry","canvasBounds","layer","externalId","entrances"],locations:["externalId","name","type","picture","description","icon","logo","sortOrder","phone","operationHours","social","color","toMap","tags","shortName","detailsUrl","locationState","metadata","siblingGroups","gallery"],categories:["name","color","sortOrder","parents"],maps:["name","elevation","height","width","layers","shortName","scene","group","x_scale"],mapGroups:["name"],themes:["name","themeData"],rankings:["polygons"],locationRankings:[]};function parseOptions(options){var _options=_objectSpread2(_objectSpread2({},defaultOptions),{},{things:defaultThings},options);return _options.noAuth||!_options.clientId||isGatewayKey(_options.clientId)||(_options.baseUrl="https://web-proxy.mappedin.com/1/"),_options.noAuth||(_options.accessToken?_options.authorization="Bearer "+_options.accessToken:_options.clientId&&_options.clientSecret&&(_options.authorization="Basic "+globalThis.btoa(_options.clientId+":"+_options.clientSecret))),_options}function getVenue(_x){return _getVenue.apply(this,arguments)}function _getVenue(){return(_getVenue=_asyncToGenerator(regeneratorRuntime.mark((function _callee(options){var instance;return regeneratorRuntime.wrap((function(_context){for(;;)switch(_context.prev=_context.next){case 0:return instance=new Mappedin(parseOptions(options)),_context.next=3,instance.fetch();case 3:return _context.abrupt("return",instance);case 4:case"end":return _context.stop()}}),_callee)})))).apply(this,arguments)}require("isomorphic-fetch"),globalThis.btoa||(globalThis.btoa=base64.encode);var defaultBundleOptions={bundleBaseUri:"https://api-gateway.mappedin.com/exports/legacy/1/bundle",useBundleAssets:!(void 0!==globalThis.navigator&&"ReactNative"==globalThis.navigator.product)};function getVenueBundle(_x2){return _getVenueBundle.apply(this,arguments)}function _getVenueBundle(){return(_getVenueBundle=_asyncToGenerator(regeneratorRuntime.mark((function _callee2(options){var _options,bundleBaseUri,venue,_url,res,_ref,url,updated_at,bundleRes,_yield$bundleRes$json,datastring,_yield$bundleRes$json2,format,mappedin;return regeneratorRuntime.wrap((function(_context2){for(;;)switch(_context2.prev=_context2.next){case 0:return _options=_objectSpread2(_objectSpread2({},defaultBundleOptions),parseOptions(options)),bundleBaseUri=_options.bundleBaseUri,venue=_options.venue,_url=bundleBaseUri+"?venue="+venue+"&version=1.0.0",_context2.next=5,generateAPIRequest(_options,_url);case 5:return res=_context2.sent,url=(_ref=res).url,updated_at=_ref.updated_at,_context2.next=9,fetch(url,{mode:"cors"});case 9:return bundleRes=_context2.sent,_context2.next=12,bundleRes.json();case 12:if(_yield$bundleRes$json=_context2.sent,datastring=_yield$bundleRes$json.data,_yield$bundleRes$json2=_yield$bundleRes$json.format,"jsonstring"===(format=void 0===_yield$bundleRes$json2?"jsonstring":_yield$bundleRes$json2)){_context2.next=18;break}throw new Error("Unrecognized format"+format);case 18:return mappedin=new Mappedin(_options),_context2.next=21,mappedin.hydrate(datastring);case 21:return mappedin.updatedAt=updated_at,_context2.abrupt("return",mappedin);case 23:case"end":return _context2.stop()}}),_callee2)})))).apply(this,arguments)}export{Mappedin,MappedinCategory,MappedinCoordinate,MappedinDestinationSet,MappedinDirections,MappedinEvent,MappedinLocation,MappedinMap,MappedinMapGroup,MappedinNavigatable,MappedinNode,MappedinPolygon,MappedinRankings,MappedinVenue,MappedinVortex,getVenue,getVenueBundle};
|
|
16
|
+
***************************************************************************** */function getMapScale$1(map){if(map.scale||map.x_scale)return 1/(map.scale||map.x_scale||1);try{if(!map.georeference)throw new Error("map "+(map.name||map.shortName||map.id)+" does not have a georeference field");if(map.georeference.length<3)throw new Error("map "+(map.name||map.shortName||map.id)+" has less than 3 georeference points, we require at least 3 for proper map scaling");var anchor1=map.georeference[0],anchor2=map.georeference[2],worldDistance=es.getDistance({latitude:anchor1.target.x,longitude:anchor1.target.y},{latitude:anchor2.target.x,longitude:anchor2.target.y}),xDiff=anchor1.control.x-anchor2.control.x,yDiff=anchor1.control.y-anchor2.control.y;return Math.sqrt(xDiff*xDiff+yDiff*yDiff)/worldDistance}catch(e){return console.error(e),1}}function getAngle(origin,destination){var xDelta=origin.x-destination.x,yDelta=origin.y-destination.y;return(Math.atan2(yDelta,xDelta)+2.5*Math.PI)%(2*Math.PI)}var ACTION_TYPE,BEARING_TYPE,VORTEX_DIRECTION_TYPE,NavigationGraph=function(){function NavigationGraph(_a){var _this=this,nodes=_a.nodes,vortexes=_a.vortexes,maps=_a.maps,_b=_a.showVortexNames,showVortexNames=void 0!==_b&&_b;this.edges={},this.mapsById=maps.map((function(map){return __assign(__assign({},map),{_scale:getMapScale$1(map)})})).reduce((function(result,map){return result[map.id]=map,result}),{});var cleanedNodes=nodes.filter((function(node){return!!_this.mapsById[node.map]})).map((function(node){return __assign(__assign({},node),{paths:node.paths?node.paths.filter((function(_a){return _a.map===node.map})):[]})}));for(var id in this.nodesById=cleanedNodes.reduce((function(result,node){return result[node.id]=node,result}),{}),this.nodesById)this.nodesById.hasOwnProperty(id)&&(this.nodesById[id].paths=this.nodesById[id].paths.filter((function(_a){var node=_a.node;return!!_this.nodesById[node]})));var cleanedVortexes=vortexes.map((function(vortex){return __assign(__assign({},vortex),{name:showVortexNames?vortex.name:vortex.type,nodes:vortex.nodes?vortex.nodes.filter((function(nodeId){return!!_this.nodesById[nodeId]})):[]})}));cleanedNodes.forEach((function(origin){_this.edges[origin.id]=origin.paths.map((function(_a){var node=_a.node,destination=_this.nodesById[node];return new Edge({angle:getAngle(origin,destination),destination:destination,distance:_this.getDistance(origin,destination),origin:origin})}))})),cleanedVortexes.forEach((function(vortex){if(null!=vortex.nodes&&0!==vortex.nodes.length)for(var originIndex=0;originIndex<vortex.nodes.length-1;){var origin_1=_this.nodesById[vortex.nodes[originIndex]];if(originIndex++,null!=origin_1)for(var destinationIndex=originIndex;destinationIndex<vortex.nodes.length;){var destination=_this.nodesById[vortex.nodes[destinationIndex]];if(destinationIndex++,null!=destination){var originElevation=_this.mapsById[origin_1.map].elevation||0,destinationElevation=_this.mapsById[destination.map].elevation||0,elevationDelta=Math.abs(originElevation-destinationElevation);_this.edges[origin_1.id].push(new Edge({destination:destination,elevationDelta:elevationDelta,origin:origin_1,vortex:vortex})),_this.edges[destination.id].push(new Edge({destination:origin_1,elevationDelta:elevationDelta,origin:destination,vortex:vortex}))}}}}))}return NavigationGraph.prototype.aStar=function(originIds,destinationNodeIds,accessible){var _this=this,origins=originIds.map((function(id){return _this.nodesById[id]})).filter((function(x){return x})),destinations=destinationNodeIds.map((function(id){return _this.nodesById[id]})).filter((function(x){return x}));if(0===origins.length||0===destinations.length)return[];var frontier=[],cameFrom={},costSoFar={};for(origins.forEach((function(origin){var priority=_this.getShortestEuclideanDistance(origin,destinations);frontier.push({origin:origin,priority:priority}),cameFrom[origin.id]=null,costSoFar[origin.id]=0})),frontier.sort((function(a,b){return a.priority-b.priority}));frontier.length>0;){var current=frontier[0];if(destinations.includes(current.origin)){for(var directions=[],step=cameFrom[current.origin.id];null!=step;){directions.push(step);var nextStep=cameFrom[step.origin.id];step=null!=nextStep?nextStep:null}return directions.reverse()}for(var _i=0,_a=this.edges[current.origin.id];_i<_a.length;_i++){var edge=_a[_i],vortexNotAccessible=edge.vortex&&!1===edge.vortex.accessible;if(!accessible||!vortexNotAccessible&&!1!==edge.origin.accessible&&!1!==edge.destination.accessible){var newCost=costSoFar[current.origin.id]+edge.weight;if(null==costSoFar[edge.destination.id]||newCost<costSoFar[edge.destination.id]){costSoFar[edge.destination.id]=newCost;var cost=newCost+this.getShortestEuclideanDistance(edge.destination,destinations);frontier.push({origin:edge.destination,priority:cost}),cameFrom[edge.destination.id]=edge}}}frontier.splice(0,1),frontier.sort((function(a,b){return a.priority-b.priority}))}return[]},NavigationGraph.prototype.getDistance=function(origin,destination){var scale,xDelta=origin.x-destination.x,yDelta=origin.y-destination.y,lengthSquared=xDelta*xDelta+yDelta*yDelta;return scale=null==this.mapsById[origin.map]?1:this.mapsById[origin.map]._scale,Math.sqrt(lengthSquared)/scale},NavigationGraph.prototype.getShortestEuclideanDistance=function(origin,destinations){var _this=this;return destinations.reduce((function(result,destination){var distance=_this.getDistance(origin,destination);return Math.min(result,distance)}),Number.MAX_VALUE)},NavigationGraph}();!function(ACTION_TYPE){ACTION_TYPE.DEPARTURE="Departure",ACTION_TYPE.TAKEVORTEX="TakeVortex",ACTION_TYPE.EXITVORTEX="ExitVortex",ACTION_TYPE.TURN="Turn",ACTION_TYPE.ARRIVAL="Arrival"}(ACTION_TYPE||(ACTION_TYPE={})),function(BEARING_TYPE){BEARING_TYPE.STRAIGHT="Straight",BEARING_TYPE.RIGHT="Right",BEARING_TYPE.SLIGHTRIGHT="SlightRight",BEARING_TYPE.LEFT="Left",BEARING_TYPE.SLIGHTLEFT="SlightLeft"}(BEARING_TYPE||(BEARING_TYPE={})),function(VORTEX_DIRECTION_TYPE){VORTEX_DIRECTION_TYPE.UP="up",VORTEX_DIRECTION_TYPE.DOWN="down",VORTEX_DIRECTION_TYPE.NONE="none"}(VORTEX_DIRECTION_TYPE||(VORTEX_DIRECTION_TYPE={}));var E_MESSAGES,Directive=function(_a){var origin=_a.origin,action=_a.action,distance=_a.distance,atLocation=_a.atLocation,instruction=_a.instruction;this.distance=0,this.node=origin,this.action=action,this.distance=distance||0,this.atLocation=atLocation,this.instruction="",instruction?this.instruction=instruction:(null!=action&&action.type===ACTION_TYPE.DEPARTURE?this.instruction=null!=atLocation?"Depart from "+atLocation.name:"Depart from current location":null!=action&&action.type===ACTION_TYPE.ARRIVAL?this.instruction=null!=atLocation?"Arrive at "+atLocation.name:"Arrive at destination":null!=action&&action.type===ACTION_TYPE.TAKEVORTEX?this.instruction="Take "+(atLocation&&atLocation.name)+" "+function(direction){switch(direction){case VORTEX_DIRECTION_TYPE.DOWN:case VORTEX_DIRECTION_TYPE.UP:return direction+" ";default:return""}}(action.direction)+"to "+action.toMap.name:null!=action&&action.type===ACTION_TYPE.EXITVORTEX?this.instruction="Exit "+(atLocation&&atLocation.name)+" at "+action.toMap.name:null!=action&&action.bearing===BEARING_TYPE.RIGHT?this.instruction="Turn right":null!=action&&action.bearing===BEARING_TYPE.SLIGHTRIGHT?this.instruction="Turn slightly right":null!=action&&action.bearing===BEARING_TYPE.STRAIGHT?this.instruction="Head straight":null!=action&&action.bearing===BEARING_TYPE.SLIGHTLEFT?this.instruction="Turn slightly left":null!=action&&action.bearing===BEARING_TYPE.LEFT&&(this.instruction="Turn left"),null!=action&&action.type===ACTION_TYPE.TURN&&atLocation&&(this.instruction+=" at "+atLocation.name))};!function(E_MESSAGES){E_MESSAGES.NO_VALID_PATH="No Valid Path Available"}(E_MESSAGES||(E_MESSAGES={}));var BEARING_CHANGE_THRESHOLD=.1*Math.PI;function differenceBetweenAngles(a,b){return((b-a+Math.PI)%(2*Math.PI)+2*Math.PI)%(2*Math.PI)-Math.PI}var Navigator=function(){function Navigator(_a){var locations=_a.locations,nodes=_a.nodes,vortexes=_a.vortexes,maps=_a.maps,showVortexNames=_a.showVortexNames;this.graph=new NavigationGraph({maps:maps,nodes:nodes,showVortexNames:showVortexNames,vortexes:vortexes}),this.locationsByNodeId=locations.reduce((function(result,location){return location.nodes&&location.nodes.forEach((function(node){result[node.node]=location})),location.polygons&&location.polygons.forEach((function(polygon){polygon.entrances&&polygon.entrances.forEach((function(nodeId){result[nodeId]=location}))})),result}),{})}return Navigator.prototype.getClosestLocationInRay=function(startingEdge,angleThreshold,distanceThreshold){void 0===angleThreshold&&(angleThreshold=.5*Math.PI),void 0===distanceThreshold&&(distanceThreshold=10);for(var totalAngle=0,totalDistance=0,currentEdge=startingEdge;Math.abs(totalAngle)<angleThreshold&&totalDistance<distanceThreshold;){for(var straightestEdge=null,deltaAngle=0,_i=0,exits_1=this.graph.edges[currentEdge.destination.id];_i<exits_1.length;_i++){var exit=exits_1[_i];if(exit.distance>0)if(null!=straightestEdge){var newDelta=-differenceBetweenAngles(currentEdge.angle,exit.angle);Math.abs(newDelta)<Math.abs(deltaAngle)&&(straightestEdge=exit,deltaAngle=newDelta)}else straightestEdge=exit,deltaAngle=-differenceBetweenAngles(currentEdge.angle,exit.angle)}if(null==straightestEdge)return null;if(Math.abs(deltaAngle)>=angleThreshold)return null;if(totalAngle+=deltaAngle,totalDistance+=straightestEdge.distance,Math.abs(totalAngle)>=angleThreshold||totalDistance>distanceThreshold)return null;var location_1=this.locationsByNodeId[straightestEdge.destination.id];if(null!=location_1)return location_1;currentEdge=straightestEdge}return null},Navigator.prototype.getDirections=function(_a){var originIds=_a.originIds,destinationNodeIds=_a.destinationNodeIds,accessible=_a.accessible,departFrom=_a.departFrom,arriveAt=_a.arriveAt,steps=this.graph.aStar(originIds,destinationNodeIds,accessible);if(0===steps.length)return{distance:0,instructions:[new Directive({distance:0,instruction:E_MESSAGES.NO_VALID_PATH})],path:[]};for(var distance=0,path=new Array(steps.length+1),i=0;i<steps.length;i++)path[i]=steps[i].origin;path[steps.length]=steps[steps.length-1].destination;var instructions=[],prevNode=null,prevEdge=null,distanceToInstruction=0,totalWalkedDistance=0,_loop_1=function(i){var edge=steps[i],origin_1=edge.origin,destination=edge.destination;if(distance+=edge.distance,distanceToInstruction+=(null==prevEdge?void 0:prevEdge.distance)||0,0===i&&instructions.push(new Directive({action:{type:ACTION_TYPE.DEPARTURE},atLocation:departFrom,distance:0,origin:origin_1})),null!=edge.vortex){var fromMap=this_1.graph.mapsById[origin_1.map],toMap=this_1.graph.mapsById[destination.map],direction=VORTEX_DIRECTION_TYPE.NONE;if(null!=fromMap.elevation&&null!=toMap.elevation){var elevationDelta=fromMap.elevation-toMap.elevation;elevationDelta>0?direction=VORTEX_DIRECTION_TYPE.DOWN:elevationDelta<0&&(direction=VORTEX_DIRECTION_TYPE.UP)}instructions.push(new Directive({action:{direction:direction,fromMap:fromMap,toMap:toMap,type:ACTION_TYPE.TAKEVORTEX},atLocation:edge.vortex,distance:distanceToInstruction,origin:origin_1})),totalWalkedDistance+=distanceToInstruction,distanceToInstruction=0}else if(null!=prevNode&&null!=prevEdge)if(null!=prevEdge.vortex){fromMap=this_1.graph.mapsById[prevNode.map],toMap=this_1.graph.mapsById[prevEdge.destination.map];instructions.push(new Directive({action:{fromMap:fromMap,toMap:toMap,type:ACTION_TYPE.EXITVORTEX},atLocation:prevEdge.vortex,distance:distanceToInstruction,origin:origin_1})),totalWalkedDistance+=distanceToInstruction,distanceToInstruction=0}else{var otherExits=this_1.graph.edges[origin_1.id].filter((function(exit){return exit.destination!==prevNode&&exit.destination!==edge.destination}));if(otherExits.length>0){var relativeBearingAngle=-differenceBetweenAngles(prevEdge.angle,edge.angle),closestOptionDelta=otherExits.reduce((function(result,exit){var newDelta=-differenceBetweenAngles(edge.angle,exit.angle);return Math.min(result,Math.abs(newDelta))}),Math.PI);if(Math.abs(relativeBearingAngle)>=BEARING_CHANGE_THRESHOLD||Math.abs(closestOptionDelta)<=BEARING_CHANGE_THRESHOLD){var relativeBearing=void 0;relativeBearing=relativeBearingAngle<=-Math.PI/4?BEARING_TYPE.RIGHT:relativeBearingAngle<=-BEARING_CHANGE_THRESHOLD?BEARING_TYPE.SLIGHTRIGHT:relativeBearingAngle<=BEARING_CHANGE_THRESHOLD?BEARING_TYPE.STRAIGHT:relativeBearingAngle<=Math.PI/4?BEARING_TYPE.SLIGHTLEFT:BEARING_TYPE.LEFT;var referenceLocation=this_1.locationsByNodeId[origin_1.id];if(referenceLocation||(referenceLocation=this_1.getClosestLocationInRay(prevEdge,.5*Math.PI,10)),null!=referenceLocation){var instruction=new Directive({action:{bearing:relativeBearing,referencePosition:"At",type:ACTION_TYPE.TURN},atLocation:referenceLocation,distance:distanceToInstruction,origin:origin_1});instruction.type=relativeBearing,instructions.push(instruction)}else instructions.push(new Directive({action:{bearing:relativeBearing,referencePosition:"At",type:ACTION_TYPE.TURN},distance:distanceToInstruction,origin:origin_1}));totalWalkedDistance+=distanceToInstruction,distanceToInstruction=0}}}i===steps.length-1&&(instructions.push(new Directive({action:{type:ACTION_TYPE.ARRIVAL},atLocation:arriveAt,distance:distance-totalWalkedDistance<0?0:distance-totalWalkedDistance,origin:edge.destination})),totalWalkedDistance+=distanceToInstruction,distanceToInstruction=0),prevNode=origin_1,prevEdge=edge},this_1=this;for(i=0;i<steps.length;i++)_loop_1(i);for(var filteredInstructions=[],previousVortexNode=null,l=instructions.length-1;l>=0;l--){var filteredInstruction=instructions[l],action=filteredInstruction.action;action&&action.type===ACTION_TYPE.TAKEVORTEX?(previousVortexNode=filteredInstruction.node,filteredInstructions.unshift(filteredInstruction)):action&&action.type===ACTION_TYPE.TURN&&null!=previousVortexNode?this.graph.getDistance(filteredInstruction.node,previousVortexNode)>5&&filteredInstructions.unshift(filteredInstruction):filteredInstructions.unshift(filteredInstruction)}return{distance:distance,instructions:filteredInstructions,path:path}},Navigator}(),dms=createCommonjsModule((function(module){var Dms={parseDMS:function(dmsStr){if("number"==typeof dmsStr&&isFinite(dmsStr))return Number(dmsStr);var deg,dms=String(dmsStr).trim().replace(/^-/,"").replace(/[NSEW]$/i,"").split(/[^0-9.,]+/);if(""==dms[dms.length-1]&&dms.splice(dms.length-1),""==dms)return NaN;switch(dms.length){case 3:deg=dms[0]/1+dms[1]/60+dms[2]/3600;break;case 2:deg=dms[0]/1+dms[1]/60;break;case 1:deg=dms[0];break;default:return NaN}return/^-|[WS]$/i.test(dmsStr.trim())&&(deg=-deg),Number(deg)},separator:"",toDMS:function(deg,format,dp){if(isNaN(deg))return null;if(void 0===format&&(format="dms"),void 0===dp)switch(format){case"d":case"deg":dp=4;break;case"dm":case"deg+min":dp=2;break;case"dms":case"deg+min+sec":dp=0;break;default:format="dms",dp=0}var dms,d,m,s;switch(deg=Math.abs(deg),format){default:case"d":case"deg":(d=deg.toFixed(dp))<100&&(d="0"+d),d<10&&(d="0"+d),dms=d+"°";break;case"dm":case"deg+min":d=Math.floor(deg),60==(m=(60*deg%60).toFixed(dp))&&(m=0,d++),m<10&&(m="0"+m),dms=(d=("000"+d).slice(-3))+"°"+Dms.separator+m+"′";break;case"dms":case"deg+min+sec":d=Math.floor(deg),m=Math.floor(3600*deg/60)%60,60==(s=(3600*deg%60).toFixed(dp))&&(s=(0).toFixed(dp),m++),60==m&&(m=0,d++),d=("000"+d).slice(-3),m=("00"+m).slice(-2),s<10&&(s="0"+s),dms=d+"°"+Dms.separator+m+"′"+Dms.separator+s+"″"}return dms},toLat:function(deg,format,dp){var lat=Dms.toDMS(deg,format,dp);return null===lat?"–":lat.slice(1)+Dms.separator+(deg<0?"S":"N")},toLon:function(deg,format,dp){var lon=Dms.toDMS(deg,format,dp);return null===lon?"–":lon+Dms.separator+(deg<0?"W":"E")},toBrng:function(deg,format,dp){deg=(Number(deg)+360)%360;var brng=Dms.toDMS(deg,format,dp);return null===brng?"–":brng.replace("360","0")},compassPoint:function(bearing,precision){void 0===precision&&(precision=3),bearing=(bearing%360+360)%360;var n=4*Math.pow(2,precision-1);return["N","NNE","NE","ENE","E","ESE","SE","SSE","S","SSW","SW","WSW","W","WNW","NW","NNW"][Math.round(bearing*n/360)%n*16/n]}};module.exports&&(module.exports=Dms)})),latlonSpherical=createCommonjsModule((function(module){var Dms;function LatLon(lat,lon){if(!(this instanceof LatLon))return new LatLon(lat,lon);this.lat=Number(lat),this.lon=Number(lon)}module.exports&&(Dms=dms),LatLon.prototype.distanceTo=function(point,radius){if(!(point instanceof LatLon))throw new TypeError("point is not LatLon object");var R=radius=void 0===radius?6371e3:Number(radius),φ1=this.lat.toRadians(),λ1=this.lon.toRadians(),φ2=point.lat.toRadians(),Δφ=φ2-φ1,Δλ=point.lon.toRadians()-λ1,a=Math.sin(Δφ/2)*Math.sin(Δφ/2)+Math.cos(φ1)*Math.cos(φ2)*Math.sin(Δλ/2)*Math.sin(Δλ/2);return R*(2*Math.atan2(Math.sqrt(a),Math.sqrt(1-a)))},LatLon.prototype.bearingTo=function(point){if(!(point instanceof LatLon))throw new TypeError("point is not LatLon object");var φ1=this.lat.toRadians(),φ2=point.lat.toRadians(),Δλ=(point.lon-this.lon).toRadians(),y=Math.sin(Δλ)*Math.cos(φ2),x=Math.cos(φ1)*Math.sin(φ2)-Math.sin(φ1)*Math.cos(φ2)*Math.cos(Δλ);return(Math.atan2(y,x).toDegrees()+360)%360},LatLon.prototype.finalBearingTo=function(point){if(!(point instanceof LatLon))throw new TypeError("point is not LatLon object");return(point.bearingTo(this)+180)%360},LatLon.prototype.midpointTo=function(point){if(!(point instanceof LatLon))throw new TypeError("point is not LatLon object");var φ1=this.lat.toRadians(),λ1=this.lon.toRadians(),φ2=point.lat.toRadians(),Δλ=(point.lon-this.lon).toRadians(),Bx=Math.cos(φ2)*Math.cos(Δλ),By=Math.cos(φ2)*Math.sin(Δλ),x=Math.sqrt((Math.cos(φ1)+Bx)*(Math.cos(φ1)+Bx)+By*By),y=Math.sin(φ1)+Math.sin(φ2),φ3=Math.atan2(y,x),λ3=λ1+Math.atan2(By,Math.cos(φ1)+Bx);return new LatLon(φ3.toDegrees(),(λ3.toDegrees()+540)%360-180)},LatLon.prototype.intermediatePointTo=function(point,fraction){if(!(point instanceof LatLon))throw new TypeError("point is not LatLon object");var φ1=this.lat.toRadians(),λ1=this.lon.toRadians(),φ2=point.lat.toRadians(),λ2=point.lon.toRadians(),sinφ1=Math.sin(φ1),cosφ1=Math.cos(φ1),sinλ1=Math.sin(λ1),cosλ1=Math.cos(λ1),sinφ2=Math.sin(φ2),cosφ2=Math.cos(φ2),sinλ2=Math.sin(λ2),cosλ2=Math.cos(λ2),Δφ=φ2-φ1,Δλ=λ2-λ1,a=Math.sin(Δφ/2)*Math.sin(Δφ/2)+Math.cos(φ1)*Math.cos(φ2)*Math.sin(Δλ/2)*Math.sin(Δλ/2),δ=2*Math.atan2(Math.sqrt(a),Math.sqrt(1-a)),A=Math.sin((1-fraction)*δ)/Math.sin(δ),B=Math.sin(fraction*δ)/Math.sin(δ),x=A*cosφ1*cosλ1+B*cosφ2*cosλ2,y=A*cosφ1*sinλ1+B*cosφ2*sinλ2,z=A*sinφ1+B*sinφ2,φ3=Math.atan2(z,Math.sqrt(x*x+y*y)),λ3=Math.atan2(y,x);return new LatLon(φ3.toDegrees(),(λ3.toDegrees()+540)%360-180)},LatLon.prototype.destinationPoint=function(distance,bearing,radius){radius=void 0===radius?6371e3:Number(radius);var δ=Number(distance)/radius,θ=Number(bearing).toRadians(),φ1=this.lat.toRadians(),λ1=this.lon.toRadians(),sinφ1=Math.sin(φ1),cosφ1=Math.cos(φ1),sinδ=Math.sin(δ),cosδ=Math.cos(δ),sinθ=Math.sin(θ),sinφ2=sinφ1*cosδ+cosφ1*sinδ*Math.cos(θ),φ2=Math.asin(sinφ2),y=sinθ*sinδ*cosφ1,x=cosδ-sinφ1*sinφ2,λ2=λ1+Math.atan2(y,x);return new LatLon(φ2.toDegrees(),(λ2.toDegrees()+540)%360-180)},LatLon.intersection=function(p1,brng1,p2,brng2){if(!(p1 instanceof LatLon))throw new TypeError("p1 is not LatLon object");if(!(p2 instanceof LatLon))throw new TypeError("p2 is not LatLon object");var φ1=p1.lat.toRadians(),λ1=p1.lon.toRadians(),φ2=p2.lat.toRadians(),λ2=p2.lon.toRadians(),θ13=Number(brng1).toRadians(),θ23=Number(brng2).toRadians(),Δφ=φ2-φ1,Δλ=λ2-λ1,δ12=2*Math.asin(Math.sqrt(Math.sin(Δφ/2)*Math.sin(Δφ/2)+Math.cos(φ1)*Math.cos(φ2)*Math.sin(Δλ/2)*Math.sin(Δλ/2)));if(0==δ12)return null;var θa=Math.acos((Math.sin(φ2)-Math.sin(φ1)*Math.cos(δ12))/(Math.sin(δ12)*Math.cos(φ1)));isNaN(θa)&&(θa=0);var θb=Math.acos((Math.sin(φ1)-Math.sin(φ2)*Math.cos(δ12))/(Math.sin(δ12)*Math.cos(φ2))),α1=θ13-(Math.sin(λ2-λ1)>0?θa:2*Math.PI-θa),α2=(Math.sin(λ2-λ1)>0?2*Math.PI-θb:θb)-θ23;if(0==Math.sin(α1)&&0==Math.sin(α2))return null;if(Math.sin(α1)*Math.sin(α2)<0)return null;var α3=Math.acos(-Math.cos(α1)*Math.cos(α2)+Math.sin(α1)*Math.sin(α2)*Math.cos(δ12)),δ13=Math.atan2(Math.sin(δ12)*Math.sin(α1)*Math.sin(α2),Math.cos(α2)+Math.cos(α1)*Math.cos(α3)),φ3=Math.asin(Math.sin(φ1)*Math.cos(δ13)+Math.cos(φ1)*Math.sin(δ13)*Math.cos(θ13)),λ3=λ1+Math.atan2(Math.sin(θ13)*Math.sin(δ13)*Math.cos(φ1),Math.cos(δ13)-Math.sin(φ1)*Math.sin(φ3));return new LatLon(φ3.toDegrees(),(λ3.toDegrees()+540)%360-180)},LatLon.prototype.crossTrackDistanceTo=function(pathStart,pathEnd,radius){if(!(pathStart instanceof LatLon))throw new TypeError("pathStart is not LatLon object");if(!(pathEnd instanceof LatLon))throw new TypeError("pathEnd is not LatLon object");var R=void 0===radius?6371e3:Number(radius),δ13=pathStart.distanceTo(this,R)/R,θ13=pathStart.bearingTo(this).toRadians(),θ12=pathStart.bearingTo(pathEnd).toRadians();return Math.asin(Math.sin(δ13)*Math.sin(θ13-θ12))*R},LatLon.prototype.alongTrackDistanceTo=function(pathStart,pathEnd,radius){if(!(pathStart instanceof LatLon))throw new TypeError("pathStart is not LatLon object");if(!(pathEnd instanceof LatLon))throw new TypeError("pathEnd is not LatLon object");var R=void 0===radius?6371e3:Number(radius),δ13=pathStart.distanceTo(this,R)/R,θ13=pathStart.bearingTo(this).toRadians(),θ12=pathStart.bearingTo(pathEnd).toRadians(),δxt=Math.asin(Math.sin(δ13)*Math.sin(θ13-θ12));return Math.acos(Math.cos(δ13)/Math.abs(Math.cos(δxt)))*Math.sign(Math.cos(θ12-θ13))*R},LatLon.prototype.maxLatitude=function(bearing){var θ=Number(bearing).toRadians(),φ=this.lat.toRadians();return Math.acos(Math.abs(Math.sin(θ)*Math.cos(φ))).toDegrees()},LatLon.crossingParallels=function(point1,point2,latitude){var φ=Number(latitude).toRadians(),φ1=point1.lat.toRadians(),λ1=point1.lon.toRadians(),φ2=point2.lat.toRadians(),Δλ=point2.lon.toRadians()-λ1,x=Math.sin(φ1)*Math.cos(φ2)*Math.cos(φ)*Math.sin(Δλ),y=Math.sin(φ1)*Math.cos(φ2)*Math.cos(φ)*Math.cos(Δλ)-Math.cos(φ1)*Math.sin(φ2)*Math.cos(φ),z=Math.cos(φ1)*Math.cos(φ2)*Math.sin(φ)*Math.sin(Δλ);if(z*z>x*x+y*y)return null;var λm=Math.atan2(-y,x),Δλi=Math.acos(z/Math.sqrt(x*x+y*y)),λi2=λ1+λm+Δλi;return{lon1:((λ1+λm-Δλi).toDegrees()+540)%360-180,lon2:(λi2.toDegrees()+540)%360-180}},LatLon.prototype.rhumbDistanceTo=function(point,radius){if(!(point instanceof LatLon))throw new TypeError("point is not LatLon object");var R=radius=void 0===radius?6371e3:Number(radius),φ1=this.lat.toRadians(),φ2=point.lat.toRadians(),Δφ=φ2-φ1,Δλ=Math.abs(point.lon-this.lon).toRadians();Δλ>Math.PI&&(Δλ-=2*Math.PI);var Δψ=Math.log(Math.tan(φ2/2+Math.PI/4)/Math.tan(φ1/2+Math.PI/4)),q=Math.abs(Δψ)>1e-11?Δφ/Δψ:Math.cos(φ1);return Math.sqrt(Δφ*Δφ+q*q*Δλ*Δλ)*R},LatLon.prototype.rhumbBearingTo=function(point){if(!(point instanceof LatLon))throw new TypeError("point is not LatLon object");var φ1=this.lat.toRadians(),φ2=point.lat.toRadians(),Δλ=(point.lon-this.lon).toRadians();Δλ>Math.PI&&(Δλ-=2*Math.PI),Δλ<-Math.PI&&(Δλ+=2*Math.PI);var Δψ=Math.log(Math.tan(φ2/2+Math.PI/4)/Math.tan(φ1/2+Math.PI/4));return(Math.atan2(Δλ,Δψ).toDegrees()+360)%360},LatLon.prototype.rhumbDestinationPoint=function(distance,bearing,radius){radius=void 0===radius?6371e3:Number(radius);var δ=Number(distance)/radius,φ1=this.lat.toRadians(),λ1=this.lon.toRadians(),θ=Number(bearing).toRadians(),Δφ=δ*Math.cos(θ),φ2=φ1+Δφ;Math.abs(φ2)>Math.PI/2&&(φ2=φ2>0?Math.PI-φ2:-Math.PI-φ2);var Δψ=Math.log(Math.tan(φ2/2+Math.PI/4)/Math.tan(φ1/2+Math.PI/4)),q=Math.abs(Δψ)>1e-11?Δφ/Δψ:Math.cos(φ1),λ2=λ1+δ*Math.sin(θ)/q;return new LatLon(φ2.toDegrees(),(λ2.toDegrees()+540)%360-180)},LatLon.prototype.rhumbMidpointTo=function(point){if(!(point instanceof LatLon))throw new TypeError("point is not LatLon object");var φ1=this.lat.toRadians(),λ1=this.lon.toRadians(),φ2=point.lat.toRadians(),λ2=point.lon.toRadians();Math.abs(λ2-λ1)>Math.PI&&(λ1+=2*Math.PI);var φ3=(φ1+φ2)/2,f1=Math.tan(Math.PI/4+φ1/2),f2=Math.tan(Math.PI/4+φ2/2),f3=Math.tan(Math.PI/4+φ3/2),λ3=((λ2-λ1)*Math.log(f3)+λ1*Math.log(f2)-λ2*Math.log(f1))/Math.log(f2/f1);return isFinite(λ3)||(λ3=(λ1+λ2)/2),LatLon(φ3.toDegrees(),(λ3.toDegrees()+540)%360-180)},LatLon.areaOf=function(polygon,radius){var R=void 0===radius?6371e3:Number(radius),closed=polygon[0].equals(polygon[polygon.length-1]);closed||polygon.push(polygon[0]);for(var nVertices=polygon.length-1,S=0,v=0;v<nVertices;v++){var φ1=polygon[v].lat.toRadians(),φ2=polygon[v+1].lat.toRadians(),Δλ=(polygon[v+1].lon-polygon[v].lon).toRadians();S+=2*Math.atan2(Math.tan(Δλ/2)*(Math.tan(φ1/2)+Math.tan(φ2/2)),1+Math.tan(φ1/2)*Math.tan(φ2/2))}(function(polygon){for(var ΣΔ=0,prevBrng=polygon[0].bearingTo(polygon[1]),v=0;v<polygon.length-1;v++){var initBrng=polygon[v].bearingTo(polygon[v+1]),finalBrng=polygon[v].finalBearingTo(polygon[v+1]);ΣΔ+=(initBrng-prevBrng+540)%360-180,ΣΔ+=(finalBrng-initBrng+540)%360-180,prevBrng=finalBrng}initBrng=polygon[0].bearingTo(polygon[1]);return ΣΔ+=(initBrng-prevBrng+540)%360-180,Math.abs(ΣΔ)<90})(polygon)&&(S=Math.abs(S)-2*Math.PI);var A=Math.abs(S*R*R);return closed||polygon.pop(),A},LatLon.prototype.equals=function(point){if(!(point instanceof LatLon))throw new TypeError("point is not LatLon object");return this.lat==point.lat&&this.lon==point.lon},LatLon.prototype.toString=function(format,dp){return Dms.toLat(this.lat,format,dp)+", "+Dms.toLon(this.lon,format,dp)},void 0===Number.prototype.toRadians&&(Number.prototype.toRadians=function(){return this*Math.PI/180}),void 0===Number.prototype.toDegrees&&(Number.prototype.toDegrees=function(){return 180*this/Math.PI}),module.exports&&(module.exports=LatLon)})),vector3d=createCommonjsModule((function(module){function Vector3d(x,y,z){if(!(this instanceof Vector3d))return new Vector3d(x,y,z);this.x=Number(x),this.y=Number(y),this.z=Number(z)}Vector3d.prototype.plus=function(v){if(!(v instanceof Vector3d))throw new TypeError("v is not Vector3d object");return new Vector3d(this.x+v.x,this.y+v.y,this.z+v.z)},Vector3d.prototype.minus=function(v){if(!(v instanceof Vector3d))throw new TypeError("v is not Vector3d object");return new Vector3d(this.x-v.x,this.y-v.y,this.z-v.z)},Vector3d.prototype.times=function(x){return x=Number(x),new Vector3d(this.x*x,this.y*x,this.z*x)},Vector3d.prototype.dividedBy=function(x){return x=Number(x),new Vector3d(this.x/x,this.y/x,this.z/x)},Vector3d.prototype.dot=function(v){if(!(v instanceof Vector3d))throw new TypeError("v is not Vector3d object");return this.x*v.x+this.y*v.y+this.z*v.z},Vector3d.prototype.cross=function(v){if(!(v instanceof Vector3d))throw new TypeError("v is not Vector3d object");return new Vector3d(this.y*v.z-this.z*v.y,this.z*v.x-this.x*v.z,this.x*v.y-this.y*v.x)},Vector3d.prototype.negate=function(){return new Vector3d(-this.x,-this.y,-this.z)},Vector3d.prototype.length=function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)},Vector3d.prototype.unit=function(){var norm=this.length();return 1==norm||0==norm?this:new Vector3d(this.x/norm,this.y/norm,this.z/norm)},Vector3d.prototype.angleTo=function(v,n){if(!(v instanceof Vector3d))throw new TypeError("v is not Vector3d object");if(!(n instanceof Vector3d||null==n))throw new TypeError("n is not Vector3d object");var sign=null==n?1:Math.sign(this.cross(v).dot(n)),sinθ=this.cross(v).length()*sign,cosθ=this.dot(v);return Math.atan2(sinθ,cosθ)},Vector3d.prototype.rotateAround=function(axis,theta){if(!(axis instanceof Vector3d))throw new TypeError("axis is not Vector3d object");for(var p1=this.unit(),p=[p1.x,p1.y,p1.z],a=axis.unit(),s=Math.sin(theta),c=Math.cos(theta),q=[[a.x*a.x*(1-c)+c,a.x*a.y*(1-c)-a.z*s,a.x*a.z*(1-c)+a.y*s],[a.y*a.x*(1-c)+a.z*s,a.y*a.y*(1-c)+c,a.y*a.z*(1-c)-a.x*s],[a.z*a.x*(1-c)-a.y*s,a.z*a.y*(1-c)+a.x*s,a.z*a.z*(1-c)+c]],qp=[0,0,0],i=0;i<3;i++)for(var j=0;j<3;j++)qp[i]+=q[i][j]*p[j];return new Vector3d(qp[0],qp[1],qp[2])},Vector3d.prototype.toString=function(precision){var p=void 0===precision?3:Number(precision);return"["+this.x.toFixed(p)+","+this.y.toFixed(p)+","+this.z.toFixed(p)+"]"},void 0===Math.sign&&(Math.sign=function(x){return 0===(x=+x)||isNaN(x)?x:x>0?1:-1}),module.exports&&(module.exports=Vector3d)})),latlonEllipsoidal=createCommonjsModule((function(module){var Vector3d,Dms;function LatLon(lat,lon,datum){if(!(this instanceof LatLon))return new LatLon(lat,lon,datum);void 0===datum&&(datum=LatLon.datum.WGS84),this.lat=Number(lat),this.lon=Number(lon),this.datum=datum}module.exports&&(Vector3d=vector3d),module.exports&&(Dms=dms),LatLon.ellipsoid={WGS84:{a:6378137,b:6356752.314245,f:1/298.257223563},Airy1830:{a:6377563.396,b:6356256.909,f:1/299.3249646},AiryModified:{a:6377340.189,b:6356034.448,f:1/299.3249646},Bessel1841:{a:6377397.155,b:6356078.962818,f:1/299.1528128},Clarke1866:{a:6378206.4,b:6356583.8,f:1/294.978698214},Clarke1880IGN:{a:6378249.2,b:6356515,f:1/293.466021294},GRS80:{a:6378137,b:6356752.31414,f:1/298.257222101},Intl1924:{a:6378388,b:6356911.946,f:1/297},WGS72:{a:6378135,b:6356750.5,f:1/298.26}},LatLon.datum={ED50:{ellipsoid:LatLon.ellipsoid.Intl1924,transform:[89.5,93.8,123.1,-1.2,0,0,.156]},Irl1975:{ellipsoid:LatLon.ellipsoid.AiryModified,transform:[-482.53,130.596,-564.557,-8.15,-1.042,-.214,-.631]},NAD27:{ellipsoid:LatLon.ellipsoid.Clarke1866,transform:[8,-160,-176,0,0,0,0]},NAD83:{ellipsoid:LatLon.ellipsoid.GRS80,transform:[1.004,-1.91,-.515,-.0015,.0267,34e-5,.011]},NTF:{ellipsoid:LatLon.ellipsoid.Clarke1880IGN,transform:[168,60,-320,0,0,0,0]},OSGB36:{ellipsoid:LatLon.ellipsoid.Airy1830,transform:[-446.448,125.157,-542.06,20.4894,-.1502,-.247,-.8421]},Potsdam:{ellipsoid:LatLon.ellipsoid.Bessel1841,transform:[-582,-105,-414,-8.3,1.04,.35,-3.08]},TokyoJapan:{ellipsoid:LatLon.ellipsoid.Bessel1841,transform:[148,-507,-685,0,0,0,0]},WGS72:{ellipsoid:LatLon.ellipsoid.WGS72,transform:[0,0,-4.5,-.22,0,0,.554]},WGS84:{ellipsoid:LatLon.ellipsoid.WGS84,transform:[0,0,0,0,0,0,0]}},LatLon.prototype.convertDatum=function(toDatum){var oldLatLon=this,transform=null;if(oldLatLon.datum==LatLon.datum.WGS84&&(transform=toDatum.transform),toDatum==LatLon.datum.WGS84){transform=[];for(var p=0;p<7;p++)transform[p]=-oldLatLon.datum.transform[p]}return null==transform&&(oldLatLon=this.convertDatum(LatLon.datum.WGS84),transform=toDatum.transform),oldLatLon.toCartesian().applyTransform(transform).toLatLonE(toDatum)},LatLon.prototype.toCartesian=function(){var φ=this.lat.toRadians(),λ=this.lon.toRadians(),a=this.datum.ellipsoid.a,f=this.datum.ellipsoid.f,sinφ=Math.sin(φ),cosφ=Math.cos(φ),sinλ=Math.sin(λ),cosλ=Math.cos(λ),eSq=2*f-f*f,ν=a/Math.sqrt(1-eSq*sinφ*sinφ);return new Vector3d((ν+0)*cosφ*cosλ,(ν+0)*cosφ*sinλ,(ν*(1-eSq)+0)*sinφ)},Vector3d.prototype.toLatLonE=function(datum){var x=this.x,y=this.y,z=this.z,a=datum.ellipsoid.a,b=datum.ellipsoid.b,f=datum.ellipsoid.f,e2=2*f-f*f,ε2=e2/(1-e2),p=Math.sqrt(x*x+y*y),tanβ=b*z/(a*p)*(1+ε2*b/Math.sqrt(p*p+z*z)),sinβ=tanβ/Math.sqrt(1+tanβ*tanβ),cosβ=sinβ/tanβ,φ=isNaN(cosβ)?0:Math.atan2(z+ε2*b*sinβ*sinβ*sinβ,p-e2*a*cosβ*cosβ*cosβ),λ=Math.atan2(y,x);return new LatLon(φ.toDegrees(),λ.toDegrees(),datum)},Vector3d.prototype.applyTransform=function(t){var x1=this.x,y1=this.y,z1=this.z,tx=t[0],ty=t[1],tz=t[2],s1=t[3]/1e6+1,rx=(t[4]/3600).toRadians(),ry=(t[5]/3600).toRadians(),rz=(t[6]/3600).toRadians();return new Vector3d(tx+x1*s1-y1*rz+z1*ry,ty+x1*rz+y1*s1-z1*rx,tz-x1*ry+y1*rx+z1*s1)},LatLon.prototype.toString=function(format,dp){return Dms.toLat(this.lat,format,dp)+", "+Dms.toLon(this.lon,format,dp)},void 0===Number.prototype.toRadians&&(Number.prototype.toRadians=function(){return this*Math.PI/180}),void 0===Number.prototype.toDegrees&&(Number.prototype.toDegrees=function(){return 180*this/Math.PI}),module.exports&&(module.exports=LatLon,module.exports.Vector3d=Vector3d)})),latlonVincenty=createCommonjsModule((function(module){var LatLon;module.exports&&(LatLon=latlonEllipsoidal),LatLon.prototype.distanceTo=function(point){if(!(point instanceof LatLon))throw new TypeError("point is not LatLon object");try{return Number(this.inverse(point).distance.toFixed(3))}catch(e){return NaN}},LatLon.prototype.initialBearingTo=function(point){if(!(point instanceof LatLon))throw new TypeError("point is not LatLon object");try{return Number(this.inverse(point).initialBearing.toFixed(9))}catch(e){return NaN}},LatLon.prototype.finalBearingTo=function(point){if(!(point instanceof LatLon))throw new TypeError("point is not LatLon object");try{return Number(this.inverse(point).finalBearing.toFixed(9))}catch(e){return NaN}},LatLon.prototype.destinationPoint=function(distance,initialBearing){return this.direct(Number(distance),Number(initialBearing)).point},LatLon.prototype.finalBearingOn=function(distance,initialBearing){return Number(this.direct(Number(distance),Number(initialBearing)).finalBearing.toFixed(9))},LatLon.prototype.direct=function(distance,initialBearing){var cos2σM,sinσ,cosσ,σʹ,φ1=this.lat.toRadians(),λ1=this.lon.toRadians(),α1=initialBearing.toRadians(),s=distance,a=this.datum.ellipsoid.a,b=this.datum.ellipsoid.b,f=this.datum.ellipsoid.f,sinα1=Math.sin(α1),cosα1=Math.cos(α1),tanU1=(1-f)*Math.tan(φ1),cosU1=1/Math.sqrt(1+tanU1*tanU1),sinU1=tanU1*cosU1,σ1=Math.atan2(tanU1,cosα1),sinα=cosU1*sinα1,cosSqα=1-sinα*sinα,uSq=cosSqα*(a*a-b*b)/(b*b),A=1+uSq/16384*(4096+uSq*(uSq*(320-175*uSq)-768)),B=uSq/1024*(256+uSq*(uSq*(74-47*uSq)-128)),σ=s/(b*A),iterations=0;do{cos2σM=Math.cos(2*σ1+σ),σʹ=σ,σ=s/(b*A)+B*(sinσ=Math.sin(σ))*(cos2σM+B/4*((cosσ=Math.cos(σ))*(2*cos2σM*cos2σM-1)-B/6*cos2σM*(4*sinσ*sinσ-3)*(4*cos2σM*cos2σM-3)))}while(Math.abs(σ-σʹ)>1e-12&&++iterations<100);if(iterations>=100)throw new Error("Formula failed to converge");var x=sinU1*sinσ-cosU1*cosσ*cosα1,φ2=Math.atan2(sinU1*cosσ+cosU1*sinσ*cosα1,(1-f)*Math.sqrt(sinα*sinα+x*x)),C=f/16*cosSqα*(4+f*(4-3*cosSqα)),λ2=(λ1+(Math.atan2(sinσ*sinα1,cosU1*cosσ-sinU1*sinσ*cosα1)-(1-C)*f*sinα*(σ+C*sinσ*(cos2σM+C*cosσ*(2*cos2σM*cos2σM-1))))+3*Math.PI)%(2*Math.PI)-Math.PI,α2=Math.atan2(sinα,-x);return α2=(α2+2*Math.PI)%(2*Math.PI),{point:new LatLon(φ2.toDegrees(),λ2.toDegrees(),this.datum),finalBearing:α2.toDegrees(),iterations:iterations}},LatLon.prototype.inverse=function(point){var p2=point;-180==this.lon&&(this.lon=180);var sinλ,cosλ,sinSqσ,sinα,C,λʹ,φ1=this.lat.toRadians(),λ1=this.lon.toRadians(),φ2=p2.lat.toRadians(),λ2=p2.lon.toRadians(),a=this.datum.ellipsoid.a,b=this.datum.ellipsoid.b,f=this.datum.ellipsoid.f,L=λ2-λ1,tanU1=(1-f)*Math.tan(φ1),cosU1=1/Math.sqrt(1+tanU1*tanU1),sinU1=tanU1*cosU1,tanU2=(1-f)*Math.tan(φ2),cosU2=1/Math.sqrt(1+tanU2*tanU2),sinU2=tanU2*cosU2,sinσ=0,cosσ=0,σ=0,cosSqα=0,cos2σM=0,λ=L,iterations=0,antimeridian=Math.abs(L)>Math.PI;do{if(0==(sinSqσ=cosU2*(sinλ=Math.sin(λ))*(cosU2*sinλ)+(cosU1*sinU2-sinU1*cosU2*(cosλ=Math.cos(λ)))*(cosU1*sinU2-sinU1*cosU2*cosλ)))break;if(cosσ=sinU1*sinU2+cosU1*cosU2*cosλ,λʹ=λ,λ=L+(1-(C=f/16*(cosSqα=1-(sinα=cosU1*cosU2*sinλ/(sinσ=Math.sqrt(sinSqσ)))*sinα)*(4+f*(4-3*cosSqα))))*f*sinα*((σ=Math.atan2(sinσ,cosσ))+C*sinσ*((cos2σM=0!=cosSqα?cosσ-2*sinU1*sinU2/cosSqα:0)+C*cosσ*(2*cos2σM*cos2σM-1))),(antimeridian?Math.abs(λ)-Math.PI:Math.abs(λ))>Math.PI)throw new Error("λ > π")}while(Math.abs(λ-λʹ)>1e-12&&++iterations<1e3);if(iterations>=1e3)throw new Error("Formula failed to converge");var uSq=cosSqα*(a*a-b*b)/(b*b),B=uSq/1024*(256+uSq*(uSq*(74-47*uSq)-128)),s=b*(1+uSq/16384*(4096+uSq*(uSq*(320-175*uSq)-768)))*(σ-B*sinσ*(cos2σM+B/4*(cosσ*(2*cos2σM*cos2σM-1)-B/6*cos2σM*(4*sinσ*sinσ-3)*(4*cos2σM*cos2σM-3)))),α1=Math.atan2(cosU2*sinλ,cosU1*sinU2-sinU1*cosU2*cosλ),α2=Math.atan2(cosU1*sinλ,-sinU1*cosU2+cosU1*sinU2*cosλ);return α1=(α1+2*Math.PI)%(2*Math.PI),α2=(α2+2*Math.PI)%(2*Math.PI),{distance:s,initialBearing:0==s?NaN:α1.toDegrees(),finalBearing:0==s?NaN:α2.toDegrees(),iterations:iterations}},void 0===Number.prototype.toRadians&&(Number.prototype.toRadians=function(){return this*Math.PI/180}),void 0===Number.prototype.toDegrees&&(Number.prototype.toDegrees=function(){return 180*this/Math.PI}),module.exports&&(module.exports=LatLon)})),latlonVectors=createCommonjsModule((function(module){var Vector3d,Dms;function LatLon(lat,lon){if(!(this instanceof LatLon))return new LatLon(lat,lon);this.lat=Number(lat),this.lon=Number(lon)}module.exports&&(Vector3d=vector3d),module.exports&&(Dms=dms),LatLon.prototype.toVector=function(){var φ=this.lat.toRadians(),λ=this.lon.toRadians(),x=Math.cos(φ)*Math.cos(λ),y=Math.cos(φ)*Math.sin(λ),z=Math.sin(φ);return new Vector3d(x,y,z)},Vector3d.prototype.toLatLonS=function(){var φ=Math.atan2(this.z,Math.sqrt(this.x*this.x+this.y*this.y)),λ=Math.atan2(this.y,this.x);return new LatLon(φ.toDegrees(),λ.toDegrees())},LatLon.prototype.greatCircle=function(bearing){var φ=this.lat.toRadians(),λ=this.lon.toRadians(),θ=Number(bearing).toRadians(),x=Math.sin(λ)*Math.cos(θ)-Math.sin(φ)*Math.cos(λ)*Math.sin(θ),y=-Math.cos(λ)*Math.cos(θ)-Math.sin(φ)*Math.sin(λ)*Math.sin(θ),z=Math.cos(φ)*Math.sin(θ);return new Vector3d(x,y,z)},Vector3d.prototype.greatCircle=function(bearing){var θ=Number(bearing).toRadians(),e=new Vector3d(0,0,1).cross(this),n=this.cross(e),eʹ=e.times(Math.cos(θ)/e.length());return n.times(Math.sin(θ)/n.length()).minus(eʹ)},LatLon.prototype.distanceTo=function(point,radius){if(!(point instanceof LatLon))throw new TypeError("point is not LatLon object");radius=void 0===radius?6371e3:Number(radius);var p1=this.toVector(),p2=point.toVector();return p1.angleTo(p2)*radius},LatLon.prototype.bearingTo=function(point){if(!(point instanceof LatLon))throw new TypeError("point is not LatLon object");var p1=this.toVector(),p2=point.toVector(),N=new Vector3d(0,0,1),c1=p1.cross(p2),c2=p1.cross(N);return(c1.angleTo(c2,p1).toDegrees()+360)%360},LatLon.prototype.midpointTo=function(point){if(!(point instanceof LatLon))throw new TypeError("point is not LatLon object");var p1=this.toVector(),p2=point.toVector();return p1.plus(p2).unit().toLatLonS()},LatLon.prototype.intermediatePointTo=function(point,fraction){if(!(point instanceof LatLon))throw new TypeError("point is not LatLon object");var n1=this.toVector(),n2=point.toVector(),sinθ=n1.cross(n2).length(),cosθ=n1.dot(n2),δi=Math.atan2(sinθ,cosθ)*Number(fraction),sinδi=Math.sin(δi),cosδi=Math.cos(δi),d=n1.cross(n2).unit().cross(n1),int=n1.times(cosδi).plus(d.times(sinδi));return new Vector3d(int.x,int.y,int.z).toLatLonS()},LatLon.prototype.intermediatePointOnChordTo=function(point,fraction){if(!(point instanceof LatLon))throw new TypeError("point is not LatLon object");var n1=this.toVector(),n2=point.toVector(),int=n1.plus(n2.minus(n1).times(Number(fraction)));return new Vector3d(int.x,int.y,int.z).toLatLonS()},LatLon.prototype.destinationPoint=function(distance,bearing,radius){radius=void 0===radius?6371e3:Number(radius);var n1=this.toVector(),δ=Number(distance)/radius,θ=Number(bearing).toRadians(),de=new Vector3d(0,0,1).cross(n1).unit(),dn=n1.cross(de),deSinθ=de.times(Math.sin(θ)),d=dn.times(Math.cos(θ)).plus(deSinθ),x=n1.times(Math.cos(δ)),y=d.times(Math.sin(δ));return x.plus(y).toLatLonS()},LatLon.intersection=function(path1start,path1brngEnd,path2start,path2brngEnd){if(!(path1start instanceof LatLon))throw new TypeError("path1start is not LatLon object");if(!(path2start instanceof LatLon))throw new TypeError("path2start is not LatLon object");if(!(path1brngEnd instanceof LatLon)&&isNaN(path1brngEnd))throw new TypeError("path1brngEnd is not LatLon object or bearing");if(!(path2brngEnd instanceof LatLon)&&isNaN(path2brngEnd))throw new TypeError("path2brngEnd is not LatLon object or bearing");var c1,c2,path1def,path2def,p1=path1start.toVector(),p2=path2start.toVector();path1brngEnd instanceof LatLon?(c1=p1.cross(path1brngEnd.toVector()),path1def="endpoint"):(c1=path1start.greatCircle(Number(path1brngEnd)),path1def="bearing"),path2brngEnd instanceof LatLon?(c2=p2.cross(path2brngEnd.toVector()),path2def="endpoint"):(c2=path2start.greatCircle(Number(path2brngEnd)),path2def="bearing");var i1=c1.cross(c2),i2=c2.cross(c1),intersection=null;switch(path1def+"+"+path2def){case"bearing+bearing":switch(Math.sign(c1.cross(p1).dot(i1))+Math.sign(c2.cross(p2).dot(i1))){case 2:intersection=i1;break;case-2:intersection=i2;break;case 0:intersection=p1.plus(p2).dot(i1)>0?i2:i1}break;case"bearing+endpoint":intersection=Math.sign(c1.cross(p1).dot(i1))>0?i1:i2;break;case"endpoint+bearing":intersection=Math.sign(c2.cross(p2).dot(i1))>0?i1:i2;break;case"endpoint+endpoint":intersection=p1.plus(p2).plus(path1brngEnd.toVector()).plus(path2brngEnd.toVector()).dot(i1)>0?i1:i2}return intersection.toLatLonS()},LatLon.prototype.crossTrackDistanceTo=function(pathStart,pathBrngEnd,radius){if(!(pathStart instanceof LatLon))throw new TypeError("pathStart is not LatLon object");var R=void 0===radius?6371e3:Number(radius),p=this.toVector();return((pathBrngEnd instanceof LatLon?pathStart.toVector().cross(pathBrngEnd.toVector()):pathStart.greatCircle(Number(pathBrngEnd))).angleTo(p)-Math.PI/2)*R},LatLon.prototype.alongTrackDistanceTo=function(pathStart,pathBrngEnd,radius){if(!(pathStart instanceof LatLon))throw new TypeError("pathStart is not LatLon object");var R=void 0===radius?6371e3:Number(radius),p=this.toVector(),gc=pathBrngEnd instanceof LatLon?pathStart.toVector().cross(pathBrngEnd.toVector()):pathStart.greatCircle(Number(pathBrngEnd)),pat=gc.cross(p).cross(gc);return pathStart.toVector().angleTo(pat,gc)*R},LatLon.prototype.nearestPointOnSegment=function(point1,point2){var p=null;if(this.isBetween(point1,point2)){var n0=this.toVector(),n1=point1.toVector(),n2=point2.toVector(),c1=n1.cross(n2),c2=n0.cross(c1);p=c1.cross(c2).toLatLonS()}else{p=this.distanceTo(point1)<this.distanceTo(point2)?point1:point2}return p},LatLon.prototype.isBetween=function(point1,point2){var n0=this.toVector(),n1=point1.toVector(),n2=point2.toVector(),δ10=n0.minus(n1),δ12=n2.minus(n1),δ20=n0.minus(n2),δ21=n1.minus(n2),extent1=δ10.dot(δ12),extent2=δ20.dot(δ21),isBetween=extent1>=0&&extent2>=0,isSameHemisphere=n0.dot(n1)>=0&&n0.dot(n2)>=0;return isBetween&&isSameHemisphere},LatLon.prototype.enclosedBy=function(polygon){var closed=polygon[0].equals(polygon[polygon.length-1]);closed||polygon.push(polygon[0]);for(var nVertices=polygon.length-1,p=this.toVector(),vectorToVertex=[],v=0;v<nVertices;v++)vectorToVertex[v]=p.minus(polygon[v].toVector());vectorToVertex.push(vectorToVertex[0]);var Σθ=0;for(v=0;v<nVertices;v++)Σθ+=vectorToVertex[v].angleTo(vectorToVertex[v+1],p);var enclosed=Math.abs(Σθ)>Math.PI;return closed||polygon.pop(),enclosed},LatLon.areaOf=function(polygon,radius){var R=null==radius?6371e3:Number(radius),closed=polygon[0].equals(polygon[polygon.length-1]);closed||polygon.push(polygon[0]);for(var n=polygon.length-1,c=[],v=0;v<n;v++){var i=polygon[v].toVector(),j=polygon[v+1].toVector();c[v]=i.cross(j)}c.push(c[0]);var n1=polygon[0].toVector(),Σα=0;for(v=0;v<n;v++)Σα+=c[v].angleTo(c[v+1],n1);var A=(n*Math.PI-Math.abs(Σα)-(n-2)*Math.PI)*R*R;return closed||polygon.pop(),A},LatLon.meanOf=function(points){for(var m=new Vector3d(0,0,0),p=0;p<points.length;p++)m=m.plus(points[p].toVector());return m.unit().toLatLonS()},LatLon.prototype.equals=function(point){if(!(point instanceof LatLon))throw new TypeError("point is not LatLon object");return this.lat==point.lat&&this.lon==point.lon},LatLon.prototype.toString=function(format,dp){return Dms.toLat(this.lat,format,dp)+", "+Dms.toLon(this.lon,format,dp)},void 0===Number.prototype.toRadians&&(Number.prototype.toRadians=function(){return this*Math.PI/180}),void 0===Number.prototype.toDegrees&&(Number.prototype.toDegrees=function(){return 180*this/Math.PI}),void 0===Math.sign&&(Math.sign=function(x){return 0===(x=+x)||isNaN(x)?x:x>0?1:-1}),module.exports&&(module.exports=LatLon,module.exports.Vector3d=Vector3d)})),utm=createCommonjsModule((function(module){var LatLon;function Utm(zone,hemisphere,easting,northing,datum,convergence,scale){if(!(this instanceof Utm))return new Utm(zone,hemisphere,easting,northing,datum,convergence,scale);if(void 0===datum&&(datum=LatLon.datum.WGS84),void 0===convergence&&(convergence=null),void 0===scale&&(scale=null),!(1<=zone&&zone<=60))throw new Error("Invalid UTM zone "+zone);if(!hemisphere.match(/[NS]/i))throw new Error("Invalid UTM hemisphere "+hemisphere);this.zone=Number(zone),this.hemisphere=hemisphere.toUpperCase(),this.easting=Number(easting),this.northing=Number(northing),this.datum=datum,this.convergence=null===convergence?null:Number(convergence),this.scale=null===scale?null:Number(scale)}module.exports&&(LatLon=latlonEllipsoidal),LatLon.prototype.toUtm=function(){if(isNaN(this.lat)||isNaN(this.lon))throw new Error("Invalid point");if(!(-80<=this.lat&&this.lat<=84))throw new Error("Outside UTM limits");var zone=Math.floor((this.lon+180)/6)+1,λ0=(6*(zone-1)-180+3).toRadians(),latBand="CDEFGHJKLMNPQRSTUVWXX".charAt(Math.floor(this.lat/8+10));31==zone&&"V"==latBand&&this.lon>=3&&(zone++,λ0+=6..toRadians()),32==zone&&"X"==latBand&&this.lon<9&&(zone--,λ0-=6..toRadians()),32==zone&&"X"==latBand&&this.lon>=9&&(zone++,λ0+=6..toRadians()),34==zone&&"X"==latBand&&this.lon<21&&(zone--,λ0-=6..toRadians()),34==zone&&"X"==latBand&&this.lon>=21&&(zone++,λ0+=6..toRadians()),36==zone&&"X"==latBand&&this.lon<33&&(zone--,λ0-=6..toRadians()),36==zone&&"X"==latBand&&this.lon>=33&&(zone++,λ0+=6..toRadians());for(var φ=this.lat.toRadians(),λ=this.lon.toRadians()-λ0,a=this.datum.ellipsoid.a,f=this.datum.ellipsoid.f,k0=.9996,e=Math.sqrt(f*(2-f)),n=f/(2-f),n2=n*n,n3=n*n2,n4=n*n3,n5=n*n4,n6=n*n5,cosλ=Math.cos(λ),sinλ=Math.sin(λ),tanλ=Math.tan(λ),τ=Math.tan(φ),σ=Math.sinh(e*Math.atanh(e*τ/Math.sqrt(1+τ*τ))),τʹ=τ*Math.sqrt(1+σ*σ)-σ*Math.sqrt(1+τ*τ),ξʹ=Math.atan2(τʹ,cosλ),ηʹ=Math.asinh(sinλ/Math.sqrt(τʹ*τʹ+cosλ*cosλ)),A=a/(1+n)*(1+1/4*n2+1/64*n4+1/256*n6),α=[null,.5*n-2/3*n2+5/16*n3+41/180*n4-127/288*n5+7891/37800*n6,13/48*n2-.6*n3+557/1440*n4+281/630*n5-1983433/1935360*n6,61/240*n3-103/140*n4+15061/26880*n5+167603/181440*n6,49561/161280*n4-179/168*n5+6601661/7257600*n6,34729/80640*n5-3418889/1995840*n6,.6650675310896665*n6],ξ=ξʹ,j=1;j<=6;j++)ξ+=α[j]*Math.sin(2*j*ξʹ)*Math.cosh(2*j*ηʹ);var η=ηʹ;for(j=1;j<=6;j++)η+=α[j]*Math.cos(2*j*ξʹ)*Math.sinh(2*j*ηʹ);var x=k0*A*η,y=k0*A*ξ,pʹ=1;for(j=1;j<=6;j++)pʹ+=2*j*α[j]*Math.cos(2*j*ξʹ)*Math.cosh(2*j*ηʹ);var qʹ=0;for(j=1;j<=6;j++)qʹ+=2*j*α[j]*Math.sin(2*j*ξʹ)*Math.sinh(2*j*ηʹ);var γ=Math.atan(τʹ/Math.sqrt(1+τʹ*τʹ)*tanλ)+Math.atan2(qʹ,pʹ),sinφ=Math.sin(φ),k=k0*(Math.sqrt(1-e*e*sinφ*sinφ)*Math.sqrt(1+τ*τ)/Math.sqrt(τʹ*τʹ+cosλ*cosλ))*(A/a*Math.sqrt(pʹ*pʹ+qʹ*qʹ));x+=5e5,y<0&&(y+=1e7),x=Number(x.toFixed(6)),y=Number(y.toFixed(6));var convergence=Number(γ.toDegrees().toFixed(9)),scale=Number(k.toFixed(12));return new Utm(zone,this.lat>=0?"N":"S",x,y,this.datum,convergence,scale)},Utm.prototype.toLatLonE=function(){var z=this.zone,h=this.hemisphere,x=this.easting,y=this.northing;if(isNaN(z)||isNaN(x)||isNaN(y))throw new Error("Invalid coordinate");var a=this.datum.ellipsoid.a,f=this.datum.ellipsoid.f,k0=.9996;x-=5e5,y="S"==h?y-1e7:y;for(var e=Math.sqrt(f*(2-f)),n=f/(2-f),n2=n*n,n3=n*n2,n4=n*n3,n5=n*n4,n6=n*n5,A=a/(1+n)*(1+1/4*n2+1/64*n4+1/256*n6),η=x/(k0*A),ξ=y/(k0*A),β=[null,.5*n-2/3*n2+37/96*n3-1/360*n4-81/512*n5+96199/604800*n6,1/48*n2+1/15*n3-437/1440*n4+46/105*n5-1118711/3870720*n6,17/480*n3-37/840*n4-209/4480*n5+5569/90720*n6,4397/161280*n4-11/504*n5-830251/7257600*n6,4583/161280*n5-108847/3991680*n6,20648693/638668800*n6],ξʹ=ξ,j=1;j<=6;j++)ξʹ-=β[j]*Math.sin(2*j*ξ)*Math.cosh(2*j*η);var ηʹ=η;for(j=1;j<=6;j++)ηʹ-=β[j]*Math.cos(2*j*ξ)*Math.sinh(2*j*η);var sinhηʹ=Math.sinh(ηʹ),sinξʹ=Math.sin(ξʹ),cosξʹ=Math.cos(ξʹ),τʹ=sinξʹ/Math.sqrt(sinhηʹ*sinhηʹ+cosξʹ*cosξʹ),τi=τʹ;do{var σi=Math.sinh(e*Math.atanh(e*τi/Math.sqrt(1+τi*τi))),τiʹ=τi*Math.sqrt(1+σi*σi)-σi*Math.sqrt(1+τi*τi),δτi=(τʹ-τiʹ)/Math.sqrt(1+τiʹ*τiʹ)*(1+(1-e*e)*τi*τi)/((1-e*e)*Math.sqrt(1+τi*τi));τi+=δτi}while(Math.abs(δτi)>1e-12);var τ=τi,φ=Math.atan(τ),λ=Math.atan2(sinhηʹ,cosξʹ),p=1;for(j=1;j<=6;j++)p-=2*j*β[j]*Math.cos(2*j*ξ)*Math.cosh(2*j*η);var q=0;for(j=1;j<=6;j++)q+=2*j*β[j]*Math.sin(2*j*ξ)*Math.sinh(2*j*η);var γ=Math.atan(Math.tan(ξʹ)*Math.tanh(ηʹ))+Math.atan2(q,p),sinφ=Math.sin(φ),k=k0*(Math.sqrt(1-e*e*sinφ*sinφ)*Math.sqrt(1+τ*τ)*Math.sqrt(sinhηʹ*sinhηʹ+cosξʹ*cosξʹ))*(A/a/Math.sqrt(p*p+q*q));λ+=(6*(z-1)-180+3).toRadians();var lat=Number(φ.toDegrees().toFixed(11)),lon=Number(λ.toDegrees().toFixed(11)),convergence=Number(γ.toDegrees().toFixed(9)),scale=Number(k.toFixed(12)),latLong=new LatLon(lat,lon,this.datum);return latLong.convergence=convergence,latLong.scale=scale,latLong},Utm.parse=function(utmCoord,datum){if(void 0===datum&&(datum=LatLon.datum.WGS84),null==(utmCoord=utmCoord.trim().match(/\S+/g))||4!=utmCoord.length)throw new Error("Invalid UTM coordinate ‘"+utmCoord+"’");return new Utm(utmCoord[0],utmCoord[1],utmCoord[2],utmCoord[3],datum)},Utm.prototype.toString=function(digits){digits=Number(digits||0);var z=this.zone<10?"0"+this.zone:this.zone,h=this.hemisphere,e=this.easting,n=this.northing;return isNaN(z)||!h.match(/[NS]/)||isNaN(e)||isNaN(n)?"":z+" "+h+" "+e.toFixed(digits)+" "+n.toFixed(digits)},void 0===Math.sinh&&(Math.sinh=function(x){return(Math.exp(x)-Math.exp(-x))/2}),void 0===Math.cosh&&(Math.cosh=function(x){return(Math.exp(x)+Math.exp(-x))/2}),void 0===Math.tanh&&(Math.tanh=function(x){return(Math.exp(x)-Math.exp(-x))/(Math.exp(x)+Math.exp(-x))}),void 0===Math.asinh&&(Math.asinh=function(x){return Math.log(x+Math.sqrt(1+x*x))}),void 0===Math.atanh&&(Math.atanh=function(x){return Math.log((1+x)/(1-x))/2}),module.exports&&(module.exports=Utm)})),mgrs=createCommonjsModule((function(module){var Utm,LatLon;function Mgrs(zone,band,e100k,n100k,easting,northing,datum){if(!(this instanceof Mgrs))return new Mgrs(zone,band,e100k,n100k,easting,northing,datum);if(void 0===datum&&(datum=LatLon.datum.WGS84),!(1<=zone&&zone<=60))throw new Error("Invalid MGRS grid reference (zone ‘"+zone+"’)");if(1!=band.length)throw new Error("Invalid MGRS grid reference (band ‘"+band+"’)");if(-1==Mgrs.latBands.indexOf(band))throw new Error("Invalid MGRS grid reference (band ‘"+band+"’)");if(1!=e100k.length)throw new Error("Invalid MGRS grid reference (e100k ‘"+e100k+"’)");if(1!=n100k.length)throw new Error("Invalid MGRS grid reference (n100k ‘"+n100k+"’)");this.zone=Number(zone),this.band=band,this.e100k=e100k,this.n100k=n100k,this.easting=Number(easting),this.northing=Number(northing),this.datum=datum}module.exports&&(Utm=utm),module.exports&&(LatLon=latlonEllipsoidal),Mgrs.latBands="CDEFGHJKLMNPQRSTUVWXX",Mgrs.e100kLetters=["ABCDEFGH","JKLMNPQR","STUVWXYZ"],Mgrs.n100kLetters=["ABCDEFGHJKLMNPQRSTUV","FGHJKLMNPQRSTUVABCDE"],Utm.prototype.toMgrs=function(){if(isNaN(this.zone+this.easting+this.northing))throw new Error("Invalid UTM coordinate ‘"+this.toString()+"’");var zone=this.zone,latlong=this.toLatLonE(),band=Mgrs.latBands.charAt(Math.floor(latlong.lat/8+10)),col=Math.floor(this.easting/1e5),e100k=Mgrs.e100kLetters[(zone-1)%3].charAt(col-1),row=Math.floor(this.northing/1e5)%20,n100k=Mgrs.n100kLetters[(zone-1)%2].charAt(row),easting=this.easting%1e5,northing=this.northing%1e5;return new Mgrs(zone,band,e100k,n100k,easting=Number(easting.toFixed(6)),northing=Number(northing.toFixed(6)))},Mgrs.prototype.toUtm=function(){for(var zone=this.zone,band=this.band,e100k=this.e100k,n100k=this.n100k,easting=this.easting,northing=this.northing,hemisphere=band>="N"?"N":"S",e100kNum=1e5*(Mgrs.e100kLetters[(zone-1)%3].indexOf(e100k)+1),n100kNum=1e5*Mgrs.n100kLetters[(zone-1)%2].indexOf(n100k),latBand=8*(Mgrs.latBands.indexOf(band)-10),nBand=1e5*Math.floor(new LatLon(latBand,0).toUtm().northing/1e5),n2M=0;n2M+n100kNum+northing<nBand;)n2M+=2e6;return new Utm(zone,hemisphere,e100kNum+easting,n2M+n100kNum+northing,this.datum)},Mgrs.parse=function(mgrsGridRef){if(!(mgrsGridRef=mgrsGridRef.trim()).match(/\s/)){var en=mgrsGridRef.slice(5);en=en.slice(0,en.length/2)+" "+en.slice(-en.length/2),mgrsGridRef=mgrsGridRef.slice(0,3)+" "+mgrsGridRef.slice(3,5)+" "+en}if(null==(mgrsGridRef=mgrsGridRef.match(/\S+/g))||4!=mgrsGridRef.length)throw new Error("Invalid MGRS grid reference ‘"+mgrsGridRef+"’");var gzd=mgrsGridRef[0],zone=gzd.slice(0,2),band=gzd.slice(2,3),en100k=mgrsGridRef[1],e100k=en100k.slice(0,1),n100k=en100k.slice(1,2),e=mgrsGridRef[2],n=mgrsGridRef[3];return new Mgrs(zone,band,e100k,n100k,e=e.length>=5?e:(e+"00000").slice(0,5),n=n.length>=5?n:(n+"00000").slice(0,5))},Mgrs.prototype.toString=function(digits){if(digits=void 0===digits?10:Number(digits),-1==[2,4,6,8,10].indexOf(digits))throw new Error("Invalid precision ‘"+digits+"’");var zone=("00"+this.zone).slice(-2),band=this.band,e100k=this.e100k,n100k=this.n100k,eRounded=Math.floor(this.easting/Math.pow(10,5-digits/2)),nRounded=Math.floor(this.northing/Math.pow(10,5-digits/2));return zone+band+" "+e100k+n100k+" "+("00000"+eRounded).slice(-digits/2)+" "+("00000"+nRounded).slice(-digits/2)},module.exports&&(module.exports=Mgrs)})),osgridref=createCommonjsModule((function(module){var LatLon;function OsGridRef(easting,northing){if(!(this instanceof OsGridRef))return new OsGridRef(easting,northing);this.easting=Number(easting),this.northing=Number(northing)}module.exports&&(LatLon=latlonEllipsoidal),OsGridRef.latLonToOsGrid=function(point){if(!(point instanceof LatLon))throw new TypeError("point is not LatLon object");point.datum!=LatLon.datum.OSGB36&&(point=point.convertDatum(LatLon.datum.OSGB36));var φ=point.lat.toRadians(),λ=point.lon.toRadians(),a=6377563.396,b=6356256.909,F0=.9996012717,φ0=49..toRadians(),λ0=(-2).toRadians(),e2=1-b*b/(a*a),n=(a-b)/(a+b),n2=n*n,n3=n*n*n,cosφ=Math.cos(φ),sinφ=Math.sin(φ),ν=a*F0/Math.sqrt(1-e2*sinφ*sinφ),ρ=a*F0*(1-e2)/Math.pow(1-e2*sinφ*sinφ,1.5),η2=ν/ρ-1,M=b*F0*((1+n+5/4*n2+5/4*n3)*(φ-φ0)-(3*n+3*n*n+21/8*n3)*Math.sin(φ-φ0)*Math.cos(φ+φ0)+(15/8*n2+15/8*n3)*Math.sin(2*(φ-φ0))*Math.cos(2*(φ+φ0))-35/24*n3*Math.sin(3*(φ-φ0))*Math.cos(3*(φ+φ0))),cos3φ=cosφ*cosφ*cosφ,cos5φ=cos3φ*cosφ*cosφ,tan2φ=Math.tan(φ)*Math.tan(φ),tan4φ=tan2φ*tan2φ,Δλ=λ-λ0,Δλ2=Δλ*Δλ,Δλ3=Δλ2*Δλ,Δλ4=Δλ3*Δλ,Δλ5=Δλ4*Δλ,N=M+-1e5+ν/2*sinφ*cosφ*Δλ2+ν/24*sinφ*cos3φ*(5-tan2φ+9*η2)*Δλ4+ν/720*sinφ*cos5φ*(61-58*tan2φ+tan4φ)*(Δλ5*Δλ),E=4e5+ν*cosφ*Δλ+ν/6*cos3φ*(ν/ρ-tan2φ)*Δλ3+ν/120*cos5φ*(5-18*tan2φ+tan4φ+14*η2-58*tan2φ*η2)*Δλ5;return N=Number(N.toFixed(3)),new OsGridRef(E=Number(E.toFixed(3)),N)},OsGridRef.osGridToLatLon=function(gridref,datum){if(!(gridref instanceof OsGridRef))throw new TypeError("gridref is not OsGridRef object");void 0===datum&&(datum=LatLon.datum.WGS84);var E=gridref.easting,N=gridref.northing,a=6377563.396,b=6356256.909,F0=.9996012717,φ0=49..toRadians(),λ0=(-2).toRadians(),e2=1-b*b/(a*a),n=(a-b)/(a+b),n2=n*n,n3=n*n*n,φ=φ0,M=0;do{M=b*F0*((1+n+5/4*n2+5/4*n3)*((φ=(N- -1e5-M)/(a*F0)+φ)-φ0)-(3*n+3*n*n+21/8*n3)*Math.sin(φ-φ0)*Math.cos(φ+φ0)+(15/8*n2+15/8*n3)*Math.sin(2*(φ-φ0))*Math.cos(2*(φ+φ0))-35/24*n3*Math.sin(3*(φ-φ0))*Math.cos(3*(φ+φ0)))}while(N- -1e5-M>=1e-5);var cosφ=Math.cos(φ),sinφ=Math.sin(φ),ν=a*F0/Math.sqrt(1-e2*sinφ*sinφ),ρ=a*F0*(1-e2)/Math.pow(1-e2*sinφ*sinφ,1.5),η2=ν/ρ-1,tanφ=Math.tan(φ),tan2φ=tanφ*tanφ,tan4φ=tan2φ*tan2φ,secφ=1/cosφ,ν3=ν*ν*ν,ν5=ν3*ν*ν,dE=E-4e5,dE2=dE*dE,dE3=dE2*dE,dE4=dE2*dE2,dE5=dE3*dE2,λ=λ0+secφ/ν*dE-secφ/(6*ν3)*(ν/ρ+2*tan2φ)*dE3+secφ/(120*ν5)*(5+28*tan2φ+24*tan4φ)*dE5-secφ/(5040*(ν5*ν*ν))*(61+662*tan2φ+1320*tan4φ+720*(tan4φ*tan2φ))*(dE5*dE2),point=new LatLon((φ=φ-tanφ/(2*ρ*ν)*dE2+tanφ/(24*ρ*ν3)*(5+3*tan2φ+η2-9*tan2φ*η2)*dE4-tanφ/(720*ρ*ν5)*(61+90*tan2φ+45*tan4φ)*(dE4*dE2)).toDegrees(),λ.toDegrees(),LatLon.datum.OSGB36);return datum!=LatLon.datum.OSGB36&&(point=point.convertDatum(datum)),point},OsGridRef.parse=function(gridref){var match=(gridref=String(gridref).trim()).match(/^(\d+),\s*(\d+)$/);if(match)return new OsGridRef(match[1],match[2]);if(!(match=gridref.match(/^[A-Z]{2}\s*[0-9]+\s*[0-9]+$/i)))throw new Error("Invalid grid reference");var l1=gridref.toUpperCase().charCodeAt(0)-"A".charCodeAt(0),l2=gridref.toUpperCase().charCodeAt(1)-"A".charCodeAt(0);l1>7&&l1--,l2>7&&l2--;var e100km=(l1-2)%5*5+l2%5,n100km=19-5*Math.floor(l1/5)-Math.floor(l2/5),en=gridref.slice(2).trim().split(/\s+/);if(1==en.length&&(en=[en[0].slice(0,en[0].length/2),en[0].slice(en[0].length/2)]),e100km<0||e100km>6||n100km<0||n100km>12)throw new Error("Invalid grid reference");if(2!=en.length)throw new Error("Invalid grid reference");if(en[0].length!=en[1].length)throw new Error("Invalid grid reference");return en[0]=(en[0]+"00000").slice(0,5),en[1]=(en[1]+"00000").slice(0,5),new OsGridRef(e100km+en[0],n100km+en[1])},OsGridRef.prototype.toString=function(digits){if(digits=void 0===digits?10:Number(digits),isNaN(digits)||digits%2!=0||digits>16)throw new RangeError("Invalid precision ‘"+digits+"’");var e=this.easting,n=this.northing;if(isNaN(e)||isNaN(n))throw new Error("Invalid grid reference");if(0==digits){var eInt=Math.floor(e),eDec=e-eInt,nInt=Math.floor(n),nDec=n-nInt;return("000000"+eInt).slice(-6)+(eDec>0?eDec.toFixed(3).slice(1):"")+","+((nInt<1e6?("000000"+nInt).slice(-6):nInt)+(nDec>0?nDec.toFixed(3).slice(1):""))}var e100k=Math.floor(e/1e5),n100k=Math.floor(n/1e5);if(e100k<0||e100k>6||n100k<0||n100k>12)return"";var l1=19-n100k-(19-n100k)%5+Math.floor((e100k+10)/5),l2=5*(19-n100k)%25+e100k%5;l1>7&&l1++,l2>7&&l2++;var letterPair=String.fromCharCode(l1+"A".charCodeAt(0),l2+"A".charCodeAt(0));return e=Math.floor(e%1e5/Math.pow(10,5-digits/2)),n=Math.floor(n%1e5/Math.pow(10,5-digits/2)),letterPair+" "+(e=("00000000"+e).slice(-digits/2))+" "+(n=("00000000"+n).slice(-digits/2))},module.exports&&(module.exports=OsGridRef)})),npm=createCommonjsModule((function(module,exports){for(var prop in exports.LatLonSpherical=latlonSpherical,exports.LatLonEllipsoidal=latlonEllipsoidal,latlonVincenty)exports.LatLonEllipsoidal[prop]=latlonVincenty[prop];exports.LatLonVectors=latlonVectors,exports.Vector3d=vector3d,exports.Utm=utm,exports.Mgrs=mgrs,exports.OsGridRef=osgridref,exports.Dms=dms})),MappedinDestinationSet=function MappedinDestinationSet(destinations){_classCallCheck(this,MappedinDestinationSet),_defineProperty(this,"destinations",[]),this.destinations=destinations},_data$e=new WeakMap,_mappedin$8=new WeakMap,MappedinDirections=function(){function MappedinDirections(mappedin,directions){var _this=this;_classCallCheck(this,MappedinDirections),_data$e.set(this,{writable:!0,value:void 0}),_mappedin$8.set(this,{writable:!0,value:void 0}),_defineProperty(this,"distance",0),_defineProperty(this,"path",[]),_defineProperty(this,"instructions",[]),_classPrivateFieldSet(this,_mappedin$8,mappedin),_classPrivateFieldSet(this,_data$e,directions),this.distance=directions.distance,this.instructions=directions.instructions.map((function(i){var _i$atLocation,_classPrivateFieldGet2,_classPrivateFieldGet3,_i$node,_classPrivateFieldGet4,_classPrivateFieldGet5,_instruction$action,_instruction$action2,_classPrivateFieldGet6,_instruction$action3,_classPrivateFieldGet7,_instruction$action4,instruction=_objectSpread2(_objectSpread2({},i),{},{action:_objectSpread2({},i.action),atLocation:null!==(_i$atLocation=i.atLocation)&&void 0!==_i$atLocation&&_i$atLocation.id?null===(_classPrivateFieldGet2=_classPrivateFieldGet(_this,_mappedin$8))||void 0===_classPrivateFieldGet2||null===(_classPrivateFieldGet3=_classPrivateFieldGet2._vortexesById)||void 0===_classPrivateFieldGet3?void 0:_classPrivateFieldGet3[i.atLocation.id]:void 0,node:null!==(_i$node=i.node)&&void 0!==_i$node&&_i$node.id?null===(_classPrivateFieldGet4=_classPrivateFieldGet(_this,_mappedin$8))||void 0===_classPrivateFieldGet4||null===(_classPrivateFieldGet5=_classPrivateFieldGet4._nodesById)||void 0===_classPrivateFieldGet5?void 0:_classPrivateFieldGet5[i.node.id]:void 0});(null===(_instruction$action=instruction.action)||void 0===_instruction$action?void 0:_instruction$action.type)!==ACTION_TYPE.TAKEVORTEX&&(null===(_instruction$action2=instruction.action)||void 0===_instruction$action2?void 0:_instruction$action2.type)!==ACTION_TYPE.EXITVORTEX||(instruction.action.fromMap=null===(_classPrivateFieldGet6=_classPrivateFieldGet(_this,_mappedin$8)._mapsById)||void 0===_classPrivateFieldGet6?void 0:_classPrivateFieldGet6[null===(_instruction$action3=instruction.action)||void 0===_instruction$action3?void 0:_instruction$action3.fromMap.id],instruction.action.toMap=null===(_classPrivateFieldGet7=_classPrivateFieldGet(_this,_mappedin$8)._mapsById)||void 0===_classPrivateFieldGet7?void 0:_classPrivateFieldGet7[null===(_instruction$action4=instruction.action)||void 0===_instruction$action4?void 0:_instruction$action4.toMap.id]);return instruction})),this.path=directions.path.map((function(node){var _classPrivateFieldGet8,_classPrivateFieldGet9;return null===(_classPrivateFieldGet8=_classPrivateFieldGet(_this,_mappedin$8))||void 0===_classPrivateFieldGet8||null===(_classPrivateFieldGet9=_classPrivateFieldGet8._nodesById)||void 0===_classPrivateFieldGet9?void 0:_classPrivateFieldGet9[node.id]}))}return _createClass(MappedinDirections,[{key:"toJSON",value:function(){return _classPrivateFieldGet(this,_data$e)}}]),MappedinDirections}(),_mappedin$7=new WeakMap,MappedinNavigatable=function(){function MappedinNavigatable(mappedin){_classCallCheck(this,MappedinNavigatable),_mappedin$7.set(this,{writable:!0,value:void 0}),_classPrivateFieldSet(this,_mappedin$7,mappedin)}return _createClass(MappedinNavigatable,[{key:"directionsTo",value:function(destination,options,cb){if(destination instanceof MappedinDestinationSet){for(var allDirections=[],currentStepDeparture=this,i=0;i<destination.destinations.length;i++){var currentStepDestination=destination.destinations[i],departureNodes=getNodesForNavigatable(currentStepDeparture),destinationNodes=getNodesForNavigatable(currentStepDestination),directionsObject=_classPrivateFieldGet(this,_mappedin$7).navigator.getDirections({originIds:departureNodes,destinationNodeIds:destinationNodes,accessible:(null==options?void 0:options.accessible)||!1}),_directions=new MappedinDirections(_classPrivateFieldGet(this,_mappedin$7),directionsObject);allDirections.push(_directions),currentStepDeparture=currentStepDestination}return allDirections}var _departureNodes=getNodesForNavigatable(this),_destinationNodes=getNodesForNavigatable(destination),_directionsObject=_classPrivateFieldGet(this,_mappedin$7).navigator.getDirections({originIds:_departureNodes,destinationNodeIds:_destinationNodes,accessible:(null==options?void 0:options.accessible)||!1}),_directions2=new MappedinDirections(_classPrivateFieldGet(this,_mappedin$7),_directionsObject);if("function"!=typeof cb)return _directions2;cb(null,_directions2)}},{key:"distanceTo",value:function(destination,options,cb){var directions=this.directionsTo(destination,options);return"function"!=typeof cb?(null==directions?void 0:directions.distance)||0:(cb(null,(null==directions?void 0:directions.distance)||0),0)}},{key:"directionsToCallback",value:function(destination,options,cb){var directions=this.directionsTo(destination,options);if("function"!=typeof cb)return directions;cb(null,directions)}}]),MappedinNavigatable}();var _mappedin$6=new WeakMap,_data$d=new WeakMap,_cache$7=new WeakMap,_polygons=new WeakMap,_nodes=new WeakMap,_parent=new WeakMap,MappedinLocation=function(_MappedinNavigatable){_inherits(MappedinLocation,MappedinNavigatable);var _fetch,_super=_createSuper(MappedinLocation);function MappedinLocation(mappedin,data){var _this;return _classCallCheck(this,MappedinLocation),_this=_super.call(this,mappedin),_mappedin$6.set(_assertThisInitialized(_this),{writable:!0,value:void 0}),_data$d.set(_assertThisInitialized(_this),{writable:!0,value:void 0}),_cache$7.set(_assertThisInitialized(_this),{writable:!0,value:{}}),_defineProperty(_assertThisInitialized(_this),"states",void 0),_defineProperty(_assertThisInitialized(_this),"id",""),_defineProperty(_assertThisInitialized(_this),"name",""),_defineProperty(_assertThisInitialized(_this),"type",""),_defineProperty(_assertThisInitialized(_this),"description",void 0),_defineProperty(_assertThisInitialized(_this),"sortOrder",void 0),_defineProperty(_assertThisInitialized(_this),"logo",void 0),_defineProperty(_assertThisInitialized(_this),"phone",void 0),_defineProperty(_assertThisInitialized(_this),"social",void 0),_defineProperty(_assertThisInitialized(_this),"color",void 0),_defineProperty(_assertThisInitialized(_this),"shortName",void 0),_defineProperty(_assertThisInitialized(_this),"detailsUrl",void 0),_defineProperty(_assertThisInitialized(_this),"tags",void 0),_defineProperty(_assertThisInitialized(_this),"externalId",void 0),_defineProperty(_assertThisInitialized(_this),"picture",void 0),_defineProperty(_assertThisInitialized(_this),"operationHours",void 0),_defineProperty(_assertThisInitialized(_this),"siblingGroups",void 0),_defineProperty(_assertThisInitialized(_this),"gallery",void 0),_defineProperty(_assertThisInitialized(_this),"categories",[]),_polygons.set(_assertThisInitialized(_this),{writable:!0,value:void 0}),_nodes.set(_assertThisInitialized(_this),{writable:!0,value:[]}),_parent.set(_assertThisInitialized(_this),{writable:!0,value:void 0}),_classPrivateFieldSet(_assertThisInitialized(_this),_mappedin$6,mappedin),_classPrivateFieldSet(_assertThisInitialized(_this),_data$d,data),Object.assign(_assertThisInitialized(_this),data),_this}return _createClass(MappedinLocation,[{key:"polygons",get:function(){var cache=_classPrivateFieldGet(this,_cache$7).polygons;if(void 0!==cache)return cache;var related=[],through=_classPrivateFieldGet(this,_polygons),index=_classPrivateFieldGet(this,_mappedin$6)._polygonsById;if(Array.isArray(through))for(var i=0,iLen=through.length;i<iLen;++i){var polygon=index[through[i].id];null!=polygon&&polygon.geometry.visible&&related.push(polygon)}return _classPrivateFieldGet(this,_cache$7).polygons=related,related},set:function(polygons){_classPrivateFieldSet(this,_polygons,polygons)}},{key:"rank",get:function(){var _this2=this,cache=_classPrivateFieldGet(this,_cache$7).rank;if(void 0!==cache)return cache;var rankings=_classPrivateFieldGet(this,_mappedin$6).locationRankings;if(!rankings||!rankings.locations)return null;var thisRankData=rankings.locations.find((function(datum){return datum.ids.find((function(x){return x===_this2.id}))}));return thisRankData?(_classPrivateFieldGet(this,_cache$7).rank=thisRankData.score,thisRankData.score):null}},{key:"nodes",get:function(){var cache=_classPrivateFieldGet(this,_cache$7).nodes;if(void 0!==cache)return cache;var related=[],through=_classPrivateFieldGet(this,_nodes),index=_classPrivateFieldGet(this,_mappedin$6)._nodesById;if(through)for(var i=0,iLen=through.length;i<iLen;++i){var node=index[through[i].node];null!=node&&related.push(node)}return _classPrivateFieldGet(this,_cache$7).nodes=related,related},set:function(nodes){_classPrivateFieldSet(this,_nodes,nodes)}},{key:"parent",get:function(){var related,cache=_classPrivateFieldGet(this,_cache$7).parent;if(void 0!==cache)return cache;var locations=_classPrivateFieldGet(this,_mappedin$6)._locationsById,parentId=_classPrivateFieldGet(this,_parent);return void 0!==parentId&&(related=locations[parentId]),_classPrivateFieldGet(this,_cache$7).parent=related,related},set:function(parent){_classPrivateFieldSet(this,_parent,parent)}},{key:"state",get:function(){return function(location,states){var date=arguments.length>2&&void 0!==arguments[2]?arguments[2]:new Date;if(location.states){var now=date||new Date,currentState=location.states.find((function(state){var start=new Date(state.start||0),end=new Date(state.end||"9999-12-31T00:00:00.000Z");return start<now&&end>now}));if(currentState)return states.find((function(state){return state.value===currentState.type}))}}(this,_classPrivateFieldGet(this,_mappedin$6).locationStates)}},{key:"clone",value:function(){return new MappedinLocation(_classPrivateFieldGet(this,_mappedin$6),_classPrivateFieldGet(this,_data$d))}},{key:"nodeOperationHours",get:function(){var cache=_classPrivateFieldGet(this,_cache$7).nodeOperationHours;if(void 0!==cache)return cache;if(null==this.nodes)return{};var result=_classPrivateFieldGet(this,_data$d).nodes.reduce((function(map,node){return null!=node.operationHours&&(map[node.node]=node.operationHours),map}),{});return _classPrivateFieldGet(this,_cache$7).nodeOperationHours=result,result}},{key:"toJSON",value:function(){return _classPrivateFieldGet(this,_data$d)}}],[{key:"hydrate",value:function(locations,mappedin){return locations.map((function(l){return new MappedinLocation(mappedin,l)}))}},{key:"fetch",value:(_fetch=_asyncToGenerator(regeneratorRuntime.mark((function _callee(mappedin){var fields,query,data;return regeneratorRuntime.wrap((function(_context){for(;;)switch(_context.prev=_context.next){case 0:return fields=mappedin.options.things.locations.slice(),mappedin.options.things.categories&&addToSet(fields,"categories"),mappedin.options.things.nodes&&addToSet(fields,"nodes"),mappedin.options.things.polygons&&addToSet(fields,"polygons"),mappedin.options.things.locationStates&&addToSet(fields,"states"),query={fields:fields,venue:mappedin.options.venue},_context.prev=6,_context.next=9,getArray(mappedin.options,"location",query);case 9:return data=_context.sent,mappedin.options.includeHidden||(data=data.filter((function(datum){return!datum.hidden}))),_context.abrupt("return",data.map((function(l){return new MappedinLocation(mappedin,l)})));case 14:return _context.prev=14,_context.t0=_context.catch(6),console.error("Fetch Locations:",_context.t0),_context.abrupt("return",[]);case 18:case"end":return _context.stop()}}),_callee,null,[[6,14]])}))),function(_x){return _fetch.apply(this,arguments)})}]),MappedinLocation}(),_mappedin$5=new WeakMap,_data$c=new WeakMap,_cache$6=new WeakMap,_entrances=new WeakMap,MappedinPolygon=function(_MappedinNavigatable){_inherits(MappedinPolygon,MappedinNavigatable);var _fetch,_super=_createSuper(MappedinPolygon);function MappedinPolygon(mappedin,data){var _this;return _classCallCheck(this,MappedinPolygon),_this=_super.call(this,mappedin),_mappedin$5.set(_assertThisInitialized(_this),{writable:!0,value:void 0}),_data$c.set(_assertThisInitialized(_this),{writable:!0,value:void 0}),_cache$6.set(_assertThisInitialized(_this),{writable:!0,value:{}}),_defineProperty(_assertThisInitialized(_this),"geometry",void 0),_defineProperty(_assertThisInitialized(_this),"id",""),_defineProperty(_assertThisInitialized(_this),"map",""),_defineProperty(_assertThisInitialized(_this),"layer",void 0),_defineProperty(_assertThisInitialized(_this),"layerId",void 0),_defineProperty(_assertThisInitialized(_this),"name",void 0),_defineProperty(_assertThisInitialized(_this),"externalId",void 0),_defineProperty(_assertThisInitialized(_this),"vertexes",void 0),_entrances.set(_assertThisInitialized(_this),{writable:!0,value:void 0}),_classPrivateFieldSet(_assertThisInitialized(_this),_mappedin$5,mappedin),_classPrivateFieldSet(_assertThisInitialized(_this),_data$c,data),Object.assign(_assertThisInitialized(_this),data),_this}return _createClass(MappedinPolygon,[{key:"locations",get:function(){var cache=_classPrivateFieldGet(this,_cache$6).locations;if(void 0!==cache)return cache;for(var related=[],locations=_classPrivateFieldGet(this,_mappedin$5).locations,id=this.id,i=0,iLen=locations.length;i<iLen;++i){var location=locations[i],through=location.polygons;if(Array.isArray(through))for(var j=0,jLen=through.length;j<jLen;++j){if(through[j].id===id){related.push(location);break}}}return _classPrivateFieldGet(this,_cache$6).locations=related,related}},{key:"entrances",get:function(){var cache=_classPrivateFieldGet(this,_cache$6).entrances;if(void 0!==cache)return cache;var related=[],through=_classPrivateFieldGet(this,_entrances),index=_classPrivateFieldGet(this,_mappedin$5)._nodesById;if(Array.isArray(through)){for(var i=0,iLen=through.length;i<iLen;++i){var node=index[through[i].id];null!=node&&related.push(node)}return _classPrivateFieldGet(this,_cache$6).entrances=related,related}return[]},set:function(entrances){_classPrivateFieldSet(this,_entrances,entrances)}},{key:"rank",get:function(){var _this2=this,cache=_classPrivateFieldGet(this,_cache$6).rank;if(void 0!==cache)return cache;var rankings=_classPrivateFieldGet(this,_mappedin$5).rankings;if(!rankings||!rankings.polygons)return null;var thisRankData=rankings.polygons.find((function(x){return x.polygonId===_this2.id}));return thisRankData?(_classPrivateFieldGet(this,_cache$6).rank={score:thisRankData.score,node:thisRankData.entranceNodeId},{score:thisRankData.score,node:thisRankData.entranceNodeId}):(_classPrivateFieldGet(this,_cache$6).rank=null,null)}},{key:"toJSON",value:function(){return _classPrivateFieldGet(this,_data$c)}}],[{key:"hydrate",value:function(polygons,mappedin){return polygons.map((function(p){return new MappedinPolygon(mappedin,p)}))}},{key:"fetch",value:(_fetch=_asyncToGenerator(regeneratorRuntime.mark((function _callee(mappedin){var fields,query,data;return regeneratorRuntime.wrap((function(_context){for(;;)switch(_context.prev=_context.next){case 0:return fields=mappedin.options.things.polygons.slice(),mappedin.options.things.maps&&addToSet(fields,"map"),mappedin.options.things.nodes&&addToSet(fields,"entrances"),query={fields:fields,perspective:mappedin.options.do2D&&mappedin.options.perspective||void 0,venue:mappedin.options.venue},_context.prev=4,_context.next=7,getArray(mappedin.options,"polygon",query);case 7:return data=_context.sent,_context.abrupt("return",data.filter((function(item){return item.geometry.visible})).map((function(item){return new MappedinPolygon(mappedin,item)})));case 11:return _context.prev=11,_context.t0=_context.catch(4),console.error("Fetch Polygons:",_context.t0),_context.abrupt("return",[]);case 15:case"end":return _context.stop()}}),_callee,null,[[4,11]])}))),function(_x){return _fetch.apply(this,arguments)})}]),MappedinPolygon}();function isGatewayKey(key){return/^[\da-f]{24}$/i.test(key)}function stringifyQuery(query){var gateway=arguments.length>1&&void 0!==arguments[1]&&arguments[1],queryString="";if(null!=query)for(var delim="?",keys=gateway?Object.keys(query).filter((function(key){return!["slug","venue"].includes(key)})):Object.keys(query),i=0,iLen=keys.length;i<iLen;++i){var name=keys[i],value=query[name];null!=value&&(queryString+=delim+encodeURIComponent(name)+"="+encodeURIComponent(value),delim="&")}return queryString}function buildUrl(options,pathname,query){var _options$baseUrl,_options$baseUrl2,supplementary=arguments.length>3&&void 0!==arguments[3]&&arguments[3];return supplementary?""+options.supplementaryUrl+pathname+"?venue="+(query.venue||query.slug):null!==(_options$baseUrl=options.baseUrl)&&void 0!==_options$baseUrl&&_options$baseUrl.includes("gateway")?""+options.baseUrl+pathname+"/"+(query.venue||query.slug)+stringifyQuery(query,null===(_options$baseUrl2=options.baseUrl)||void 0===_options$baseUrl2?void 0:_options$baseUrl2.includes("gateway")):options.baseUrl+pathname+stringifyQuery(query)}function getArray(_x,_x2,_x3){return _getArray.apply(this,arguments)}function _getArray(){return(_getArray=_asyncToGenerator(regeneratorRuntime.mark((function _callee(options,pathname,query){var supplementary,_args=arguments;return regeneratorRuntime.wrap((function(_context){for(;;)switch(_context.prev=_context.next){case 0:return supplementary=_args.length>3&&void 0!==_args[3]&&_args[3],_context.abrupt("return",getObject(options,pathname,query,supplementary,!0));case 2:case"end":return _context.stop()}}),_callee)})))).apply(this,arguments)}function getObject(_x4,_x5,_x6){return _getObject.apply(this,arguments)}function _getObject(){return(_getObject=_asyncToGenerator(regeneratorRuntime.mark((function _callee2(options,pathname,query){var supplementary,isExpectingArray,url,res,_args2=arguments;return regeneratorRuntime.wrap((function(_context2){for(;;)switch(_context2.prev=_context2.next){case 0:return supplementary=_args2.length>3&&void 0!==_args2[3]&&_args2[3],isExpectingArray=_args2.length>4&&void 0!==_args2[4]&&_args2[4],url=buildUrl(options,pathname,query,supplementary),_context2.next=5,generateAPIRequest(options,url,supplementary);case 5:if(res=_context2.sent,isExpectingArray||!Array.isArray(res)){_context2.next=12;break}if(1!==res.length){_context2.next=9;break}return _context2.abrupt("return",res[0]);case 9:throw new Error("Invalid response object");case 12:return _context2.abrupt("return",res);case 13:case"end":return _context2.stop()}}),_callee2)})))).apply(this,arguments)}function generateAPIRequest(_x7,_x8){return _generateAPIRequest.apply(this,arguments)}function _generateAPIRequest(){return(_generateAPIRequest=_asyncToGenerator(regeneratorRuntime.mark((function _callee3(options,url){var supplementary,requestOptions,headers,req,response,_args3=arguments;return regeneratorRuntime.wrap((function(_context3){for(;;)switch(_context3.prev=_context3.next){case 0:return supplementary=_args3.length>2&&void 0!==_args3[2]&&_args3[2],requestOptions={language:options.language,clientId:options.clientId,clientSecret:options.clientSecret},supplementary&&delete requestOptions.language,requestOptions.language&&(url+="&lang="+encodeURIComponent(requestOptions.language)),(headers=options.headers)["Content-Type"]="text/json",options.authorization&&(headers.Authorization=options.authorization),requestOptions.language&&(headers["Accept-Language"]=requestOptions.language),req={method:"GET",headers:headers},_context3.next=11,fetch(url,req);case 11:if((response=_context3.sent).ok){_context3.next=14;break}throw new Error(response.status+" "+response.statusText);case 14:return _context3.abrupt("return",response.json());case 15:case"end":return _context3.stop()}}),_callee3)})))).apply(this,arguments)}function addToSet(array,value){array.indexOf(value)<0&&array.push(value)}function getNodesForNavigatable(obj){return obj instanceof MappedinPolygon?obj.entrances.map((function(node){return node.id})):obj instanceof MappedinLocation?(null===(_obj$nodes=obj.nodes)||void 0===_obj$nodes?void 0:_obj$nodes.map((function(node){return node.id})))||[]:[obj.id];var _obj$nodes}function preloadImagesFromBundle(_x9){return _preloadImagesFromBundle.apply(this,arguments)}function _preloadImagesFromBundle(){return(_preloadImagesFromBundle=_asyncToGenerator(regeneratorRuntime.mark((function _callee4(data){var imageBlobMap,maps,images,scenes,polygons,promises;return regeneratorRuntime.wrap((function(_context4){for(;;)switch(_context4.prev=_context4.next){case 0:if(imageBlobMap={},maps=data.maps,images=data.images,scenes=data.scenes,polygons=data.polygons,null==images){_context4.next=12;break}return _context4.prev=3,promises=Object.keys(images).map((function(filename){return fetch("data:image/png;base64,"+images[filename]).then((function(res){return res.blob()})).then((function(blob){imageBlobMap[filename]=blob})).catch((function(e){console.error(e)}))})),_context4.next=7,Promise.all(promises);case 7:_context4.next=12;break;case 9:_context4.prev=9,_context4.t0=_context4.catch(3),console.error(_context4.t0);case 12:return maps.forEach((function(m){var _m$scene;((null===(_m$scene=m.scene)||void 0===_m$scene?void 0:_m$scene.polygons)||scenes[m.id])&&(null!=scenes&&scenes[m.id]&&(m.scene||(m.scene={}),m.scene.polygons=scenes[m.id]),null!=images&&(m.scene.images=m.scene.images.map((function(_ref5){var filename=_ref5.filename;return{filename:filename,url:imageBlobMap[filename]}})),m.scene.polygons.forEach((function(p){var _p$image;if(null!=p&&null!==(_p$image=p.image)&&void 0!==_p$image&&_p$image.url){var urlSegments=p.image.url.split("/"),imageBlob=imageBlobMap[urlSegments[urlSegments.length-1]];imageBlob&&(p.image.url=imageBlob)}}))))})),null!=images&&polygons.forEach((function(p){var _p$image2;if(null!=p&&null!==(_p$image2=p.image)&&void 0!==_p$image2&&_p$image2.url){var urlSegments=p.image.url.split("/"),imageBlob=imageBlobMap[urlSegments[urlSegments.length-1]];imageBlob&&(p.image.url=imageBlob)}})),null!=data.images&&delete data.images,null!=data.scenes&&delete data.scenes,_context4.abrupt("return",data);case 17:case"end":return _context4.stop()}}),_callee4,null,[[3,9]])})))).apply(this,arguments)}var CollectionType,_mappedin$4=new WeakMap,_cache$5=new WeakMap,_data$b=new WeakMap,MappedinCategory=function(){function MappedinCategory(mappedin,data){_classCallCheck(this,MappedinCategory),_mappedin$4.set(this,{writable:!0,value:void 0}),_cache$5.set(this,{writable:!0,value:{}}),_data$b.set(this,{writable:!0,value:void 0}),_defineProperty(this,"name",void 0),_defineProperty(this,"externalId",void 0),_defineProperty(this,"parents",void 0),_defineProperty(this,"id",void 0),_defineProperty(this,"icon",void 0),this.id=data.id,_classPrivateFieldSet(this,_data$b,data),_classPrivateFieldSet(this,_mappedin$4,mappedin),Object.assign(this,data)}var _fetch;return _createClass(MappedinCategory,[{key:"locations",get:function(){var cache=_classPrivateFieldGet(this,_cache$5).locations;if(void 0!==cache)return cache;for(var related=[],locations=_classPrivateFieldGet(this,_mappedin$4).locations,id=this.id,i=0,iLen=locations.length;i<iLen;++i){var location=locations[i],through=location.categories;if(Array.isArray(through))for(var j=0,jLen=through.length;j<jLen;++j)if(through[j]===id){related.push(location);break}}return _classPrivateFieldGet(this,_cache$5).locations=related,related}},{key:"toJSON",value:function(){return _classPrivateFieldGet(this,_data$b)}}],[{key:"hydrate",value:function(categories,mappedin){return categories.map((function(c){return new MappedinCategory(mappedin,c)}))}},{key:"fetch",value:(_fetch=_asyncToGenerator(regeneratorRuntime.mark((function _callee(mappedin){var query,data;return regeneratorRuntime.wrap((function(_context){for(;;)switch(_context.prev=_context.next){case 0:return query={fields:mappedin.options.things.categories,venue:mappedin.options.venue},_context.prev=1,_context.next=4,getArray(mappedin.options,"category",query);case 4:return data=_context.sent,_context.abrupt("return",data.map((function(c){return new MappedinCategory(mappedin,c)})));case 8:return _context.prev=8,_context.t0=_context.catch(1),console.error("Fetch Categories:",_context.t0),_context.abrupt("return",[]);case 12:case"end":return _context.stop()}}),_callee,null,[[1,8]])}))),function(_x){return _fetch.apply(this,arguments)})}]),MappedinCategory}(),_mappedin$3=new WeakMap,_data$a=new WeakMap,_cache$4=new WeakMap,MappedinEvent=function(){function MappedinEvent(mappedin,data){_classCallCheck(this,MappedinEvent),_mappedin$3.set(this,{writable:!0,value:void 0}),_data$a.set(this,{writable:!0,value:void 0}),_cache$4.set(this,{writable:!0,value:{}}),_defineProperty(this,"id",""),_defineProperty(this,"type",""),_defineProperty(this,"name",""),_defineProperty(this,"description",void 0),_defineProperty(this,"image",void 0),_defineProperty(this,"startDate",void 0),_defineProperty(this,"endDate",void 0),_defineProperty(this,"showDate",void 0),_classPrivateFieldSet(this,_data$a,data),_classPrivateFieldSet(this,_mappedin$3,mappedin),Object.assign(this,data)}var _fetch;return _createClass(MappedinEvent,[{key:"location",value:function(){var related,cache=_classPrivateFieldGet(this,_cache$4).location;if(void 0!==cache)return cache;var through=_classPrivateFieldGet(this,_mappedin$3)._locationsById,locationId=_classPrivateFieldGet(this,_data$a).location;if(null!=locationId){var location=through[locationId];null!=location&&(related=location)}return _classPrivateFieldGet(this,_cache$4).location=related,related}},{key:"toJSON",value:function(){return _classPrivateFieldGet(this,_data$a)}}],[{key:"hydrate",value:function(events,mappedin){return events.map((function(e){return new MappedinEvent(mappedin,e)}))}},{key:"fetch",value:(_fetch=_asyncToGenerator(regeneratorRuntime.mark((function _callee(mappedin){var fields,query,data;return regeneratorRuntime.wrap((function(_context){for(;;)switch(_context.prev=_context.next){case 0:return fields=mappedin.options.things.events.slice(),mappedin.options.things.locations&&addToSet(fields,"location"),query={fields:fields,venue:mappedin.options.venue,activeAtOrAfter:Date.now()},_context.prev=3,_context.next=6,getArray(mappedin.options,"event",query);case 6:return data=_context.sent,_context.abrupt("return",data.map((function(e){return new MappedinEvent(mappedin,e)})));case 10:return _context.prev=10,_context.t0=_context.catch(3),console.error("Fetch Events:",_context.t0),_context.abrupt("return",[]);case 14:case"end":return _context.stop()}}),_callee,null,[[3,10]])}))),function(_x){return _fetch.apply(this,arguments)})}]),MappedinEvent}(),_data$9=new WeakMap,MappedinLocationRankings=function(){function MappedinLocationRankings(data){_classCallCheck(this,MappedinLocationRankings),_data$9.set(this,{writable:!0,value:void 0}),_defineProperty(this,"locations",[]),_classPrivateFieldSet(this,_data$9,data),Object.assign(this,data)}var _fetch;return _createClass(MappedinLocationRankings,[{key:"toJSON",value:function(){return _classPrivateFieldGet(this,_data$9)}}],[{key:"hydrate",value:function(locationRankings){return new MappedinLocationRankings(locationRankings)}},{key:"fetch",value:(_fetch=_asyncToGenerator(regeneratorRuntime.mark((function _callee(mappedin){var data;return regeneratorRuntime.wrap((function(_context){for(;;)switch(_context.prev=_context.next){case 0:return _context.prev=0,_context.next=3,getObject(mappedin.options,"smart-labels/location-label-ranking",{venue:mappedin.options.venue},!0);case 3:return data=_context.sent,_context.abrupt("return",new MappedinLocationRankings(data));case 7:return _context.prev=7,_context.t0=_context.catch(0),console.error("Fetch Location Rankings:",_context.t0),_context.abrupt("return",{});case 11:case"end":return _context.stop()}}),_callee,null,[[0,7]])}))),function(_x){return _fetch.apply(this,arguments)})}]),MappedinLocationRankings}(),_data$8=new WeakMap,MappedinLocationState=function(){function MappedinLocationState(data){_classCallCheck(this,MappedinLocationState),_data$8.set(this,{writable:!0,value:void 0}),_defineProperty(this,"value",void 0),_classPrivateFieldSet(this,_data$8,data),Object.assign(this,data)}var _fetch;return _createClass(MappedinLocationState,[{key:"toJSON",value:function(){return _classPrivateFieldGet(this,_data$8)}}],[{key:"hydrate",value:function(locationStates){return locationStates.map((function(ls){return new MappedinLocationState(ls)}))}},{key:"fetch",value:(_fetch=_asyncToGenerator(regeneratorRuntime.mark((function _callee(mappedin){var fields,query,data;return regeneratorRuntime.wrap((function(_context){for(;;)switch(_context.prev=_context.next){case 0:return fields=mappedin.options.things.locationStates.slice(),query={fields:fields,venue:mappedin.options.venue},_context.prev=2,_context.next=5,getArray(mappedin.options,"location-state",query);case 5:return data=_context.sent,_context.abrupt("return",data.map((function(ls){return new MappedinLocationState(ls)})));case 9:return _context.prev=9,_context.t0=_context.catch(2),console.error("Fetch Location States:",_context.t0),_context.abrupt("return",[]);case 13:case"end":return _context.stop()}}),_callee,null,[[2,9]])}))),function(_x){return _fetch.apply(this,arguments)})}]),MappedinLocationState}(),MappedinCoordinate=function(){function MappedinCoordinate(lat,lon,x,y,map){_classCallCheck(this,MappedinCoordinate),_defineProperty(this,"map",void 0),_defineProperty(this,"x",0),_defineProperty(this,"y",0),_defineProperty(this,"lat",0),_defineProperty(this,"lon",0),this.lat=lat,this.lon=lon,this.map="string"==typeof map?map:map.id,this.x=x,this.y=y}return _createClass(MappedinCoordinate,[{key:"absoluteDistanceTo",value:function(destination){return _ref=[destination.lat,destination.lon],_ref2=[this.lat,this.lon],_ref3=_slicedToArray(_ref,2),lat1=_ref3[0],lon1=_ref3[1],_ref4=_slicedToArray(_ref2,2),lat2=_ref4[0],lon2=_ref4[1],ll1=new npm.LatLonSpherical(lat1,lon1),ll2=new npm.LatLonSpherical(lat2,lon2),ll1.distanceTo(ll2);var _ref,_ref2,_ref3,lat1,lon1,_ref4,lat2,lon2,ll1,ll2}}]),MappedinCoordinate}(),_mappedin$2=new WeakMap,_cache$3=new WeakMap,_data$7=new WeakMap,MappedinMap=function(){function MappedinMap(mappedin,data){_classCallCheck(this,MappedinMap),_mappedin$2.set(this,{writable:!0,value:void 0}),_cache$3.set(this,{writable:!0,value:{}}),_data$7.set(this,{writable:!0,value:void 0}),_defineProperty(this,"id",""),_defineProperty(this,"group",""),_defineProperty(this,"name",""),_defineProperty(this,"shortName",""),_defineProperty(this,"elevation",void 0),_defineProperty(this,"scale",0),_defineProperty(this,"x_scale",void 0),_defineProperty(this,"georeference",[]),_defineProperty(this,"_scale",0),_classPrivateFieldSet(this,_mappedin$2,mappedin),_classPrivateFieldSet(this,_data$7,data),Object.assign(this,data),this._scale=function(map){if(map.scale||map.x_scale)return 1/(map.scale||map.x_scale);var mapScale;try{var anchor1=map.georeference[0],anchor2=map.georeference[2],ll1=new npm.LatLonSpherical(anchor1.target.x,anchor1.target.y),ll2=new npm.LatLonSpherical(anchor2.target.x,anchor2.target.y),worldDistance=ll1.distanceTo(ll2),xDiff=anchor1.control.x-anchor2.control.x,yDiff=anchor1.control.y-anchor2.control.y;mapScale=Math.sqrt(xDiff*xDiff+yDiff*yDiff)/worldDistance}catch(e){mapScale=1,console.warn(e),console.warn("Couldn't georeference "+(map.name||map.shortName||map.id)+". Probably not enough geocoordinates.")}return mapScale}(this),this.scale=this.x_scale}var _fetch;return _createClass(MappedinMap,[{key:"polygons",get:function(){var cache=_classPrivateFieldGet(this,_cache$3).polygons;if(void 0!==cache)return cache;for(var related=[],polygons=_classPrivateFieldGet(this,_mappedin$2).polygons,id=this.id,i=0,iLen=polygons.length;i<iLen;++i){var polygon=polygons[i];polygon.map===id&&related.push(polygon)}return _classPrivateFieldGet(this,_cache$3).polygons=related,related}},{key:"mapGroup",get:function(){var cache=_classPrivateFieldGet(this,_cache$3).mapGroup;if(void 0!==cache)return cache;var id=this.group,related=id&&_classPrivateFieldGet(this,_mappedin$2)._mapGroupsById[id]||null;return _classPrivateFieldGet(this,_cache$3).mapGroup=related,related}},{key:"createCoordinate",value:function(lat,lon){var anchor=this.georeference[0],anchorLatLon=new npm.LatLonSpherical(anchor.target.x,anchor.target.y),targetLatLon=new npm.LatLonSpherical(lat,lon),worldDistance=anchorLatLon.distanceTo(targetLatLon),worldBearing=(anchorLatLon.finalBearingTo(targetLatLon)+360)%360*Math.PI/180,mappedinDistance=worldDistance*(1/this.scale),mappedinBearing=worldBearing+this.getNorth(),deltaX=Math.sin(mappedinBearing)*mappedinDistance,deltaY=Math.cos(mappedinBearing)*mappedinDistance;return new MappedinCoordinate(lat,lon,anchor.control.x+deltaX,anchor.control.y-deltaY,this.id)}},{key:"getNorth",value:function(){var north;try{var anchor1=this.georeference[0],anchor2=this.georeference[2],ll1=new npm.LatLonSpherical(anchor1.target.x,anchor1.target.y),ll2=new npm.LatLonSpherical(anchor2.target.x,anchor2.target.y);north=-((ll1.finalBearingTo(ll2)+0)*Math.PI/180-Math.atan2(anchor2.control.y-anchor1.control.y,anchor2.control.x-anchor1.control.x)-Math.PI/2)}catch(e){north=0,console.warn(e),console.warn("Couldn't georeference "+(this.name||this.shortName||this.id)+". Probably not enough geocoordinates.")}return north}},{key:"toJSON",value:function(){return _classPrivateFieldGet(this,_data$7)}}],[{key:"hydrate",value:function(maps,mappedin){return maps.map((function(m){return new MappedinMap(mappedin,m)}))}},{key:"fetch",value:(_fetch=_asyncToGenerator(regeneratorRuntime.mark((function _callee(mappedin){var fields,query,data,setVisibleLayer,i,iLen,map,per;return regeneratorRuntime.wrap((function(_context){for(;;)switch(_context.prev=_context.next){case 0:return fields=mappedin.options.things.maps.slice(),mappedin.options.perspective&&addToSet(fields,"perspectives"),mappedin.options.things.mapGroups&&addToSet(fields,"group"),addToSet(fields,"elevation"),addToSet(fields,"x_scale"),addToSet(fields,"scale"),addToSet(fields,"georeference"),query={fields:fields,perspective:mappedin.options.perspective,venue:mappedin.options.venue},_context.prev=8,_context.next=11,getArray(mappedin.options,"map",query);case 11:for(data=_context.sent,setVisibleLayer=function(layerName){var layerObject=map.layers.find((function(l){return l.id===layerName}));layerObject?layerObject.visible=!0:map.layers.push({id:layerName,visible:!0})},i=0,iLen=data.length;i<iLen;++i)(map=data[i])&&(null!=(per=map.perspective)&&(map.perspectiveId=per.id,mappedin.options.do2D?(fields.indexOf("width")>-1&&(map.width=per.size&&per.size.width||per.width),fields.indexOf("height")>-1&&(map.height=per.size&&per.size.height||per.height),fields.indexOf("tiles")>-1&&(map.tiles=per.tiles),fields.indexOf("original")>-1&&(map.original=per.original)):(fields.indexOf("scene")>-1&&(map.scene=per.scene),per.layers?(map.layers.forEach((function(layer){layer.visible=!1})),per.layers.forEach(setVisibleLayer)):map.layers.forEach((function(layer){layer.visible=!0})))),delete map.perspective),data[i]=new MappedinMap(mappedin,map);return _context.abrupt("return",data);case 17:return _context.prev=17,_context.t0=_context.catch(8),console.error("Fetch Maps:",_context.t0),_context.abrupt("return",[]);case 21:case"end":return _context.stop()}}),_callee,null,[[8,17]])}))),function(_x){return _fetch.apply(this,arguments)})}]),MappedinMap}(),_mappedin$1=new WeakMap,_data$6=new WeakMap,_cache$2=new WeakMap,MappedinMapGroup=function(){function MappedinMapGroup(mappedin,data){_classCallCheck(this,MappedinMapGroup),_mappedin$1.set(this,{writable:!0,value:void 0}),_data$6.set(this,{writable:!0,value:void 0}),_cache$2.set(this,{writable:!0,value:{}}),_defineProperty(this,"id",""),_defineProperty(this,"name",""),_classPrivateFieldSet(this,_data$6,data),_classPrivateFieldSet(this,_mappedin$1,mappedin),Object.assign(this,data)}var _fetch;return _createClass(MappedinMapGroup,[{key:"maps",get:function(){var cache=_classPrivateFieldGet(this,_cache$2).maps;if(void 0!==cache)return cache;for(var related=[],maps=_classPrivateFieldGet(this,_mappedin$1).maps,id=_classPrivateFieldGet(this,_data$6).id,i=0,iLen=maps.length;i<iLen;++i){var map=maps[i];map.group===id&&related.push(map)}return _classPrivateFieldGet(this,_cache$2).maps=related,related}},{key:"toJSON",value:function(){return _classPrivateFieldGet(this,_data$6)}}],[{key:"hydrate",value:function(mapGroups,mappedin){return mapGroups.map((function(mg){return new MappedinMapGroup(mappedin,mg)}))}},{key:"fetch",value:(_fetch=_asyncToGenerator(regeneratorRuntime.mark((function _callee(mappedin){var fields,query,data;return regeneratorRuntime.wrap((function(_context){for(;;)switch(_context.prev=_context.next){case 0:return fields=mappedin.options.things.mapGroups.slice(),query={fields:fields,venue:mappedin.options.venue},_context.prev=2,_context.next=5,getArray(mappedin.options,"map-group",query);case 5:return data=_context.sent,_context.abrupt("return",data.map((function(mg){return new MappedinMapGroup(mappedin,mg)})));case 9:return _context.prev=9,_context.t0=_context.catch(2),console.error("Fetch Map Groups:",_context.t0),_context.abrupt("return",[]);case 13:case"end":return _context.stop()}}),_callee,null,[[2,9]])}))),function(_x){return _fetch.apply(this,arguments)})}]),MappedinMapGroup}(),_mappedin=new WeakMap,_data$5=new WeakMap,_cache$1=new WeakMap,_paths=new WeakMap,MappedinNode=function(_MappedinNavigatable){_inherits(MappedinNode,MappedinNavigatable);var _fetch,_super=_createSuper(MappedinNode);function MappedinNode(mappedin,data){var _this;return _classCallCheck(this,MappedinNode),_this=_super.call(this,mappedin),_mappedin.set(_assertThisInitialized(_this),{writable:!0,value:void 0}),_data$5.set(_assertThisInitialized(_this),{writable:!0,value:void 0}),_cache$1.set(_assertThisInitialized(_this),{writable:!0,value:{}}),_defineProperty(_assertThisInitialized(_this),"id",""),_defineProperty(_assertThisInitialized(_this),"map",""),_defineProperty(_assertThisInitialized(_this),"x",0),_defineProperty(_assertThisInitialized(_this),"y",0),_defineProperty(_assertThisInitialized(_this),"operationHours",void 0),_defineProperty(_assertThisInitialized(_this),"externalId",void 0),_paths.set(_assertThisInitialized(_this),{writable:!0,value:void 0}),_classPrivateFieldSet(_assertThisInitialized(_this),_mappedin,mappedin),_classPrivateFieldSet(_assertThisInitialized(_this),_data$5,data),Object.assign(_assertThisInitialized(_this),data),_this}return _createClass(MappedinNode,[{key:"paths",get:function(){var cache=_classPrivateFieldGet(this,_cache$1).paths;if(void 0!==cache)return cache;var related=[],index=_classPrivateFieldGet(this,_mappedin)._nodesById,through=_classPrivateFieldGet(this,_paths);if(Array.isArray(through))for(var i=0,iLen=through.length;i<iLen;++i){var node=index[through[i].node];null!=node&&related.push(node)}return _classPrivateFieldGet(this,_cache$1).paths=related,related},set:function(paths){_classPrivateFieldSet(this,_paths,paths)}},{key:"locations",get:function(){var cache=_classPrivateFieldGet(this,_cache$1).locations;if(void 0!==cache)return cache;for(var related=[],locations=_classPrivateFieldGet(this,_mappedin).locations,nodeId=this.id,i=0,iLen=locations.length;i<iLen;++i){var location=locations[i],through=location.nodes;if(Array.isArray(through))for(var j=0,jLen=through.length;j<jLen;++j){if(through[j].id===nodeId){related.push(location);break}}}return _classPrivateFieldGet(this,_cache$1).locations=related,related}},{key:"polygon",get:function(){var polygonContainingThisNode,cache=_classPrivateFieldGet(this,_cache$1).polygon;if(void 0!==cache)return cache;for(var polygons=_classPrivateFieldGet(this,_mappedin).polygons,nodeId=this.id,i=0,iLen=polygons.length;i<iLen;++i){var polygon=polygons[i];polygon.entrances.map((function(e){return e.id})).includes(nodeId)&&(polygonContainingThisNode=polygon)}return _classPrivateFieldGet(this,_cache$1).polygon=polygonContainingThisNode,polygonContainingThisNode}},{key:"toJSON",value:function(){return _classPrivateFieldGet(this,_data$5)}}],[{key:"hydrate",value:function(nodes,mappedin){return nodes.map((function(n){return new MappedinNode(mappedin,n)}))}},{key:"fetch",value:(_fetch=_asyncToGenerator(regeneratorRuntime.mark((function _callee(mappedin){var fields,query,data;return regeneratorRuntime.wrap((function(_context){for(;;)switch(_context.prev=_context.next){case 0:return fields=mappedin.options.things.nodes.slice(),mappedin.options.things.maps&&addToSet(fields,"map"),["weight","multiplier","accessible"].forEach((function(field){addToSet(fields,field)})),query={fields:fields,perspective:mappedin.options.do2D&&mappedin.options.perspective||void 0,venue:mappedin.options.venue},_context.prev=5,_context.next=8,getArray(mappedin.options,"node",query);case 8:return data=_context.sent,_context.abrupt("return",data.map((function(n){return new MappedinNode(mappedin,n)})));case 12:return _context.prev=12,_context.t0=_context.catch(5),console.error("Fetch Nodes:",_context.t0),_context.abrupt("return",[]);case 16:case"end":return _context.stop()}}),_callee,null,[[5,12]])}))),function(_x){return _fetch.apply(this,arguments)})}]),MappedinNode}(),_data$4=new WeakMap,MappedinRankings=function(){function MappedinRankings(data){_classCallCheck(this,MappedinRankings),_data$4.set(this,{writable:!0,value:void 0}),_defineProperty(this,"polygons",[]),_classPrivateFieldSet(this,_data$4,data),Object.assign(this,data)}var _fetch;return _createClass(MappedinRankings,[{key:"toJSON",value:function(){return _classPrivateFieldGet(this,_data$4)}}],[{key:"hydrate",value:function(rankings){return new MappedinRankings(rankings)}},{key:"fetch",value:(_fetch=_asyncToGenerator(regeneratorRuntime.mark((function _callee(mappedin){var data;return regeneratorRuntime.wrap((function(_context){for(;;)switch(_context.prev=_context.next){case 0:return _context.prev=0,_context.next=3,getObject(mappedin.options,"smart-labels/polygon-label-ranking",{venue:mappedin.options.venue},!0);case 3:return data=_context.sent,_context.abrupt("return",new MappedinRankings(data));case 7:return _context.prev=7,_context.t0=_context.catch(0),console.error("Fetch Rankings:",_context.t0),_context.abrupt("return",null);case 11:case"end":return _context.stop()}}),_callee,null,[[0,7]])}))),function(_x){return _fetch.apply(this,arguments)})}]),MappedinRankings}(),_data$3=new WeakMap,MappedinTheme=function(){function MappedinTheme(data){_classCallCheck(this,MappedinTheme),_defineProperty(this,"id",""),_data$3.set(this,{writable:!0,value:void 0}),_classPrivateFieldSet(this,_data$3,data),Object.assign(this,data)}var _fetch;return _createClass(MappedinTheme,[{key:"toJSON",value:function(){return _classPrivateFieldGet(this,_data$3)}}],[{key:"hydrate",value:function(themes){return themes.map((function(t){return new MappedinTheme(t)}))}},{key:"fetch",value:(_fetch=_asyncToGenerator(regeneratorRuntime.mark((function _callee(mappedin){var fields,query,data;return regeneratorRuntime.wrap((function(_context){for(;;)switch(_context.prev=_context.next){case 0:return fields=mappedin.options.things.themes.slice(),query={fields:fields,venue:mappedin.options.venue},_context.prev=2,_context.next=5,getArray(mappedin.options,"apollo-theme",query);case 5:return data=_context.sent,_context.abrupt("return",data.map((function(t){return new MappedinTheme(t)})));case 9:return _context.prev=9,_context.t0=_context.catch(2),console.error("Fetch Theme:",_context.t0),_context.abrupt("return",[]);case 13:case"end":return _context.stop()}}),_callee,null,[[2,9]])}))),function(_x){return _fetch.apply(this,arguments)})}]),MappedinTheme}(),_data$2=new WeakMap,MappedinVenue=function(){function MappedinVenue(data){_classCallCheck(this,MappedinVenue),_data$2.set(this,{writable:!0,value:void 0}),_defineProperty(this,"defaultMap",""),_defineProperty(this,"address",""),_defineProperty(this,"city",""),_defineProperty(this,"countrycode",""),_defineProperty(this,"externalId",""),_defineProperty(this,"id",""),_defineProperty(this,"latitude",void 0),_defineProperty(this,"logo",void 0),_defineProperty(this,"longitude",void 0),_defineProperty(this,"metadata",void 0),_defineProperty(this,"name",""),_defineProperty(this,"operationHours",void 0),_defineProperty(this,"postal",""),_defineProperty(this,"slug",""),_defineProperty(this,"state",""),_defineProperty(this,"telephone",""),_defineProperty(this,"tzid",""),_defineProperty(this,"tzidOverride",""),_defineProperty(this,"utcOffset",""),_defineProperty(this,"website",""),_classPrivateFieldSet(this,_data$2,data),Object.assign(this,data)}var _fetch;return _createClass(MappedinVenue,[{key:"toJSON",value:function(){return _classPrivateFieldGet(this,_data$2)}}],[{key:"hydrate",value:function(data){return new MappedinVenue(data)}},{key:"fetch",value:(_fetch=_asyncToGenerator(regeneratorRuntime.mark((function _callee(mappedin){var query,data;return regeneratorRuntime.wrap((function(_context){for(;;)switch(_context.prev=_context.next){case 0:return query={fields:mappedin.options.things.venue,slug:mappedin.options.venue,limit:1},_context.prev=1,_context.next=4,getArray(mappedin.options,"venue",query);case 4:return data=_context.sent,_context.abrupt("return",new MappedinVenue(data[0]));case 8:return _context.prev=8,_context.t0=_context.catch(1),console.error("Fetch Venue:",_context.t0),_context.abrupt("return",{});case 12:case"end":return _context.stop()}}),_callee,null,[[1,8]])}))),function(_x){return _fetch.apply(this,arguments)})}]),MappedinVenue}(),_data$1=new WeakMap,MappedinVortex=function(){function MappedinVortex(data){_classCallCheck(this,MappedinVortex),_defineProperty(this,"id",""),_data$1.set(this,{writable:!0,value:void 0}),_defineProperty(this,"name",void 0),_defineProperty(this,"type",void 0),_defineProperty(this,"weight",void 0),_defineProperty(this,"multiplier",void 0),_classPrivateFieldSet(this,_data$1,data),Object.assign(this,data)}var _fetch;return _createClass(MappedinVortex,[{key:"toJSON",value:function(){return _classPrivateFieldGet(this,_data$1)}}],[{key:"hydrate",value:function(vortexes){return vortexes.map((function(v){return new MappedinVortex(v)}))}},{key:"fetch",value:(_fetch=_asyncToGenerator(regeneratorRuntime.mark((function _callee(mappedin){var fields,query,data;return regeneratorRuntime.wrap((function(_context){for(;;)switch(_context.prev=_context.next){case 0:return fields=mappedin.options.things.vortexes.slice(),["name","type","accessible","weight","multiplier","nodes"].forEach((function(field){addToSet(fields,field)})),query={fields:fields,venue:mappedin.options.venue},_context.prev=4,_context.next=7,getArray(mappedin.options,"vortex",query);case 7:return data=_context.sent,_context.abrupt("return",data.map((function(v){return new MappedinVortex(v)})));case 11:return _context.prev=11,_context.t0=_context.catch(4),console.error("Fetch Vortexes:",_context.t0),_context.abrupt("return",[]);case 15:case"end":return _context.stop()}}),_callee,null,[[4,11]])}))),function(_x){return _fetch.apply(this,arguments)})}]),MappedinVortex}(),defaultOptions={supplementaryUrl:"https://api-gateway.mappedin.com/analytics/",headers:{},accessToken:"",clientId:"",noAuth:!1,includeHidden:!0,do2D:!1,clientSecret:"",apiGateway:"",authorization:"",perspective:"Website",language:"",things:{},venue:""};!function(CollectionType){CollectionType.CATEGORY="categories",CollectionType.EVENT="events",CollectionType.LOCATION="locations",CollectionType.MAPGROUP="mapGroups",CollectionType.MAP="maps",CollectionType.NODE="nodes",CollectionType.POLYGON="polygons",CollectionType.VORTEX="vortexes"}(CollectionType||(CollectionType={}));var THINGS={categories:MappedinCategory,locations:MappedinLocation,vortexes:MappedinVortex,maps:MappedinMap,nodes:MappedinNode,polygons:MappedinPolygon,venue:MappedinVenue,events:MappedinEvent,mapGroups:MappedinMapGroup,themes:MappedinTheme,locationStates:MappedinLocationState,locationRankings:MappedinLocationRankings,rankings:MappedinRankings},_cache=new WeakMap,_data=new WeakMap,Mappedin=function(){function Mappedin(options){_classCallCheck(this,Mappedin),_defineProperty(this,"perspective",void 0),_defineProperty(this,"things",void 0),_defineProperty(this,"options",void 0),_cache.set(this,{writable:!0,value:{}}),_data.set(this,{writable:!0,value:""}),_defineProperty(this,"updatedAt",void 0),_defineProperty(this,"categories",[]),_defineProperty(this,"locations",[]),_defineProperty(this,"vortexes",[]),_defineProperty(this,"maps",[]),_defineProperty(this,"nodes",[]),_defineProperty(this,"polygons",[]),_defineProperty(this,"venue",{}),_defineProperty(this,"events",[]),_defineProperty(this,"mapGroups",[]),_defineProperty(this,"themes",[]),_defineProperty(this,"locationStates",[]),_defineProperty(this,"locationRankings",[]),_defineProperty(this,"rankings",void 0),_defineProperty(this,"_categoriesById",void 0),_defineProperty(this,"_locationsById",void 0),_defineProperty(this,"_vortexesById",void 0),_defineProperty(this,"_mapsById",void 0),_defineProperty(this,"_nodesById",void 0),_defineProperty(this,"_polygonsById",void 0),_defineProperty(this,"_eventsById",void 0),_defineProperty(this,"_mapGroupsById",void 0),_defineProperty(this,"_locationStatesById",void 0),_defineProperty(this,"_locationRankingsById",void 0),_defineProperty(this,"_rankingsById",void 0),_defineProperty(this,"_categoriesByExternalId",void 0),_defineProperty(this,"_locationsByExternalId",void 0),_defineProperty(this,"_vortexesByExternalId",void 0),_defineProperty(this,"_mapsByExternalId",void 0),_defineProperty(this,"_nodesByExternalId",void 0),_defineProperty(this,"_polygonsByExternalId",void 0),_defineProperty(this,"_eventsByExternalId",void 0),_defineProperty(this,"_mapGroupsByExternalId",void 0),_defineProperty(this,"_locationStatesByExternalId",void 0),_defineProperty(this,"_locationRankingsByExternalId",void 0),_defineProperty(this,"_rankingsByExternalId",void 0),_defineProperty(this,"images",void 0),_defineProperty(this,"scenes",void 0),_defineProperty(this,"navigator",void 0),this.options=options}var _fetch,_hydrate;return _createClass(Mappedin,[{key:"generateGetters",value:function(names){var _this=this;try{for(var _loop=function(i,iLen){var name=names[i];Array.isArray(_this[name])&&(Object.defineProperty(_this,"_"+name+"ByExternalId",{get:function(){var cache=_classPrivateFieldGet(this,_cache)[name];if(void 0!==cache)return cache;var result={};return this[name].forEach((function(l){return result[l.externalId]=l})),_classPrivateFieldGet(this,_cache)[name]=result,result}}),Object.defineProperty(_this,"_"+name+"ById",{get:function(){var cache=_classPrivateFieldGet(this,_cache)[name];if(void 0!==cache)return cache;var result={};return this[name].forEach((function(l){return result[l.id]=l})),_classPrivateFieldGet(this,_cache)[name]=result,result}}))},i=0,iLen=names.length;i<iLen;++i)_loop(i);return this}catch(e){throw new Error(e)}}},{key:"getCollectionItemById",value:function(name,id){var indexByExternalId="_"+name+"ByExternalId",collection=this["_"+name+"ById"];return null!=collection&&null!=collection[id]||null!=(collection=this[indexByExternalId])&&null!=collection[id]?collection[id]:null}},{key:"hydrate",value:(_hydrate=_asyncToGenerator(regeneratorRuntime.mark((function _callee(mappedinSerializableData){var mappedinData,names,i,iLen,name,data,_mappedinData,images,scenes;return regeneratorRuntime.wrap((function(_context){for(;;)switch(_context.prev=_context.next){case 0:if("string"!=typeof mappedinSerializableData){_context.next=15;break}_context.prev=1,_classPrivateFieldSet(this,_data,mappedinSerializableData),mappedinData=JSON.parse(mappedinSerializableData),_context.next=10;break;case 6:return _context.prev=6,_context.t0=_context.catch(1),console.error("Unable to parse JSON",_context.t0),_context.abrupt("return");case 10:if(!0!==this.options.useBundleAssets){_context.next=13;break}return _context.next=13,preloadImagesFromBundle(mappedinData);case 13:_context.next=17;break;case 15:mappedinData=mappedinSerializableData,_classPrivateFieldSet(this,_data,JSON.stringify(mappedinData));case 17:for(names=Object.keys(mappedinData),i=0,iLen=names.length;i<iLen;++i)name=names[i],data=mappedinData[name],null!=THINGS[name]&&"function"==typeof THINGS[name].hydrate&&(this[name]=THINGS[name].hydrate(data,this));images=(_mappedinData=mappedinData).images,scenes=_mappedinData.scenes,this.images=images,this.scenes=scenes,this.generateGetters(names),this.initNavigator();case 24:case"end":return _context.stop()}}),_callee,this,[[1,6]])}))),function(_x){return _hydrate.apply(this,arguments)})},{key:"fetch",value:(_fetch=_asyncToGenerator(regeneratorRuntime.mark((function _callee2(){var things,promises,names,_loop2,i,iLen,_this2=this;return regeneratorRuntime.wrap((function(_context2){for(;;)switch(_context2.prev=_context2.next){case 0:"vortexes"in this.options.things||(this.options.things.vortexes=["name","type","accessible","weight","multiplier","nodes"]),"locationStates"in this.options.things||(this.options.things.locationStates=["name","id","value"]),isGatewayKey(this.options.clientId)||(this.options.things.rankings&&delete this.options.things.rankings,this.options.things.locationRankings&&delete this.options.things.locationRankings),things=this.options.things,promises=[],names=Object.keys(things),_loop2=function(i,iLen){var name=names[i];THINGS[name]&&promises.push(THINGS[name].fetch(_this2).then((function(data){return _this2[name]=data,Promise.resolve()})))};for(i=0,iLen=names.length;i<iLen;++i)_loop2(i);return this.generateGetters(names),_context2.abrupt("return",Promise.all(promises).then((function(){_this2.initNavigator(),_classPrivateFieldSet(_this2,_data,JSON.stringify(_this2.toJSON()))})));case 10:case"end":return _context2.stop()}}),_callee2,this)}))),function(){return _fetch.apply(this,arguments)})},{key:"initNavigator",value:function(){this.navigator=new Navigator({locations:this.locations.map((function(l){return l.toJSON()})),nodes:this.nodes.map((function(n){return n.toJSON()})),vortexes:this.vortexes.map((function(v){return v.toJSON()})),maps:this.maps.map((function(m){return m.toJSON()}))})}},{key:"toJSON",value:function(){var _this$rankings,jsonVenue={};for(var item in THINGS)Array.isArray(this[item])&&(jsonVenue[item]=this[item].map((function(p){return p.toJSON()})));return _objectSpread2(_objectSpread2({},jsonVenue),{},{venue:this.venue.toJSON(),rankings:null===(_this$rankings=this.rankings)||void 0===_this$rankings?void 0:_this$rankings.toJSON()})}},{key:"toString",value:function(){return _classPrivateFieldGet(this,_data)}}]),Mappedin}(),defaultThings={venue:["slug","name","defaultMap","metadata","countrycode","tzid","logo","externalId"],nodes:["externalId","x","y","paths","accessible","operationHours"],vortexes:["externalId","nodes","types","accessible"],polygons:["vertexes","geometry","canvasBounds","layer","externalId","entrances"],locations:["externalId","name","type","picture","description","icon","logo","sortOrder","phone","operationHours","social","color","toMap","tags","shortName","detailsUrl","locationState","metadata","siblingGroups","gallery"],categories:["name","color","sortOrder","parents"],maps:["name","elevation","height","width","layers","shortName","scene","group","x_scale"],mapGroups:["name"],themes:["name","themeData"],rankings:["polygons"],locationRankings:[]};function parseOptions(options){var _options=_objectSpread2(_objectSpread2({},defaultOptions),{},{things:defaultThings},options);return _options.noAuth||!_options.clientId||isGatewayKey(_options.clientId)||(_options.baseUrl="https://web-proxy.mappedin.com/1/"),_options.noAuth||(_options.accessToken?_options.authorization="Bearer "+_options.accessToken:_options.clientId&&_options.clientSecret&&(_options.authorization="Basic "+globalThis.btoa(_options.clientId+":"+_options.clientSecret))),_options}function getVenue(_x){return _getVenue.apply(this,arguments)}function _getVenue(){return(_getVenue=_asyncToGenerator(regeneratorRuntime.mark((function _callee(userOptions){var parsedOptions,instance;return regeneratorRuntime.wrap((function(_context){for(;;)switch(_context.prev=_context.next){case 0:return parsedOptions=parseOptions(_objectSpread2({baseUrl:"https://api-gateway.mappedin.com/public/1/"},userOptions)),instance=new Mappedin(parsedOptions),_context.next=4,instance.fetch();case 4:return _context.abrupt("return",instance);case 5:case"end":return _context.stop()}}),_callee)})))).apply(this,arguments)}require("isomorphic-fetch"),globalThis.btoa||(globalThis.btoa=base64.encode);var defaultBundleOptions={useBundleAssets:!(void 0!==globalThis.navigator&&"ReactNative"==globalThis.navigator.product)};function getVenueBundle(_x2){return _getVenueBundle.apply(this,arguments)}function _getVenueBundle(){return(_getVenueBundle=_asyncToGenerator(regeneratorRuntime.mark((function _callee2(userOptions){var parsedOptions,venue,_url,res,_ref,url,updated_at,bundleRes,_yield$bundleRes$json,datastring,_yield$bundleRes$json2,format,mappedin;return regeneratorRuntime.wrap((function(_context2){for(;;)switch(_context2.prev=_context2.next){case 0:return parsedOptions=parseOptions(_objectSpread2(_objectSpread2({baseUrl:"https://api-gateway.mappedin.com/"},defaultBundleOptions),userOptions)),venue=userOptions.venue,_url=(userOptions.bundleBaseUri||parsedOptions.baseUrl+"exports/legacy/1/bundle")+"?venue="+venue+"&version=1.0.0",_context2.next=5,generateAPIRequest(parsedOptions,_url);case 5:return res=_context2.sent,url=(_ref=res).url,updated_at=_ref.updated_at,_context2.next=9,fetch(url,{mode:"cors"});case 9:return bundleRes=_context2.sent,_context2.next=12,bundleRes.json();case 12:if(_yield$bundleRes$json=_context2.sent,datastring=_yield$bundleRes$json.data,_yield$bundleRes$json2=_yield$bundleRes$json.format,"jsonstring"===(format=void 0===_yield$bundleRes$json2?"jsonstring":_yield$bundleRes$json2)){_context2.next=18;break}throw new Error("Unrecognized format"+format);case 18:return mappedin=new Mappedin(parsedOptions),_context2.next=21,mappedin.hydrate(datastring);case 21:return mappedin.updatedAt=updated_at,_context2.abrupt("return",mappedin);case 23:case"end":return _context2.stop()}}),_callee2)})))).apply(this,arguments)}export{Mappedin,MappedinCategory,MappedinCoordinate,MappedinDestinationSet,MappedinDirections,MappedinEvent,MappedinLocation,MappedinMap,MappedinMapGroup,MappedinNavigatable,MappedinNode,MappedinPolygon,MappedinRankings,MappedinVenue,MappedinVortex,getVenue,getVenueBundle};
|