Replace the per-popup "Nearby on Wikipedia" link with a live Wikipedia layer
The old link only ever surfaced one nearby article at a time, buried in whatever POI's popup you happened to open, and only for uploaded files with a category. Replaced it with a standalone "Wikipedia" toggle under the renamed "Tracks & Points" panel: enabling it adds a live map layer that refetches GET /api/kiwix/nearby on every pan/zoom and plots every nearby article as its own point. kiwix-serve's own geo search never echoes back a result's coordinates (confirmed live against the real production ZIM, both its HTML and ?format=xml output) — it only filters by distance from a point. So Maptool::Kiwix.nearby fetches each matching article's own page too and reads its <meta name="geo.position"> tag, which every geotagged Wikipedia article carries. Tried parallelizing those per-article fetches with threads first; measured no improvement against the real ZIM (kiwix-serve appears to serialize requests regardless), so it stayed sequential — ~1.6s for a 30-result page, fine for a refetch-on-pan-end layer. Clicking a point opens a small popup linking to the article (proxied through the existing /kiwix/* passthrough). New WIKI_ICON (NPS's bookstore-22.svg) marks these, kept out of POI_ICONS since that set doubles as notes.js's icon-picker option list and this fixed-glyph layer has no per-feature category to key off of.
This commit is contained in:
1 parent
47e3f9c7e8
commit
787df5478d
9 files changed
+354
-14
No files matched your search
@@ -238,6 +238,19 @@ module Maptool
|
||||
json available: reachable, url: (reachable ? "/kiwix" : "")
|
||||
end
|
||||
|
||||
# Backs the "Wikipedia" map layer (public/js/gpx.js) — replaces the old
|
||||
# per-popup "Nearby on Wikipedia" link, which only ever pointed at one
|
||||
# POI at a time. Read-only and login-free, same as the tree/plugin
|
||||
# listing routes below: viewing the map needs no account, only writing
|
||||
# to it does.
|
||||
get "/api/kiwix/nearby" do
|
||||
halt 404 if KIWIX_URL.empty?
|
||||
bbox = %w[south west north east].map { |key| params[key].to_s }
|
||||
halt 400, json(error: "south, west, north, east are required") if bbox.any?(&:empty?)
|
||||
|
||||
json Kiwix.nearby(KIWIX_URL, bbox.map(&:to_f))
|
||||
end
|
||||
|
||||
# Proxies kiwix-serve's own search UI and content pages through this
|
||||
# app instead of linking the browser to it directly (see KIWIX_URL) —
|
||||
# kiwix-serve is started with --urlRootLocation=/kiwix
|
||||
|
||||
Reference in new issue
Block a user