hole to the planned depth • Collect soil and rock samples at different depths • Record each layer, SPT N-values, and groundwater • One hole = one record — a “borehole log” Photos (both in Japan) — rig: Norisa1, CC BY 2.0, Flickr / cores: 橄欖岩, CC BY-SA 3.0, Wikimedia Commons
KuniJiban: location on a map, depth in a 2D chart GSJ: inferred regional 3D geological models Source: KuniJiban (PWRI / MLIT Japan) Source: Urban Geological Map (GSJ, AIST) The goal: put the original observations back into 3D Nationwide and interactive, with no inference between boreholes
Rails + PostGIS + bounding-box API • Every camera move triggered a query and data transfer • Nationwide browsing became slow; servers stayed online • Lesson: pre-compute and serve static tiles BED XML → Rails parser → PostGIS → Web API (bbox query) → CesiumJS
XML KuniJiban data 1.10–4.00 → Step 1 boring-rs (open-source, Rust) → Step 2 3D Tiles generator OGC 3D Tiles 1.1 Static files only — on object storage, no server to run → Step 3 WebGIS viewer CesiumJS + Resium
to reuse • KuniJiban data: six versions (1.10 – 4.00) • DTD defines structure, but not scalar types • Types, units, and code meanings live in PDF specifications • Japan's national datums across eras: Tokyo / JGD2000 / JGD2011 • Shift-JIS in legacy files • Ver 2.10 alone is 55% of all files — legacy support is mandatory Dataset: 1.10–4.00 | Latest specification: 5.00 (not in KuniJiban yet) | JGD = Japanese Geodetic Datum
Handles all six versions in current KuniJiban (1.10–4.00) • Version-specific structures; source values remain strings • Shift-JIS decoding and coordinate conversion to WGS84 use boring_parser::{coordinate::GeoCoordinate, parser::Parse}; use boring_parser::boring_structs_400::Boring400; let boring = Boring400::parse_from_str(&xml)?; let (lon, lat) = boring.geo_location().to_wgs84(&transformer)?;
• Earthquakes permanently shift coordinates — several meters in Tohoku 2011 • GSI publishes PatchJGD correction grids for each major earthquake • boring-rs applies them based on the survey date: • surveyed before the quake → apply correction / after → already shifted • Covers 7 earthquakes: Tokachi 2003 → Kumamoto 2016
standard for streaming massive 3D geodata • LOD is built into the spec — no custom protocol needed • Static files only → object storage + CDN, no database, no API server • Native support in CesiumJS
feature ID per geological layer • EXT_structural_metadata: PropertyTable with name, depth, soil type… • Click a layer → properties, entirely client-side PropertyTable lookup in the browser — no server round-trip
geospatial data is one of five strategic pillars • The first step is structured, machine-readable data • AI needs CRS, time, source, quality, update history, and terms of use • Data infrastructure determines what GeoAI can do Source: GeoAI Study Group interim report, Cabinet Secretariat and MLIT Japan, May 2026
BED XML 4.00 JGD2011 → 2026 BED XML 5.00 JGD2024 = code 03 Current KuniJiban files stop at 4.00; 5.00 is the latest specification JGD2024 is Japan's current national datum; five required fields became optional Backward compatibility should guide progress. It should not prevent progress. Source: MLIT, Geological and Soil Survey Deliverables Specification R8.2
the existing DTD • Define scalar types, units, and code lists • Provide open converters and conformance tests • DTD 5.00 <!ELEMENT 測地系 (#PCDATA)> R8.2 specification 03 = JGD2024 Keep every legacy DTD valid A human can connect these. A machine sees only text.
197,000 boreholes as downloadable 3D Tiles • Host on object storage, an intranet, or fully offline • boring-rs is open source; the tiles use open standards • soil-stack.groovyjovy.dev/download