Skip to content

Instantly share code, notes, and snippets.

View buddyeorl's full-sized avatar

Alex Lizarraga buddyeorl

View GitHub Profile
@buddyeorl
buddyeorl / distance.js
Created October 8, 2020 19:14
Using zipcode lat and lon to calculate distance between two points
// using geometry to calculate distance between to points by latitude and longitude,
//units are of type enum, 'M' for distance in miles, 'K' for distance in kilometers or 'N' in Nautic Miles
module.exports.calculateDistance = (a, b, unit = 'M') => {
//if points received are not valid
if (!a || !b || !a.lat || !a.lon || !b.lat || !b.lon) {
return 0
}
let lat1 = a.lat;
let lon1 = a.lon;
@buddyeorl
buddyeorl / distanceField.js
Created October 8, 2020 19:39
Create a field in the result object"distance"
const getDistance=({lat, lon, query,sortOptions={distance:-1} })=>{
// implementation of the distance calculation using mongodb aggregate pipeline
//assuming there's a field called businessInfo and it's an object like {location:{lon:value, lat:value}}
let radlat1 = { $divide: [{ $multiply: [3.141592653589793238, lat] }, 180] };
let radlat2 = { $divide: [{ $multiply: [3.141592653589793238, "$businessInfo.location.lat"] }, 180] };
let theta = { $subtract: [lon, "$businessInfo.location.lon"] };
let radtheta = { $divide: [{ $multiply: [3.141592653589793238, theta] }, 180] };
let dist = { $sum: [{ $multiply: [{ $sin: radlat1 }, { $sin: radlat2 }] }, { $multiply: [{ $cos: radlat1 }, { $cos: radlat2 }, { $cos: radtheta }] }] };
dist = { $acos: dist };
//file path related imports
const path = require('path');
const fs = require('fs');
const util = require('util');
//read file
const readline = require('readline');
let zipCodes = {}
//express server import
const express = require('express');
//body parser
const bodyParser = require('body-parser');
//CORS
var cors = require('cors')
//initialize express server app
// importing zipCode data file
let zipCodes = require('./allZipCodesFilesWithCityNamesShort').allZipCodesFilesWithCityNamesShort;
// importing calculate distance functions
const calculateDistance = require('./calculateDistance').calculateDistance;
module.exports.getRadius = (zipCode, limit, unit = 'M') => {
let results = [];
//check if received Zip Code exist in the zipCodes object

Install

npm i zipcode-city-distance

Usage

const zipCodeData = require('zipcode-city-distance');
const fs = require('fs');
const util = require('util');
const axios = require('axios');
const cheerio = require('cheerio');
const url = ""; // <- i set the url to crawl here
const fetchData= async (url)=> {
await new Promise(resolve => {
//randomize crawling times
//express server import
const express = require('express');
//body parser
const bodyParser = require('body-parser');
//CORS
var cors = require('cors')
//initialize express server app
const express = require('express');
const router = express.Router();
const bodyParser = require('body-parser');
router.use(bodyParser.urlencoded({ extended: true }));
router.use(bodyParser.json());
//middleware
const equipmentLookup = require('../helper/equipmentData/equipmentLookup');
router.get('/', equipmentLookup, (req, res) => {
@buddyeorl
buddyeorl / equipmentLookup.js
Created October 9, 2020 20:10
middleware for Equipment Lookup
//importing data, if it's host locally, otherwise handle the db imports here
const data = require('./data');
//this function will show exact results as default and then partial results if no exact results were found
module.exports = (req, res, next) => {
//default value
let queries = ['one', 'two', 'three']
if (req.query && req.query.search && typeof req.query.search === 'object') {
queries = req.query.search