{"id":11670,"date":"2026-07-26T16:06:15","date_gmt":"2026-07-26T08:06:15","guid":{"rendered":"https:\/\/aeosub.com\/axismundi-geodata\/"},"modified":"2026-07-26T16:06:15","modified_gmt":"2026-07-26T08:06:15","slug":"axismundi-geodata","status":"publish","type":"post","link":"https:\/\/aeosub.com\/zh\/axismundi-geodata\/","title":{"rendered":"Axismundi Geodata"},"content":{"rendered":"<div class=\"plugin-expert-review\" style=\"border: 1px solid #e2e8f0;border-left: 4px solid #4a3bca;border-radius: 10px;padding: 20px;margin-bottom: 25px;background: #fff;font-family: -apple-system, system-ui, sans-serif\">\n<div style=\"font-weight: bold;font-size: 1.1em;color: #4a3bca;margin-bottom: 10px\">LethaldiranMX Insight<\/div>\n<div style=\"color: #4a5568;font-size: 14px;line-height: 1.6\">\n<div>\n<p>Axismundi Geodata establishes a highly structured, privacy-first spatial data layer for WordPress, effectively decoupling geographic metadata from frontend presentation. By registering dedicated hierarchical and flat taxonomies alongside standardized coordinate meta, it solves the common fragmentation issue where multiple plugins write conflicting location schemas. The inclusion of a robust privacy model\u2014where raw coordinates are decoupled from public REST exposure by default\u2014makes it an exceptionally secure foundation for directory sites, travel blogs, and federated content networks. Its developer-friendly architecture, featuring filter-driven post-type registration and clean API endpoints, positions it as a reliable infrastructure choice for complex geospatial implementations.<\/p>\n<p><strong>Best Fit &amp; Operational Role:<\/strong> This plugin is an ideal fit for enterprise publishers, travel platforms, and multisite networks that require a centralized, standardized geo-spatial registry without being locked into a monolithic mapping suite. It functions as the foundational data engine in a decoupled WordPress stack, allowing developers to safely store location data (including EXIF-imported GPS coordinates) and expose it via REST to headless frontends or companion plugins like Axismundi Map. By enforcing strict separation between administrative containment (hierarchical) and topical place tagging (flat), it solves the operational headache of managing complex location hierarchies while maintaining clean, queryable database structures.<\/p>\n<p><strong>Potential Limitations &amp; Pitfalls:<\/strong> While the architecture is highly optimized, operations teams should note that rendering Leaflet mini-maps in the admin panel and processing EXIF metadata on media uploads can introduce minor client-side and server-side overhead during bulk media ingestion. Additionally, because the plugin acts strictly as a data store and relies on external tile providers (configured via Settings) and companion plugins for frontend map rendering, teams must budget for additional configuration and potential third-party API costs. No security vulnerabilities or critical performance bottlenecks were identified based on available information.<\/p>\n<\/div>\n<\/div><\/div>\n<div class=\"plugin-info-card\" style=\"border: 1px solid #e2e8f0;border-radius: 10px;overflow: hidden;margin-bottom: 30px;font-family: -apple-system, system-ui, sans-serif;background: #fff\">\n<div style=\"padding: 20px;border-bottom: 1px solid #edf2f7;background: #fafafa;display: flex;align-items: flex-start\">\n                <img decoding=\"async\" src=\"https:\/\/s.w.org\/plugins\/geopattern-icon\/axismundi-geodata.svg\" alt=\"Axismundi Geodata icon\" loading=\"lazy\" style=\"width: 45px;height: 45px;border-radius: 8px;margin-right: 15px\"> <\/p>\n<div style=\"flex: 1;line-height: 1.2\">\n<div style=\"font-weight: bold;font-size: 1.1em;color: #1a202c\">Plugin Specification<\/div>\n<p>                    <small style=\"color: #718096\">WordPress.org Official Data<\/small>\n                <\/div>\n<\/p><\/div>\n<table style=\"width: 100%;border-collapse: collapse;font-size: 14px\">\n<tr style=\"border-bottom: 1px solid #edf2f7\">\n<th style=\"padding: 12px 20px;text-align: left;width: 35%;color: #4a5568;background: #fcfcfc\">Developer<\/th>\n<td style=\"padding: 12px 20px;font-weight: 500\"><a href=\"https:\/\/profiles.wordpress.org\/kimjiwoon\/\" target=\"_blank\" rel=\"noopener\">Jiwoon Kim<\/a><\/td>\n<\/tr>\n<tr style=\"border-bottom: 1px solid #edf2f7\">\n<th style=\"padding: 12px 20px;text-align: left;color: #4a5568;background: #fcfcfc\">Version<\/th>\n<td style=\"padding: 12px 20px\">v0.2.3<\/td>\n<\/tr>\n<tr style=\"border-bottom: 1px solid #edf2f7\">\n<th style=\"padding: 12px 20px;text-align: left;color: #4a5568;background: #fcfcfc\">Active Installs<\/th>\n<td style=\"padding: 12px 20px\">0 +<\/td>\n<\/tr>\n<tr style=\"border-bottom: 1px solid #edf2f7\">\n<th style=\"padding: 12px 20px;text-align: left;color: #4a5568;background: #fcfcfc\">Requires \/ Tested<\/th>\n<td style=\"padding: 12px 20px\">6.7 \/ 7.0.2<\/td>\n<\/tr>\n<tr style=\"border-bottom: 1px solid #edf2f7\">\n<th style=\"padding: 12px 20px;text-align: left;color: #4a5568;background: #fcfcfc\">Last Updated<\/th>\n<td style=\"padding: 12px 20px\">2026-07-26 8:04am GMT<\/td>\n<\/tr>\n<tr>\n<th style=\"padding: 12px 20px;text-align: left;color: #4a5568;background: #fcfcfc\">Official Link<\/th>\n<td style=\"padding: 12px 20px\"><a href=\"https:\/\/wordpress.org\/plugins\/axismundi-geodata\/\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"text-decoration: none;color: #4a3bca;font-weight: bold\">View Details -&gt;<\/a><\/td>\n<\/tr>\n<\/table><\/div>\n<div class=\"plugin-short-desc\" style=\"margin: 20px 0;padding: 12px 15px;background: #f9fafb;border-left: 4px solid #4a3bca;border-radius: 6px;font-style: italic;color: #4a5568\">Canonical geo store for Axismundi: place taxonomies and privacy-aware coordinate metadata, exposed over REST.<\/div>\n<p>Axismundi Geodata is the data layer that lets posts and attachments carry a<br \/>\nlocation, and lets the editor, map blocks, and federation serializers read it<br \/>\nback through one shared model. It registers:<\/p>\n<ul>\n<li><strong><code>axismundi_geo_area<\/code><\/strong> \u2014 a hierarchical taxonomy for address \/ administrative<br \/>\ncontainment (\ub300\ud55c\ubbfc\uad6d &gt; \ubd80\uc0b0\uad11\uc5ed\uc2dc &gt; \uc218\uc601\uad6c &gt; \uad11\uc548\ub3d9). Answers &#8220;where is it?&#8221;.<\/li>\n<li><strong><code>axismundi_geotag<\/code><\/strong> \u2014 a flat taxonomy for place \/ content geo tags (\uad11\uc548\ub9ac\ud574\uc218\uc695\uc7a5,<br \/>\n\uad11\uc548\ub300\uad50). Answers &#8220;what place is it about?&#8221;.<\/li>\n<li><strong>Coordinate meta<\/strong> on posts, pages, and attachments \u2014 the observation \/<br \/>\ncapture point, using the WordPress-convention <code>geo_latitude<\/code>, <code>geo_longitude<\/code>,<br \/>\n  geo_public keys plus <code>ax_geo_*<\/code> extensions.<\/li>\n<li><strong>Place-fact term meta<\/strong> \u2014 centroid, display bounds \/ zoom, and external place id on<br \/>\neach geo taxonomy term.<\/li>\n<\/ul>\n<p>The taxonomy identifiers are plugin-prefixed to avoid conflicts with other<br \/>\nplugins. Their public permalink bases remain <code>\/geo-area\/<\/code> and <code>\/geotag\/<\/code>.<\/p>\n<p>Privacy is built into the model. The raw exact coordinate is stored, while<br \/>\n    geo_public decides whether an attachment coordinate may leave the site.<br \/>\nCallers ask the plugin for the public coordinate rather than reading raw meta.<\/p>\n<p>Attachments get a <strong>Location (GPS)<\/strong> editor on the Edit Media screen: latitude,<br \/>\nlongitude, altitude, and a public toggle, plus an on-demand <strong>Import from EXIF<\/strong><br \/>\nbutton that reads the original file&#8217;s GPS, and a Leaflet mini map with a draggable<br \/>\nmarker (configure a tile provider under Settings <span aria-hidden=\"true\" class=\"wp-exclude-emoji\">\u2192<\/span> Geodata). Nothing is<br \/>\nauto-imported or auto-published \u2014 the public toggle defaults off.<\/p>\n<p>Posts and pages express location through the Geo Area \/ Geotag taxonomies. The<br \/>\nseparate Axismundi Map plugin consumes this data for front-end place, media,<br \/>\ntrack, and geo-archive maps. Attachments carry coordinate meta only \u2014 they are<br \/>\nnever auto-tagged with place terms. A future ax_note post type can opt into the<br \/>\ngeo taxonomies through the <code>axismundi_geodata_object_types<\/code> filter.<\/p>\n<p>Both public taxonomies include plugin-owned block templates for their archive<br \/>\npages. They retain the tonal archive header, current-term map, inherited card<br \/>\nfeed, and geo navigation sidebar previously supplied by the Axismundi theme.<br \/>\nThemes and site owners can still override them through the normal template<br \/>\nhierarchy. The map remains optional; without Axismundi Map the archive feed and<br \/>\nnavigation continue to render.<\/p>\n<p>The theme does not hard-code Geo taxonomy blocks. Insert the plugin-provided<br \/>\n<strong>Post geo terms<\/strong> pattern where a post template should expose its areas and<br \/>\nplaces.<\/p>\n<p>A demo place hierarchy (\ub300\ud55c\ubbfc\uad6d &gt; \ubd80\uc0b0\uad11\uc5ed\uc2dc &gt; \uc218\uc601\uad6c &gt; \uad11\uc548\ub3d9, with the<br \/>\n\uad11\uc548\ub9ac\ud574\uc218\uc695\uc7a5 geotag) ships with the plugin but is created only on request \u2014 it<br \/>\nis never seeded automatically. Run <code>wp axismundi-geodata seed-demo<\/code> to add it and<br \/>\n    wp axismundi-geodata seed-demo &#8211;remove to drop it.<\/p>\n<p>Term editors can optionally look up a place from an external provider and bind it.<br \/>\nProviders are configured under Settings <span aria-hidden=\"true\" class=\"wp-exclude-emoji\">\u2192<\/span> Geodata and are off by default: Google<br \/>\nPlaces needs a server-side API key, and OpenStreetMap (Nominatim) is enabled by<br \/>\nchoosing the public service (low-volume admin lookup only) or a custom endpoint.<br \/>\nKeys and endpoints are used only from admin AJAX and are never sent to the<br \/>\nbrowser. Selecting a candidate binds the term to a namespaced id \u2014<br \/>\n    google: or <code>osm:node\/&lt;id&gt;<\/code> \/ <code>osm:way\/&lt;id&gt;<\/code> \u2014 and stores the returned<br \/>\ncoordinates, address, and place type.<\/p>\n<p>For self-hosted maps, upload a <code>.pmtiles<\/code> map pack under Media. The plugin reads<br \/>\nits tile format, schema, bounds, zoom, and attribution into editable attachment<br \/>\nfields, and a Protomaps map pack can be chosen as the admin preview basemap under<br \/>\nSettings <span aria-hidden=\"true\" class=\"wp-exclude-emoji\">\u2192<\/span> Geodata. Front-end provider settings are enabled when Axismundi Map is<br \/>\nactive. The plugin never bundles or generates tile data.<\/p>\n<p>GPX and KML uploads are recognised as GPS tracks and exposed as GeoJSON through<br \/>\nthe REST API. Geotags and public GPS media are also available as GeoJSON for map<br \/>\nclients. The controlled geotag place-type vocabulary uses Google Places tokens as<br \/>\nits baseline plus reviewed local extensions with explicit Google fallbacks.<\/p>\n<p>WordPress RSS 2.0 and Atom feeds are extended with GeoRSS Simple when location<br \/>\ndata is available. A post with one coordinate-bearing geotag emits a point;<br \/>\nmultiple geotags emit their bounding box; posts without geotags remain ordinary<br \/>\nfeed items. Geo taxonomy feeds also describe the current term at feed level. The<br \/>\nserializer uses public geotag facts only and never exposes post or attachment GPS<br \/>\nmeta. A server-side adapter uses WordPress <code>fetch_feed()<\/code> \/ SimplePie to convert<br \/>\nexternal GeoRSS and W3C Geo feeds into GeoJSON for map clients.<\/p>\n<h3>External services<\/h3>\n<p>All external services are optional. Choosing <strong>None<\/strong> for preview maps and not<br \/>\nconfiguring a lookup provider makes no external request.<\/p>\n<ul>\n<li><strong>Google Maps Platform<\/strong> is used only when an administrator configures a Google<br \/>\nAPI key and explicitly searches for or reverse-geocodes a place in the term<br \/>\neditor. The server sends the search text or clicked latitude\/longitude, selected<br \/>\nlanguage\/region, and the configured API key to Google. Google Maps Platform<br \/>\nTerms: https:\/\/cloud.google.com\/maps-platform\/terms\/ Privacy Policy:<br \/>\nhttps:\/\/policies.google.com\/privacy<\/li>\n<li><strong>OpenStreetMap Nominatim<\/strong> is used only when an administrator selects the<br \/>\npublic Nominatim provider or configures a custom Nominatim-compatible endpoint,<br \/>\nthen performs a place lookup. The server sends the search text or clicked<br \/>\nlatitude\/longitude to that endpoint. Public Nominatim usage policy:<br \/>\nhttps:\/\/operations.osmfoundation.org\/policies\/nominatim\/ OpenStreetMap privacy<br \/>\npolicy: https:\/\/wiki.osmfoundation.org\/wiki\/Privacy_Policy<\/li>\n<li><strong>Protomaps assets<\/strong> supply glyph and sprite files only when an administrator<br \/>\nselects a Protomaps PMTiles preview style. The administrator&#8217;s browser requests<br \/>\nthe selected glyph\/sprite URLs, which disclose the browser IP address and the<br \/>\nrequested map assets to Protomaps&#8217; GitHub Pages host. Protomaps legal terms:<br \/>\nhttps:\/\/protomaps.com\/legal GitHub privacy statement:<br \/>\nhttps:\/\/docs.github.com\/site-policy\/privacy-policies\/github-privacy-statement<\/li>\n<li><strong>MapTiler<\/strong> and <strong>Thunderforest<\/strong> are optional raster-tile providers selected<br \/>\nby the site administrator. When selected, the viewer&#8217;s browser requests map<br \/>\ntile coordinates and sends its IP address, referrer, and the provider key in<br \/>\nthe configured tile URL. MapTiler Terms: https:\/\/www.maptiler.com\/terms\/<br \/>\nPrivacy Policy: https:\/\/www.maptiler.com\/privacy-policy\/ Thunderforest Terms:<br \/>\nhttps:\/\/www.thunderforest.com\/terms\/ Privacy Policy:<br \/>\nhttps:\/\/www.thunderforest.com\/privacy\/<\/li>\n<li><strong>External GeoRSS\/W3C Geo feeds<\/strong> are fetched only when a site administrator<br \/>\nsupplies a feed URL to the server-side GeoRSS importer. The server sends the<br \/>\nconfigured feed URL request to that feed&#8217;s host. Its terms and privacy policy<br \/>\nare determined by the feed provider selected by the site administrator.<\/li>\n<\/ul>\n<h3>Third-party libraries<\/h3>\n<p>Bundled under assets\/vendor\/, each loaded only when the matching admin preview<br \/>\nprovider is active:<\/p>\n<ul>\n<li>Leaflet 1.9.4 (https:\/\/leafletjs.com\/, BSD-2-Clause) \u2014 raster tile previews.<\/li>\n<li>MapLibre GL JS 5.24.0 (https:\/\/maplibre.org\/, BSD-3-Clause), PMTiles 4.4.1<br \/>\n(https:\/\/github.com\/protomaps\/PMTiles, BSD-3-Clause), and @protomaps\/basemaps<br \/>\n5.7.2 (https:\/\/github.com\/protomaps\/basemaps, BSD-3-Clause) \u2014 PMTiles map-pack<br \/>\npreviews. Label fonts load from the public Protomaps assets host.<\/li>\n<\/ul>\n<h3>Map strategy<\/h3>\n<p>Uploaded PMTiles map packs self-host the tile data, but the Protomaps renderer may<br \/>\nload small glyph\/sprite assets from Protomaps&#8217; public host. Axismundi Map is a<br \/>\nseparate dependent plugin: Geo Data owns the facts, REST exports, providers, and<br \/>\nshared renderer assets; Map owns the public block and Query Map View. See<br \/>\ndocs\/map-strategy.md for the boundary.<\/p>\n<div class=\"plugin-editorial-note\" style=\"margin-top: 25px;padding: 12px 15px;background: #f8fafc;border-radius: 6px;color: #64748b;font-size: 13px;line-height: 1.5\">Editorial note: This overview combines WordPress.org official plugin metadata with an AI-assisted LethaldiranMX editorial review. Plugin data should be verified on the official WordPress.org listing before installation.<\/div>","protected":false},"excerpt":{"rendered":"<p>Canonical geo store for Axismundi: place taxonomies and privacy-aware coordinate metadata, exposed over REST.<\/p>","protected":false},"author":1,"featured_media":9317,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false,"footnotes":""},"categories":[252],"tags":[544,2912,2913,1085,2914,555],"class_list":["post-11670","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-trends","tag-geo","tag-geotag","tag-location","tag-rest-api","tag-taxonomy","tag-wordpress-plugin"],"_links":{"self":[{"href":"https:\/\/aeosub.com\/zh\/wp-json\/wp\/v2\/posts\/11670","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/aeosub.com\/zh\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/aeosub.com\/zh\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/aeosub.com\/zh\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/aeosub.com\/zh\/wp-json\/wp\/v2\/comments?post=11670"}],"version-history":[{"count":0,"href":"https:\/\/aeosub.com\/zh\/wp-json\/wp\/v2\/posts\/11670\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/aeosub.com\/zh\/wp-json\/wp\/v2\/media\/9317"}],"wp:attachment":[{"href":"https:\/\/aeosub.com\/zh\/wp-json\/wp\/v2\/media?parent=11670"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/aeosub.com\/zh\/wp-json\/wp\/v2\/categories?post=11670"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/aeosub.com\/zh\/wp-json\/wp\/v2\/tags?post=11670"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}