Last active
July 15, 2020 16:01
-
-
Save neodigm/ffd71e5ec0888d36e778250446586dfd to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
"use strict"; | |
/* | |
Created an airport geo-proximity microservice that could answer the questions, like; “What are the three closest airports to me right now?”. | |
*/ | |
var system_output = { | |
"airports": { | |
"ASE": { | |
"additionalInfo": null, | |
"cityName": "ASPEN", | |
"code": "ASE", | |
"countryCode": "US", | |
"countryName": "UNITED STATES", | |
"formattedAddress": "ASPEN, CO, UNITED STATES - Aspen (ASE)", | |
"formattedAirport": "Aspen (ASE)", | |
"citystate": "ASPEN CO", | |
"geoCode": "39.2232,-106.8688", | |
"id": "TT_11c10f86c5d12bae", | |
"name": "(ASE) ASPEN, CO", | |
"stateCode": "CO", | |
"stateName": "CO", | |
"type": "Airport" | |
}, | |
"ABR": { | |
"additionalInfo": null, | |
"cityName": "ABERDEEN", | |
"code": "ABR", | |
"countryCode": "US", | |
"countryName": "UNITED STATES", | |
"formattedAddress": "ABERDEEN, SD, UNITED STATES - Aberdeen (ABR)", | |
"formattedAirport": "Aberdeen (ABR)", | |
"citystate": "ABERDEEN SD", | |
"geoCode": "45.449,-98.4218", | |
"id": "TT_bcac72635aed0fb9", | |
"name": "(ABR) ABERDEEN, SD", | |
"stateCode": "SD", | |
"stateName": "SD", | |
"type": "Airport" | |
} | |
} | |
}; | |
var eInput1, eContain, oAutoComplete, sMU, closestAirports; | |
setTimeout(function(){ | |
eInput1 = document.querySelectorAll(".js-inp__airport")[0]; | |
eContain = document.querySelector(".js-contain"); | |
oAutoComplete = new google.maps.places.Autocomplete( | |
(eInput1), | |
{types: ['geocode']} | |
); | |
oAutoComplete.addListener('place_changed', () => { | |
let place = oAutoComplete.getPlace(); | |
let ac = place.address_components; | |
let lat = place.geometry.location.lat(); | |
let lon = place.geometry.location.lng(); | |
let city = ac[0]["short_name"]; | |
eContain.innerHTML = sMU = ""; | |
closestAirports.find(lat, lon, system_output.airports, 100).forEach(function( oAP ){ | |
sMU += "<aside>"; | |
sMU += "<p>" | |
sMU += oAP.formattedAirport; | |
sMU += "<span> "+ Math.round(oAP.dist) +" Miles</span>"; | |
sMU += "</p>"; | |
sMU += "<a target='_blank' href='https://www.google.com/maps/place/"+oAP.lat+","+oAP.lon+"'>"; | |
sMU += "Map"; | |
sMU += "</a>"; | |
sMU += "</aside>"; | |
}); | |
eContain.innerHTML = sMU; | |
}); | |
}, 2000); | |
closestAirports = (function(_d){ | |
return { | |
"find": function(nLat, nLon, objPorts, nRadius){ | |
if(nLat && nLon && objPorts){ | |
var arrPorts = []; | |
for (var prop in objPorts) { // Sort Object | |
if (objPorts.hasOwnProperty(prop)) { | |
var lat = objPorts[prop].geoCode.split(",")[0]; | |
var lon = objPorts[prop].geoCode.split(",")[1]; | |
arrPorts.push({ | |
'key': prop, 'lat': lat, 'lon': lon, | |
"dist": getDistance(lat, lon, nLat, nLon), | |
"formattedAirport": objPorts[prop].formattedAirport | |
}); | |
} | |
} | |
arrPorts.sort(function(a, b){ | |
return a.dist - b.dist; | |
}); | |
return arrPorts.filter(function(aP){ | |
return (aP.dist <= nRadius); | |
}); | |
} | |
} | |
}; | |
})(document); | |
function getDistance(lat1, lon1, lat2, lon2) { | |
var radlat1 = Math.PI * lat1/180; | |
var radlat2 = Math.PI * lat2/180; | |
var theta = lon1-lon2; | |
var radtheta = Math.PI * theta/180; | |
var dst = Math.sin(radlat1) * Math.sin(radlat2) + Math.cos(radlat1) * Math.cos(radlat2) * Math.cos(radtheta); | |
if (dst > 1) dst = 1; | |
dst = Math.acos(dst); | |
dst = dst * 180/Math.PI; | |
dst = dst * 60 * 1.1515; // miles | |
return dst; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
For the "full" Airport dataset visit here:
https://github.com/neodigm/Next-Generation-Storefront-NGS