|
var Arrow = require('arrow') |
|
var request = require('request'); |
|
|
|
var googleMapAPIKey = "YOUR_GOOGLE_API_KEY_GOES_HERE"; |
|
var baseURL = "https://maps.googleapis.com/maps/api/geocode/json?address="; |
|
|
|
var forwardGeocoder = Arrow.Block.extend({ |
|
name: 'forwardgeocoder', |
|
description: 'ensures that latitude and longitude exist for the model', |
|
|
|
action: function (req, resp, next) { |
|
console.log('forwardGeocoder'); |
|
|
|
console.log(resp.body); |
|
var body = JSON.parse(resp.body); |
|
var data = body[body.key]; |
|
var dataLen = data.length; |
|
var replies = 0; |
|
|
|
if(dataLen){ //findAll |
|
data.forEach(function (_row, _index) { |
|
console.log(prepareAddress(_row.address)); |
|
var url=baseURL+encodeURIComponent(prepareAddress(_row.address))+"&key="+googleMapAPIKey; |
|
console.log(url); |
|
request(url, function (error, response, body) { |
|
if (!error && response.statusCode == 200) { |
|
var res = JSON.parse(body); |
|
_row.latitude = res.results[0].geometry.location.lat; |
|
_row.longitude = res.results[0].geometry.location.lng; |
|
|
|
replies++; |
|
if(replies == dataLen) { |
|
setReply(); |
|
} |
|
} else { |
|
console.log("google maps geocode request error"); |
|
replies++; |
|
if(replies == dataLen) { |
|
setReply(); |
|
} |
|
} |
|
}); |
|
}); |
|
} else { //findOne |
|
var url=baseURL+encodeURIComponent(prepareAddress(data.BillingStreet))+"&key="+googleMapAPIKey; |
|
request(url, function (error, response, body) { |
|
if (!error && response.statusCode == 200) { |
|
var res = JSON.parse(body); |
|
data.latitude = res.results[0].geometry.location.lat; |
|
data.longitude = res.results[0].geometry.location.lng; |
|
setReply(); |
|
} else { |
|
console.log("google maps geocode request error"); |
|
setReply(); |
|
} |
|
}); |
|
} |
|
|
|
function prepareAddress(str) { |
|
return str.replace(/(\r\n|\n|\r)/gm,","); |
|
} |
|
|
|
function setReply() { |
|
console.log("post block addgps executed"); |
|
resp.success(body[body.key], next); |
|
} |
|
} |
|
}); |
|
|
|
module.exports = forwardGeocoder; |