Help get this topic noticed by sharing it on Twitter, Facebook, or email.

Geolocation

A few years ago Appery.io published a solution for comparing a gps location to an address stored in a database. It returned the record in the database, if the address matched the lat long coords within a certain radius. The issue is it was a server based solution. Do you guys have a similar solution that is not server based?

See server code below:

// Database Id
var dbId = "database id"; //Change this value to your database id

var responseBody = {};

// Get request parameters
var latitude = request.object().latitude;
var longitude = request.object().longitude;
var radius = request.object().radius;

// The function that calculates the distance between two points

function getDistance(lat1, lat2, lon1, lon2) {

var R = 3959; // Earth radius in miles

var dLat = (lat2 - lat1)*Math.PI/180;

var dLon = (lon2 - lon1)*Math.PI/180;

var lat1 = lat1*Math.PI/180;

var lat2 = lat2*Math.PI/180;

var a = Math.sin(dLat / 2) * Math.sin(dLat / 2) + Math.sin(dLon / 2) * Math.sin(dLon / 2) * Math.cos(lat1) * Math.cos(lat2);

var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));

var d = R * c;

return d;

}

try {

// Check if all the necessary parameters are present and valid

if (latitude && longitude && radius && !isNaN(latitude) && !isNaN(longitude) && !isNaN(radius)) {

var results = [];

var params = {};

// Sort the results by contact name

params.sort = "contactName";

// Get all customers from the database

var customers = Collection.query(dbId, "GeoCustomers", params);

for (var i = 0; i < customers.length; i++) {

// Geocode customer's address with Google API

var XHRResponse = XHR.send("GET", "https://maps.googleapis.com/maps/api/...", {

"parameters": {

"address": customers[i].address,

"sensor": "false"

}

});

console.log(XHRResponse);

if (XHRResponse.status == 200) {

// Get coordinates from the response

var lat = JSON.parse(XHRResponse.body).results[0].geometry.location.lat;

var lng = JSON.parse(XHRResponse.body).results[0].geometry.location.lng;

// If the customer's coordinates are within the radius,

// add the customer record to the results array

if (getDistance(lat, latitude, lng, longitude) , 400);

}
1 person has
this question
+1
Reply