mirror of
https://framagit.org/les/gancio.git
synced 2025-01-31 16:42:22 +01:00
75 lines
No EOL
1.9 KiB
JavaScript
75 lines
No EOL
1.9 KiB
JavaScript
const cache = require('memory-cache')
|
|
const providerCache = new cache.Cache()
|
|
|
|
const photon = {
|
|
commonName: 'Photon',
|
|
DEFAULT_ENDPOINT: 'https://photon.komoot.io/api/',
|
|
endpoint: (req, res) => {
|
|
return res.locals.settings.geocoding_provider || photon.DEFAULT_ENDPOINT
|
|
},
|
|
cache: providerCache,
|
|
|
|
getParams (req, res) {
|
|
const details = req.params.place_details
|
|
|
|
return {
|
|
q: details,
|
|
limit: 3,
|
|
}
|
|
},
|
|
|
|
/**
|
|
* Icons to nominatim `osm_type` and `class` conversion
|
|
*/
|
|
searchIcons_nominatim_osm_type: {
|
|
'W': 'mdiRoadVariant',
|
|
'N': 'mdiMapMarker',
|
|
'R': 'mdiCityVariant',
|
|
},
|
|
searchIcons_nominatim_class: ['amenity', 'shop', 'tourism', 'leisure', 'building'],
|
|
|
|
loadResultIcon (item) {
|
|
if (this.searchIcons_nominatim_class.includes(item.class)) {
|
|
return 'mdiHome'
|
|
}
|
|
return this.searchIcons_nominatim_osm_type[item.type]
|
|
},
|
|
|
|
/**
|
|
* Map results from provider
|
|
*/
|
|
fullAddressMapping: ['housenumber', 'street', 'locality', 'district', 'city', 'county', 'state', 'postcode', 'country'],
|
|
|
|
mapQueryResults(ret, addressList = []) {
|
|
if (ret) {
|
|
addressList = ret.features.map(v => {
|
|
let pre_name = v.properties.name || v.properties.street || ''
|
|
let pre_address = ''
|
|
|
|
this.fullAddressMapping.forEach((item, i) => {
|
|
let last = i == (this.fullAddressMapping.length - 1)
|
|
if (v.properties[item] && !last) {
|
|
pre_address += v.properties[item]+', '
|
|
} else if (v.properties[item]) {
|
|
pre_address += v.properties[item]
|
|
}
|
|
});
|
|
|
|
let name = pre_name
|
|
let address = pre_address
|
|
return {
|
|
class: v.properties.osm_key,
|
|
type: v.properties.osm_type,
|
|
lat: v.geometry.coordinates[1],
|
|
lon: v.geometry.coordinates[0],
|
|
name,
|
|
address
|
|
}
|
|
})
|
|
}
|
|
return addressList
|
|
}
|
|
|
|
}
|
|
|
|
module.exports = photon |