Query the China Historical GIS (CHGIS) Temporal Gazetteer (TGAZ) API to search for historical Chinese placenames from 222 BCE to 1911 CE. Use this skill when searching for information about historical Chinese places, administrative units, or geographic locations during the dynastic period. Applicable for queries about historical place names, administrative hierarchies, or when users mention specific Chinese locations with historical context.
Query the China Historical GIS Temporal Gazetteer for historical placenames and administrative units (222 BCE–1911 CE).
The correct domain is chgis.hudci.org — the old maps.cga.harvard.edu is defunct. Do not use it.
ID lookups use a URL path format, NOT query params:
✅ https://chgis.hudci.org/tgaz/placename/json/hvd_32180
❌ https://chgis.hudci.org/tgaz/placename?id=hvd_32180&fmt=json
The ?fmt=json parameter only works for the faceted search endpoint.
TGAZ IDs use the hvd_ prefix: CHGIS ID 32180 → TGAZ ID hvd_32180.
The ipar (parent) search parameter is unreliable. For hierarchical queries (e.g., "find all counties in Zhejiang"), use the canonical record drill-down approach instead: look up the parent record by ID and read its subordinate units.
Some names use older romanizations, not modern pinyin. For example, Ningbo is stored as "Ningpo". If a search returns no results, try alternative romanizations.
Search uses prefix matching: n=beijing matches 北京路, 北京行省, 北井县, etc. Short terms return more results.
Use scripts/tgaz_api.py for programmatic access (zero dependencies):
from scripts.tgaz_api import TGAZAPI
api = TGAZAPI()
# Faceted search
results = api.search("suzhou", year=1820)
results = api.search("北京", feature_type="fu")
# ID lookup (correct URL format handled automatically)
record = api.get_by_id("hvd_32180")
# Extract structured data
name = api.get_name(record) # Chinese name
transcription = api.get_transcription(record) # Romanized
begin, end = api.get_temporal_span(record) # Year range
modern = api.get_modern_location(record) # Present-day equivalent
ftype = api.get_feature_type(record) # Administrative type
subs = api.get_subordinates(record) # Child units (reliable!)
# Formatted summary
print(api.summarize(record))
Faceted search: