Python helps visualise mysteries of Japanese Kofun burial mounds

happygeek 1 Tallied Votes 495 Views Share

There are precious few archaeologists in Japan, and only a handful who produce their own software programs to analyze geographic information. One who does is Professor Izumi Niiro of the Okayama University. A convert from Perl, Professor Niiro now uses Python to perform data analysis via the Geographic Resources Analysis Support System (GRASS) in order to accurately survey the Japanese burial grounds known as Kofun that were built between the third and seventh centuries.

The largest Kofun site in the Okayama Prefecture in Japan is also the fourth largest in the whole of Japan. The 'Tsukuriyama Kofun' is the burial burial mound of the king of the Kibi and was completed in the fifth century. Consisting of a main burial mound and six smaller structures, Professor Niiro explains that "our analysis shows that it was built using very precise procedures using Chinese 'shaku' units of length" (one shaku is 232mm).

"I first became aware of geographic information systems during a sabbatical at Southampton University in 1991," explains Professor Niiro. "I decided to experiment with this technology for archaeological surveying when I returned to Japan. It enables me to visualize and analyze many types of geographical information such as topographic details of maps." He also uses the same systems in order to visualise objects such as a bronze mirror from the early Kofun period in the third century. Using Python, Professor Niiro says he "wrote my own software to visualize the surface of the mirror based on 3D scan information. Our results clearly show a triangular-rimmed mirror that is decorated with deities and beasts."

Professor Niiro is also turning his attention to the effects that disasters have culturally. "Volcano eruptions have had tremendous effects on the environment and human culture" he explains "in particular the sixth century saw unprecedented changes in the environment". Rice was stored in Northern Kyushu in order to assist the people of Korea, and the Kofun Period itself came to an end in 600 AD "probably due to climate change" according to the professor who adds "the recent massive earthquake and tsunami in Tohoku has led to a rise in disaster archaeology".

Dani AI

Generated

A compact, practical follow‑up to the thread: for anyone looking to reproduce or extend the kinds of archaeological GIS and 3D work mentioned above, the most useful thing is a clear, reproducible pipeline and a few defensive habits. As noted, Python is now a central glue language for GIS + 3D processing; below are concrete steps, a short snippet, and common pitfalls to avoid.

Common toolchain and workflow (high level): ingest spatial data (DEM, photogrammetry/LiDAR point cloud, vector features); lock a consistent CRS and linear units; preprocess (denoise, decimate, fill sinks for DEMs); derive rasters (slope, aspect, curvature, hillshade, viewshed); reconstruct meshes from point clouds (normal estimation → surface reconstruction → simplify/texturize); and archive results with metadata and reproducible scripts (environment file + processing script). Typical Python libraries: GDAL/rasterio, geopandas/shapely, pyproj, PDAL/laspy for point clouds, Open3D/trimesh/meshio for meshes, plus GRASS when you need scalable raster/vector tools and built‑in analyses.

Minimal example (compute hillshade from a DEM with rasterio + numpy):

import rasterio
import numpy as np

with rasterio.open('dem.tif') as src:
    dem = src.read(1, masked=True)
    xres = src.transform.a
    yres = -src.transform.e

dx, dy = np.gradient(dem, xres, yres)
slope = np.arctan(np.sqrt(dx*dx + dy*dy))
aspect = np.arctan2(-dx, dy)
az = np.deg2rad(315.0); alt = np.deg2rad(45.0)
hillshade = (np.sin(alt)*np.cos(slope) + np.cos(alt)*np.sin(slope)*np.cos(az - aspect))

Troubleshooting notes: always record CRS and vertical datum; unit mismatches (meters vs local units) are a frequent source of scale errors; point clouds often need outlier removal and decimation before reconstruction; use VRTs/tiling or GRASS region settings for very large rasters to avoid memory exhaustion. Capture provenance: input filenames, versions of libraries/GRASS, processing order, and any parameters used—this makes results inspectable years later and supports archaeological claims.

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.