Axismundi Geodata is the data layer that lets posts and attachments carry a
location, and lets the editor, map blocks, and federation serializers read it
back through one shared model. It registers:
axismundi_geo_area — a hierarchical taxonomy for address / administrative
containment (대한민국 > 부산광역시 > 수영구 > 광안동). Answers "where is it?".
axismundi_geotag — a flat taxonomy for place / content geo tags (광안리해수욕장,
광안대교). Answers "what place is it about?".
- Coordinate meta on posts, pages, and attachments — the observation /
capture point, using the WordPress-convention
geo_latitude, geo_longitude,
geo_public keys plus ax_geo_* extensions.
- Place-fact term meta — centroid, display bounds / zoom, and external place id on
each geo taxonomy term.
The taxonomy identifiers are plugin-prefixed to avoid conflicts with other
plugins. Their public permalink bases remain
/geo-area/ and
/geotag/.
Privacy is built into the model. The raw exact coordinate is stored, while
geo_public decides whether an attachment coordinate may leave the site.
Callers ask the plugin for the public coordinate rather than reading raw meta.
Attachments get a
Location (GPS) editor on the Edit Media screen: latitude,
longitude, altitude, and a public toggle, plus an on-demand
Import from EXIF
button that reads the original file's GPS, and a Leaflet mini map with a draggable
marker (configure a tile provider under Settings → Geodata). Nothing is
auto-imported or auto-published — the public toggle defaults off.
Posts and pages express location through the Geo Area / Geotag taxonomies. The
separate Axismundi Map plugin consumes this data for front-end place, media,
track, and geo-archive maps. Attachments carry coordinate meta only — they are
never auto-tagged with place terms. A future ax_note post type can opt into the
geo taxonomies through the
axismundi_geodata_object_types filter.
Both public taxonomies include plugin-owned block templates for their archive
pages. They retain the tonal archive header, current-term map, inherited card
feed, and geo navigation sidebar previously supplied by the Axismundi theme.
Themes and site owners can still override them through the normal template
hierarchy. The map remains optional; without Axismundi Map the archive feed and
navigation continue to render.
The theme does not hard-code Geo taxonomy blocks. Insert the plugin-provided
Post geo terms pattern where a post template should expose its areas and
places.
A demo place hierarchy (대한민국 > 부산광역시 > 수영구 > 광안동, with the
광안리해수욕장 geotag) ships with the plugin but is created only on request — it
is never seeded automatically. Run
wp axismundi-geodata seed-demo to add it and
wp axismundi-geodata seed-demo --remove to drop it.
Term editors can optionally look up a place from an external provider and bind it.
Providers are configured under Settings → Geodata and are off by default: Google
Places needs a server-side API key, and OpenStreetMap (Nominatim) is enabled by
choosing the public service (low-volume admin lookup only) or a custom endpoint.
Keys and endpoints are used only from admin AJAX and are never sent to the
browser. Selecting a candidate binds the term to a namespaced id —
google:<place_id> or
osm:node/<id> /
osm:way/<id> — and stores the returned
coordinates, address, and place type.
For self-hosted maps, upload a
.pmtiles map pack under Media. The plugin reads
its tile format, schema, bounds, zoom, and attribution into editable attachment
fields, and a Protomaps map pack can be chosen as the admin preview basemap under
Settings → Geodata. Front-end provider settings are enabled when Axismundi Map is
active. The plugin never bundles or generates tile data.
GPX and KML uploads are recognised as GPS tracks and exposed as GeoJSON through
the REST API. Geotags and public GPS media are also available as GeoJSON for map
clients. The controlled geotag place-type vocabulary uses Google Places tokens as
its baseline plus reviewed local extensions with explicit Google fallbacks.
WordPress RSS 2.0 and Atom feeds are extended with GeoRSS Simple when location
data is available. A post with one coordinate-bearing geotag emits a point;
multiple geotags emit their bounding box; posts without geotags remain ordinary
feed items. Geo taxonomy feeds also describe the current term at feed level. The
serializer uses public geotag facts only and never exposes post or attachment GPS
meta. A server-side adapter uses WordPress
fetch_feed() / SimplePie to convert
external GeoRSS and W3C Geo feeds into GeoJSON for map clients.