Busabase
Busabase is an open-source (MIT) database and workspace for AI agents — data, docs, skills, and apps in one place. Run it locally, self-host it inside your network, or use Busabase Cloud, and turn age
翻訳待ち
No updates detected yet. GitHub releases will appear here.
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗Turns the City of Guelph Trees inventory -- the street and park trees the City owns or shares on a property line, 42,712 on 2026-10-09 -- into map-tile layers that OpenStreetMap mappers can add to the JOSM and iD editors as a reference overlay, plus a gap page showing where OSM has no trees at all and which mapped trees lack the species and girth the City records.
Live layer and how to add it: https://guelph-maps.github.io/guelph-trees-layer/
Part of the guelph-maps organisation. It is a
clone of guelph-bus-stops-layer
(live): the same
download -> slim -> compare -> vector -> raster -> site -> publish pipeline,
the same ArcGIS service, the same Overpass, link-gate and publish rules. What
differs follows from the scale and from what a tree carries:
Why build it at all: the import audit
found OSM's ~50,000 Guelph trees are almost all one mapper's hand-tracing of
bare natural=tree -- genus on 3, species on 12 -- and that only 19% of the
City's trees have an OSM tree within 5 m. Half the city has none.
/gaps/): a map of 250 m cells and a table of them,
drilling into one cell's trees, and its history page
(/gaps/history.html) charting the counts, one point per weekly run. Each
cell links to JOSM for its square, and each tree to openstreetmap.org,
iD and JOSM (needs JOSM running with Preferences → Remote Control
enabled).| Key | Example | Is it an OSM tag? |
|---|---|---|
genus | Quercus | yes |
species | Quercus rubra, Platanus x acerifolia | yes |
circumference | 0.94 | yes -- metres, DBH × π / 100 |
common_name | Red Oak | no -- often a cultivar's name ("Green Mountain Maple" is a sugar maple), so not species:en |
dbh_cm | 30 | no -- the City's trunk diameter, cm |
planted | 2014 | no |
owner | city, boundary | no |
address | 133 Clairfields Dr W | no -- the City's nearest address |
city_asset_id | FT10001 | no -- the City's inventory number. It is not on the tree, so it is not a ref |
objectid | 1 | no -- the ArcGIS row, for finding it again |
Names are converted once, in slim.taxon: capitals to OSM's case, hybrids
with a plain x (Platanus x acerifolia is on ~21,000 OSM trees, the ×
form on none), varieties back to their species, and "MALUS SPECIES" or a
quoted cultivar to the genus alone. Three City names cannot be right and are
corrected: RHAMUS and GYMNOCLADUS DIOCUS are misspellings, and the 31
CONIUM MACULATUM rows -- poison hemlock, a herb -- are called "HEMLOCK",
the eastern hemlock's name, so they get genus=Tsuga and no species. A DBH
over 300 cm (one row says 879) gets no circumference.
A word on copying. Individual-tree imports are contested in OSM, and copying species or girth off this overlay is, in effect, an attribute import. The City licence is compatible (below), but compatible is not consensus. The layer is a reference: add a tree you can see on imagery, a species you have verified. The landing page and the gap page both say so.
Overpass is asked for every natural=tree node in the city (nodes only -- a
tree mapped as an area is a wood). Each City tree is matched to an OSM tree
nearest-first and one-to-one within 5 m (MATCH_M): every pair within
5 m is sorted by distance and taken unless one side is spoken for. Street
trees stand 8-10 m apart, often closer, so "nearest OSM tree for each City
tree" would hand one node to two trees. The recalibration measured the gap at
3, 5 and 10 m and it barely moves; the radius is not doing the work.
Then the city is cut into 250 m cells (CELL_M), counted from the bounding
box's south-west corner:
| Cell status | Meaning |
|---|---|
empty_cell | ≥ 10 City trees (CELL_MIN_CITY) and no OSM tree at all |
thin_cell | ≥ 10 City trees, some OSM trees, but under half (THIN_SHARE) of the City's have one within 5 m |
covered | the rest with ≥ 10 City trees |
sparse | fewer than 10 City trees (off by default) |
thin_cell is decided by the matched share, not the counts. OSM's trees
include woodlots and back yards the City does not inventory, and a cell's
counts can agree while its trees do not -- the trap the audit's first tree
review fell into.
Inside a cell, per tree:
| Tree status | Meaning |
|---|---|
missing | no OSM tree within 5 m |
nospecies | matched, but the OSM tree has no genus, species or taxon, and the City knows the genus |
nogirth | matched, but the OSM tree has no circumference, and the City has a DBH |
A matched tree can need both. There is no osm_only: the 40,000-odd OSM
trees with no City tree beside them are woodlots, private land and campus, not
mistakes.
The page loads cells.geojson (~900 squares) on open and trees.json (the
per-tree rows, ~5 MB) only on the first drill-down, so it never draws 42,000
markers.
This is the beginning of the README. Read the rest at the original. Read the full README ↗