added new geo coder details

This commit is contained in:
Martin Donnelly 2018-11-04 01:12:59 +00:00
parent 4f28573ee8
commit 9e69e6942f
8 changed files with 206 additions and 19 deletions

13
package-lock.json generated
View File

@ -52,7 +52,7 @@
},
"@sinonjs/formatio": {
"version": "2.0.0",
"resolved": "http://registry.npmjs.org/@sinonjs/formatio/-/formatio-2.0.0.tgz",
"resolved": "https://registry.npmjs.org/@sinonjs/formatio/-/formatio-2.0.0.tgz",
"integrity": "sha512-ls6CAMA6/5gG+O/IdsBcblvnd8qcO/l1TYoNeAzp3wcISOxlPXQEus0mLcdwazEkWjaBdaJ3TaxmNgCLWwvWzg==",
"dev": true,
"requires": {
@ -3395,7 +3395,6 @@
"version": "1.0.5",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"delayed-stream": "~1.0.0"
}
@ -3458,8 +3457,7 @@
"delayed-stream": {
"version": "1.0.0",
"bundled": true,
"dev": true,
"optional": true
"dev": true
},
"delegates": {
"version": "1.0.0",
@ -3747,14 +3745,12 @@
"mime-db": {
"version": "1.27.0",
"bundled": true,
"dev": true,
"optional": true
"dev": true
},
"mime-types": {
"version": "2.1.15",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"mime-db": "~1.27.0"
}
@ -3830,8 +3826,7 @@
"number-is-nan": {
"version": "1.0.1",
"bundled": true,
"dev": true,
"optional": true
"dev": true
},
"oauth-sign": {
"version": "0.8.2",

View File

@ -8,6 +8,7 @@ const foursquare = require('./server/foursquare');
const rightbyme = require('./server/RightByMe');
const agenda = require('./server/agenda');
const directions = require('./server/directions');
const geocode = require('./server/geocode');
logger.level = 'debug';
@ -113,6 +114,28 @@ app.get('/fsexplore', cache('15 minutes'), (req, res) => {
}
});
app.get('/geocode', /*cache('15 minutes'),*/ (req, res) => {
if (req.query.hasOwnProperty('ll')) {
const ll = req.query.ll;
console.log('ll',ll);
geocode.doGetGeocode(ll)
.then((d) => {
res.set('Cache-Control', 'public, max-age=900');
res.send(d);
}).catch((e) => {
logger.error(e);
res.status(500).send('There was an error!');
});
}
else {
// throw new Error('Weather: LL missing');
logger.warn('FS: LL missing');
res.status(500).send('LL Missing');
}
});
app.get('/rightbyme', cache('86400 seconds'), (req, res) => {
if (req.query.hasOwnProperty('ll'))
rightbyme.doGetRightByMe(req.query.ll)

96
server/geocode.js Normal file
View File

@ -0,0 +1,96 @@
const NodeGeocoder = require('node-geocoder');
const logger = require('log4js').getLogger('GeoCode');
const { reduceOpencage } = require('./reducers/opencage');
logger.level = 'debug';
const options = {
'provider': 'opencage',
// Optional depending on the providers
'httpAdapter': 'https', // Default
'apiKey': '893ab539eca84b5ca7a54cb03ef23443', // for Mapquest, OpenCage, Google Premier
'formatter': null // 'gpx', 'string', ...
};
const geocoder = NodeGeocoder(options);
function doGetGeocode(ll) {
return new Promise((resolve, reject) => {
const [lat, lon ] = ll.split(',');
const latlong = { lat, lon };
logger.debug(latlong);
geocoder.reverse(latlong)
.then(function(res) {
if (res.hasOwnProperty('raw')) {
const result = reduceOpencage(res.raw);
return resolve(result[0]);
}
else
return resolve(res[0]);
})
.catch(function(err) {
logger.error(err);
return reject(err);
});
});
}
module.exports = { doGetGeocode };
/*
opencage
{
"latitude": 51.508751,
"longitude": -0.067457,
"country": "United Kingdom",
"city": "London",
"state": "England",
"zipcode": "SE15",
"streetName": "Vaughan Way",
"countryCode": "gb",
"suburb": "St.George in the East",
"extra": {
"flag": "🇬🇧",
"confidence": 9,
"confidenceKM": 0.5,
"map": "https://www.openstreetmap.org/?mlat=51.50875&mlon=-0.06746#map=17/51.50875/-0.06746"
}
}
google
[
{
"administrativeLevels": {
"level1long": "England",
"level1short": "England",
"level2long": "Northamptonshire",
"level2short": "Northamptonshire"
},
"city": "Northampton",
"country": "United Kingdom",
"countryCode": "GB",
"extra": {
"confidence": 0.7,
"establishment": "Daventy depot",
"googlePlaceId": "ChIJI8H0WFUVd0gRIIFzNwDQAuM",
"neighborhood": "Kilsby",
"premise": null,
"subpremise": null
},
"formattedAddress": "Daventy depot, Kilsby, Northampton NN6 7GY, UK",
"latitude": 52.3546726,
"longitude": -1.1741823,
"provider": "google",
"zipcode": "NN6 7GY"
}
]
*/

View File

@ -0,0 +1,57 @@
const logger = require('log4js').getLogger('GeoCode 🔧');
const { get, isEmpty, has, uniq } = require('lodash');
logger.level = 'debug';
var ConfidenceInKM = {
'10': 0.25,
'9': 0.5,
'8': 1,
'7': 5,
'6': 7.5,
'5': 10,
'4': 15,
'3': 20,
'2': 25,
'1': Number.POSITIVE_INFINITY,
'0': Number.NaN
};
function formatResult (result) {
var confidence = result.confidence || 0;
return {
'latitude': result.geometry.lat,
'longitude': result.geometry.lng,
'country': result.components.country,
'city': result.components.city,
'state': result.components.state,
'zipcode': result.components.postcode,
'streetName': result.components.road,
'streetNumber': result.components.house_number,
'countryCode': result.components.country_code,
'county': result.components.county,
'suburb': result.components.suburb || '',
'extra': {
'flag' : result.annotations.flag,
'confidence': confidence,
'confidenceKM': ConfidenceInKM[result.confidence] || Number.NaN,
'map' : result.annotations.OSM.url
}
};
}
function reduceOpencage(result) {
var results = [];
if (result && result.results instanceof Array)
for (var i = 0; i < result.results.length; i++)
results.push(formatResult(result.results[i]));
return results;
}
module.exports = { reduceOpencage };

View File

@ -58,7 +58,7 @@ function reduceYelp(data) {
const urlBit = url[2];
obj.viewIntent = `https://m.yelp.com/${urlBit}`;
}
else
else
obj.viewIntent = '';
return obj;
@ -71,14 +71,14 @@ function reduceFullFS(data) {
const photoBlob = get(localObj, 'photos.groups');
let photoItems;
for (const i of photoBlob)
if (i.type === 'venue')
for (const i of photoBlob)
if (i.type === 'venue')
photoItems = i.items;
const photosCount = photoItems.length;
const photosCount = (typeof(photoItems) !== 'undefined' && photoItems !== null) ? photoItems.length : 0;
const tipsCount = get(localObj, 'tips.count', 0);
if (photosCount > 0)
if (photosCount > 0)
obj.images = photoItems.map(item => {
const prefix = get(item, 'prefix', '');
@ -106,7 +106,7 @@ function reduceFullFS(data) {
function reduceTwitter(data) {
let obj = [];
if (data.length > 0)
if (data.length > 0)
obj = data.map(item => {
return get(item, 'text');
});

View File

@ -11,7 +11,7 @@
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
const CACHE_VERSION = { 'version': '0.0.933' };
const CACHE_VERSION = { 'version': '0.0.934' };
const PRECACHE = `jubileeData-${CACHE_VERSION.version}`;
const RUNTIME = 'runtime';

View File

@ -86,14 +86,28 @@ const LocationModel = Backbone.Model.extend({
// const current = this.get('location');
const current = this.toJSON();
// console.log('># current', current);
const options = {
/*const options = {
'provider': 'google',
// Optional depending on the providers
'httpAdapter': 'https', // Default
'apiKey': 'AIzaSyA7oGP6QS28tTwtT6UzA7hzh0b3MWwMYB8', // for Mapquest, OpenCage, Google Premier
'formatter': null // 'gpx', 'string', ...
};
};*/
// opencage 893ab539eca84b5ca7a54cb03ef23443
const options = {
'provider': 'opencage',
// Optional depending on the providers
'httpAdapter': 'https', // Default
'apiKey': '893ab539eca84b5ca7a54cb03ef23443', // for Mapquest, OpenCage, Google Premier
'formatter': null // 'gpx', 'string', ...
};
const myCoords = { 'home': {
'lat':51.490002, 'long':-0.140245

View File

@ -130,7 +130,9 @@ const VenueDetailView = Backbone.View.extend({
'zoom': 15
});
L.tileLayer('https://api.tiles.mapbox.com/v4/{id}/{z}/{x}/{y}.png?access_token={accessToken}', {
// L.tileLayer('https://api.tiles.mapbox.com/v4/{id}/{z}/{x}/{y}.png?access_token={accessToken}', {
L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
'attribution': 'Map data &copy; <a href="http://openstreetmap.org">OpenStreetMap</a> contributors, <a href="http://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>, Imagery © <a href="http://mapbox.com">Mapbox</a>',
'maxZoom': 18,
'id': 'mapbox.streets',