added new geo coder details
This commit is contained in:
parent
4f28573ee8
commit
9e69e6942f
13
package-lock.json
generated
13
package-lock.json
generated
@ -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",
|
||||
|
23
server.js
23
server.js
@ -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
96
server/geocode.js
Normal 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"
|
||||
}
|
||||
]
|
||||
*/
|
57
server/reducers/opencage.js
Normal file
57
server/reducers/opencage.js
Normal 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 };
|
@ -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');
|
||||
});
|
||||
|
@ -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';
|
||||
|
||||
|
@ -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
|
||||
|
@ -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 © <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',
|
||||
|
Loading…
Reference in New Issue
Block a user