Skip to content

Commit 0bb3e26

Browse files
committed
Handle geo address lookup
Signed-off-by: Yukai Huang <yukaihuangtw@gmail.com>
1 parent d9851f2 commit 0bb3e26

1 file changed

Lines changed: 20 additions & 13 deletions

File tree

public/js/extra.js

Lines changed: 20 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -453,24 +453,31 @@ export function finishView (view) {
453453
console.warn(err)
454454
}
455455
})
456-
view.find('div.geo.raw').removeClass('raw').each(function (key, value) {
456+
view.find('div.geo.raw').removeClass('raw').each(async function (key, value) {
457457
const $elem = $(value).parent().parent()
458458
const $value = $(value)
459459
const content = $value.text()
460460
try {
461-
if (content.match(/[\d\.\,]+/)) {
462-
const [lng, lat, zoom] = content.split(',').map(parseFloat)
463-
const position = [lat, lng]
464-
$elem.html(`<div class="geo-map"></div>`)
465-
const map = L.map($elem.find('.geo-map')[0]).setView(position, zoom || 16)
466-
467-
L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
468-
attribution: '<a href="https://www.openstreetmap.org/">OSM</a>',
469-
maxZoom: 18,
470-
}).addTo(map)
471-
L.marker(position).addTo(map)
472-
$elem.addClass('geo')
461+
let position, zoom
462+
if (content.match(/^[\d\.\,\s]+$/)) {
463+
const [lng, lat, zoo] = content.split(',').map(parseFloat)
464+
zoom = zoo
465+
position = [lat, lng]
466+
} else {
467+
// parse value as address
468+
const data = await fetch(`https://nominatim.openstreetmap.org/search?q=${encodeURIComponent(content)}&format=json`).then(r => r.json())
469+
const { lat, lon } = data[0]
470+
position = [lat, lon]
473471
}
472+
$elem.html(`<div class="geo-map"></div>`)
473+
const map = L.map($elem.find('.geo-map')[0]).setView(position, zoom || 16)
474+
475+
L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
476+
attribution: '<a href="https://www.openstreetmap.org/">OSM</a>',
477+
maxZoom: 18,
478+
}).addTo(map)
479+
L.marker(position).addTo(map)
480+
$elem.addClass('geo')
474481
} catch (err) {
475482
$elem.append(`<div class="alert alert-warning">${escapeHTML(err)}</div>`)
476483
console.warn(err)

0 commit comments

Comments
 (0)