Skip to content

Instantly share code, notes, and snippets.

@neodigm
Last active July 15, 2020 16:01
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save neodigm/ffd71e5ec0888d36e778250446586dfd to your computer and use it in GitHub Desktop.
Save neodigm/ffd71e5ec0888d36e778250446586dfd to your computer and use it in GitHub Desktop.
"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;
}
@neodigm
Copy link
Author

neodigm commented Jun 20, 2020

For the "full" Airport dataset visit here:
https://github.com/neodigm/Next-Generation-Storefront-NGS

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment