npm i zipcode-city-distance
const zipCodeData = require('zipcode-city-distance');
// 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; |
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 |
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) => { |
//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 |