Releases: Jin1c-3/obsidian-advanced-maps
Release list
1.17.0
Added
-
A folder of map tiles already on your disk can be the background of every
map. Everything else this plugin draws already worked with no network — the
notes, the routes, the photos and their thumbnails are files in your vault —
and the ground under them did not. Close the lid on a plane and the tracks
were still there over a blank grey rectangle.Settings → Offline basemap takes the path your tiles are addressed by:
/home/you/tiles/{z}/{x}/{y}.png, absolute or relative to the vault,{-y}
included for packs laid out in TMS row order. Every map draws it, inline
![[route.gpx]]maps included, and no tile request leaves the machine.Two more rows say which levels the pack covers, because each end fails its own
way. Past the deepest one the map keeps drawing, magnifying the tiles you have
rather than issuing a failed read for every tile that is not there. Below the
shallowest, the camera stops at the edge of the pack rather than going blank.A path rather than a URL, on purpose: the prefix a URL needs is rebuilt every
time Obsidian starts, so a hand-typed one works until the next restart. This
resolves it as each map is built.Any map view can decline, from the Background section of its own options
where its background is configured. Nothing overwrites what you configured
there — the basemap is substituted as the map is built — so switching it off
brings that background straight back, and clearing the setting returns every
map at once.Nothing is downloaded: bulk-fetching a provider's tiles is theirs to permit,
not this plugin's to do on your behalf. The pack is only ever read. A
single-file.mbtilesor.pmtilesstill needs a hook into a map library
this plugin does not bundle; unpack it into a directory tree and it works.
Measured on desktop; mobile reaches local files another way and is untested.
1.16.0
Added
-
A file of saved places can become notes, and the places a Base matched can
become a file. A Google My Maps export or a phone's saved-restaurants list
drew as a hundred circles owned by whichever note linked it, and that was the
end of them — not rows, no properties, nothing a filter or a formula could
reach. The way back out did not exist at all.Right-click a
.kml,.gpxor.geojsonand choose Import places as
notes…. The dialog says how many places the file holds and asks where they
go; each one becomes a note carrying its coordinate in your coordinate
property, named after the placemark, with the placemark's description as its
body. Nothing existing is overwritten — a name already taken gets a suffix —
and everything lands in the one folder you named, so deleting that folder
undoes the import.Right-click a Base map and choose Export places… for the other direction:
every place on that map as GPX waypoints, KML placemarks or CSV rows. Places
are named by the note's file name or by any property the Base displays, which
is what makes an export readable when your notes are named20250405162700.
The file is written into your vault at a path you confirm, and a path already
taken blocks the write rather than replacing what is there.Exported coordinates are the notes' own WGS-84 values, never the shifted
positions the markers were drawn at, so the same Base exported over Amap and
over OpenStreetMap gives identical files. A KML<description>and a GPX
<desc>are now read where they were previously discarded, and markup in one
arrives in the note as the text it renders as rather than as markup.
1.15.0
Added
-
The popup on a Base map now says what you are pointing at. Hovering a
track there opened the note's own card and told you nothing about which of its
tracks you were on; a waypoint's name and a photo's thumbnail showed on an
inline![[track.gpx]]embed and nowhere else.That card gains one row. Point at a route and it reports that one file's
distance, climb and elapsed time, labelled with the file's own name — so a
note holding a morning hike and an afternoon ride reports each separately
instead of summing them. Point at a named waypoint and it says the name, under
the same Show track markers setting that governs the markers. Point at a
photo and it shows the photo. An area adds nothing, because a boundary is not
a distance travelled.Only figures the file recorded appear, never a zero standing in for a figure
never written, and the numbers are measured on the file's own WGS-84 data — so
a map drawn on Chinese tiles reports the same distance as the embed does. The
full set and the elevation profile stay inline, where there is room for them.
A note whose displayed properties are all empty still raises no popup at all;
that is the built-in map's rule for pins and it is left alone. -
You can name the statistics columns yourself. Write track statistics to
properties took its names from one prefix, so a vault written in Chinese got
a column headedtrack-distance-kmbeside columns called日期and地点—
and renaming the property by hand only lasted until the command ran again.Settings → Tracks → Track properties now holds the prefix and one box
per figure. What you type in a box is the whole property name, prefix left out:
距离, nottrack-距离. Leave a box empty — as all nine are by default — and
that figure keeps the prefixed name the box shows you, so nothing changes for a
vault that ignores this. The command still touches only the nine names it
resolves to, and now refuses when two figures would share one name, the same
way it already refuses to overwrite the coordinate or place property.Renaming a figure does not rename what is already in your notes: the property
written under the old name stays until you remove it.
Changed
-
The settings are arranged into pages. The pane was one scroll of thirty-odd
rows under eight headings; looking at the track knobs meant scrolling past
geocoding. It now opens on eight entries — Coordinate system, Open in map, Open
in external map, Place search, Location, Pins, Tracks, Photos — and each opens a
page holding that topic's rows and its explanation.An entry states what it is set to, so the coordinate system, the configured
base, the search source, the number of external map apps switched on, and
whether location, pins and photos are on are all readable without opening
anything. Every row is still found by the settings search, which reaches inside
the pages. No setting changed its name, default, stored value, or effect: an
upgrading vault keeps everything it had configured.
1.14.0
Added
-
A note you already wrote can be placed from the map. The right-click menu
could create a note at the spot you clicked, but not put that spot into a note
that already existed — which meant copying the coordinate, finding the note,
and pasting it into the properties by hand. Set a note's coordinates here
now opens a fuzzy note picker and writes the clicked coordinate into whichever
note you choose.Each row in the picker shows the note's folder and, when it already has a
coordinate, the value it holds, so a near-miss on a name is visible before it
is chosen rather than after. Templates are left out of the list — read from the
folder the core Templates plugin names, since a coordinate written into a
template would go into every note stamped from it afterwards. Picking a note
with no coordinate writes straight away; picking one that already has a
coordinate shows the old value and the new one and asks, because a property has
no undo. Only the coordinate property is written, and the coordinate is the
same one the menu's other entries use — converted out of the basemap's datum
and back into longitude range exactly once. -
Track statistics can be written into a note's properties. The numbers under
an inline map existed only in that embed, where no Base could sort, filter or
total them. Write track statistics to properties measures the track files
the current note links and writes distance, ascent, descent, elevation range,
elapsed and moving time, pace and start time into that note's frontmatter as
numbers —track-distance-km: 13.62, not"13.6 km", because a formatted
string sorts 10 km before 9 km. The unit is stated in each property name, since
a bare number in frontmatter is otherwise unlabelled forever.Only what a file recorded is written: a GeoJSON route with no elevation and no
timestamps leaves one property, a GPX from a watch leaves nine, and a figure
with nothing behind it is removed rather than left stale. Property names come
from the new Track property prefix setting,trackby default, and the
command reads, writes and removes nothing outside that prefix — if the prefix
would collide with the coordinate or place property it refuses rather than
overwrite. It runs when invoked and at no other time; a track file edited
afterwards does not rewrite the notes that link it. -
Areas are drawn. A GeoJSON or KML file can hold a region rather than a
route, and one used to reach the map already transformed, already counted for
framing, and then drawn by nothing at all — the camera flew to the area and
showed empty map, with no way to tell an unsupported shape from an empty file.
An area is now filled in its note's colour beneath everything else, its
boundary stroked at the track's own width and opacity, and its holes left
unfilled. It gets no direction arrows and no start or end markers, since a
region has no travel direction, and it adds nothing to distance, ascent or the
elevation profile.Fill opacity follows the existing Track opacity setting at a fraction of
it, so a large area never hides the roads and labels underneath. There is no
new setting to find.An area is the last thing a click or hover reaches. A marker, waypoint or
photo standing inside one keeps its own click, and the map's context menu opens
over an area exactly as it does anywhere else.
Fixed
-
A route that crosses the 180th meridian is drawn where it is. A file whose
positions run east past 180° and continue as negative longitudes was drawn as
a line straight back across every other continent, with its arrows pointing
the wrong way and its start and end markers pushed to opposite screen edges —
and the camera fitted the whole globe, because a 166 km track off Fiji was
measured as 359° wide. Such a route now draws as the one short path it is, and
automatic framing covers the route rather than the planet. The figures under an
inline map never had this problem and are unchanged. -
A coordinate read from a map panned across that meridian is in range.
Copy coordinates, New note here, and the external-map links took the
longitude the camera had counted past 180°, so a place a note should record as
-179.5was handed over as180.5. All three now give the ordinary value.
This was reachable before by panning; the framing fix above makes the camera go
there on its own, so it is fixed alongside.
Changed
- A KML polygon now draws as an area rather than an outline. Its
<outerBoundaryIs>becomes the region and each<innerBoundaryIs>becomes a
hole, where before every ring was read as a separate line and a hole was
indistinguishable from a boundary. A ring left open by its writer is closed; a
<LinearRing>that no polygon declares as a boundary keeps being read as a
line.
1.13.6
Added
-
Reading a photo is now remembered between sessions. What came out of a
photo — its coordinate, altitude, the moment, the datum its tags stated,
orientation, and whether it has a thumbnail — is kept in one file beside the
plugin's settings, so opening the vault again draws the same pins without
opening the photos. On a base of 12,107 photos that is 12,107 file reads and
about 8.5 seconds on every start, down to 20 reads and 1.2 seconds, with the
same 6,504 points and the same thumbnails on screen. Photos found to carry no
GPS are remembered as such rather than re-read to re-learn it every time —
5,603 of that base, or nearly half of it.The thumbnail images themselves are not stored; they are read on demand for
the handful of photos the map is actually displaying, so the file stays small
whatever size the album is. Because the raw tag values are kept rather than the
converted result, changing Photo coordinate system now moves every point
without reopening a single photo.An entry is used only while its file still reports the same path, size and
time, so an edited, renamed or deleted photo is never drawn from it. The file
is a cache and nothing else: Clear the photo index in settings throws it
away, deleting it by hand does the same, and either way every map goes on
showing exactly what it showed.
Fixed
-
A map of thousands of photos no longer reads them all at once. A base
whose results are photo files made the number of files being read at one time
follow the size of the result — twelve thousand concurrent reads where the
code was written for a few hundred. Reads are now bounded, and a refresh that
has been superseded stops starting new ones instead of draining its queue. -
A map with nothing on it no longer raises an error from the built-in Maps
view. Its marker manager reports empty bounds as a real object rather than
as nothing, which the built-in view then treats as a real extent; at large
result counts this surfaced as errors in the console. Advanced Maps now hands
it the shape it already handles.
1.13.5
Fixed
-
Pointing at a track or photo no longer rebuilds its popup on every pointer
sample. Each pointer position was rebuilding the note popup once per
overlapping layer, for the feature that was already showing — measured at 508
rebuilds and 1.9 seconds of work for one sweep along a single track, about 90%
of everything that pointer movement cost. The popup is now raised once when
the pointer reaches a feature and left alone until it reaches another: the
same sweep costs 9 rebuilds and 44 ms, and each pointer sample went from
5.2 ms to 0.4 ms. As part of this the popup stays where the pointer entered a
track instead of sliding along under the cursor, which is what a marker's own
popup has always done. -
A photo lying on its own track now names the photo on hover, not the
track. Clicking there already gave photos precedence; pointing did not, so
the two could disagree about what was under the cursor.
1.13.4
Fixed
-
Reloading the plugin no longer leaves every map unenhanced until Obsidian
restarts. Advanced Maps marked the map registration it wrapped with a flag
that could not tell its own wrapper from one a previous, already-unloaded copy
of the plugin had left behind — so after a reload, especially alongside
another plugin that wraps the same registration, it concluded its work was
already done and did nothing at all: no tracks, no pin spreading, no controls,
and no message saying so. A wrapper now says which instance installed it and
what it replaced, so a fresh instance takes the registration back, and a
wrapper it cannot remove stops acting. -
Photo thumbnails switched off no longer decode or hold memory. Turning the
setting off only hid the layer; a large album still decoded and kept tens of
megabytes of images for something that drew nothing. They are now released
when the setting goes off and decoded again when it comes back on. -
Adding a photo to a note updates that note's inline map. Only the base map
noticed; the inline map kept the album it was built with until the note was
reopened. Edits that do not change which photos a note points at still cost
nothing. -
A background or theme change redraws an inline map exactly once, and no
longer draws over a refresh that is still reading its files. -
The elevation profile is scaled to the route it draws. A single waypoint
with an elevation far off the route — a summit marker, a 0 m default — was
counted in the chart's range and flattened the whole profile. -
One backwards timestamp no longer discards the distance before it. In a
merged export, the ground covered leading up to an out-of-order point was
dropped instead of counting toward the next interval, which could report a
walk as barely moving. -
A group of exactly fifteen pins at one spot stays on one ring instead of
pushing its last pin onto a ring of its own for no reason. -
A pasted link is attributed to Google only when its host really is a Google
domain.google.evil.exampleandmaps.google.com.attacker.tldwere parsed
with Google's axis order and datum. -
Renaming a note while it is being stamped with your location no longer
leaves it permanently ineligible for automatic filling. -
A failed note write after choosing a search result is reported. It
previously showed the success notice and lost the error. -
The auto-fill setting's description keeps up with the coordinate property
name while the settings pane is open.
1.13.3
Fixed
-
Pins that share a spot now fan apart at zoom 15, where the setting has
always said they would. The offset is baked into the map's tiles once per
zoom level rather than evaluated as the camera moves, so the fan opened a
level late and grew in steps the hover card knew nothing about — a card could
sit as much as 16 px from the pin it belonged to. The ring now opens at the
zoom it names, widens once per level, and the card is placed at the offset the
pin was actually drawn with. -
An inline map no longer jumps back to its own route whenever anything
refreshes. Editing any track file in the vault, or changing a setting,
reframed every open inline map — including maps in notes with nothing to do
with the file that changed. An inline map is now framed once per route it
draws, and never after you have moved it yourself. -
KML files that write
lon, latwith a space after the comma now draw.
Every coordinate in such a file was discarded and the whole track reported as
having no drawable geometry.
1.13.2
Fixed
-
Maps that were already open when Advanced Maps loaded now adopt the
enhancement exactly once. A native initialization already in flight is
observed rather than started again; disabling or closing the view while it
finishes cannot install late controls or layers; and a surviving GCJ-02 or
BD-09 map is not shifted a second time when the plugin reloads. -
An inline map that finishes initializing after its embed has gone away is
now destroyed. The late native view can no longer leave a detached WebGL
context, listeners or drawing work behind after a note closes. -
A photo wins a click where its thumbnail and a track overlap. The photo
opens once even when both its thumbnail and fallback dot receive the event,
while modifier-click still opens the image file directly. Disabling or
reloading the plugin also removes its decoded thumbnail images from a native
map that stays alive. -
HEIC, HEIF and AVIF photos now follow the standard Exif item offset. The
offset points directly to the TIFF header, including when padding makes it
non-zero; the bounded legacyExif\0\0layout remains supported.
1.13.1
Fixed
-
A map you started following with its own button answered a click on a pin by
replacing itself with the note. Following opens notes in the pane the map is
following, and that pane was only ever recorded when following was already on
as a note opened — so a map switched on by its crosshair button, which is the
ordinary way in, had none to open into and fell back to "the active leaf": its
own, because clicking a map is what makes it active. The button now looks the
pane up from the note itself, and skips the map's own pane so an embedded base
cannot replace the note it is drawn inside either. -
Clearing "Skip paths containing" meant "exclude nothing" rather than the
templatesits greyed placeholder shows. With location filling on, that
stamped every template note opened afterwards with the device's real position —
the one thing the field is there to prevent. A cleared box now means what the
placeholder says, the same way the coordinate property and the default track
colour already did. A value you type is stored exactly as typed. -
An inline map went blank, and said nothing, when its track file stopped
parsing under it. A sync client or an editor halfway through rewriting a
.gpxwas enough: the track, the statistics bar and the elevation profile all
went, leaving bare tiles with no message and no way to tell that from an empty
file. The map and the last track it drew now stay put, with the reason
underneath them — and the moment the file parses again, the map picks it up and
the message goes.