diff --git a/AGENTS.md b/AGENTS.md index 565c25e..63f8a35 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -90,7 +90,7 @@ In [docs/decisions.md](docs/decisions.md): - A path is walked once without drawing before it is walked for real - A country's postal codes and streets are siblings under its locality - A locale package imports its country's geo package, and its `Modules()` returns both -- The default embed holds every Swedish postort the import can place and give a street-delivery code and a street, and the US places of 25,000 or more +- The default embed holds every Swedish postort the import can place, a tenth of the US places owning a ZCTA drawn by population, and a tenth of each place's streets, at least ten - A locale's `address` binds its country's record once and prints it whole - A postort's kommun comes from its name, its tätort or its codes, never from distance - A highway designation is not a street, and a US postal code belongs to the place holding most of its land inside places diff --git a/CHANGELOG.md b/CHANGELOG.md index e85df03..eca5dc1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -93,7 +93,9 @@ replacement, and each removed path, column or flag. `address` record binding one locality and drawing its street and postal code inside it. `sv_SE.address` and `en_US.address` bind those records once, so `en_US.address.street` no longer carries `name` and `suffix`, and a locale's `address` - reads its country's `geo` module. + reads its country's `geo` module. Every Swedish postort ships, and a tenth of the US + incorporated places owning a ZCTA, drawn by population down to villages of a few + hundred people; each place carries a tenth of its streets, at least ten. - `{date(from,to,'layout')}` and `{time('layout')}`: a second between two days, or within one, in a single-quoted Go layout, drawn in UTC; `from` may equal `to`. `sv_SE.date`, `en_US.date`, `sv_SE.time` and `en_US.time` render through them, so diff --git a/README.md b/README.md index eeb85f5..c9f8400 100644 --- a/README.md +++ b/README.md @@ -311,9 +311,9 @@ neighbouring one. |-------|----------|----------|--------| | `region` | län, by code or name | state, by USPS abbreviation or name; `code` is the FIPS code | population | | `municipality` | kommun, by code or name | county, by FIPS code or name | population | -| `locality` | postort, by name; [`geo-se.py`](data-import/geo-se.py)'s `localities` picks the candidates, and one with no street is dropped | incorporated place of 25,000 people or more with a postal code and a street of its own, by GEOID or name; Hawaii has none | tätort population, the kommun's where the postort names it, else 200; place population | +| `locality` | postort, by name; [`geo-se.py`](data-import/geo-se.py)'s `localities` picks the candidates, and one with no street is dropped | a tenth of the incorporated places owning a ZCTA, drawn with odds by population, by GEOID or name; Hawaii has none | tätort population, the kommun's where the postort names it, else 200; place population | | `postal-code` | postnummer with street delivery, by code | ZCTA, by code | one; address ranges | -| `street` | gatunamn, the ten with most road segments per postort | street name, the ten with most address ranges per place | segments; address ranges | +| `street` | gatunamn, the tenth with most road segments per postort, at least ten | street name, the tenth with most address ranges per place, at least ten | segments; address ranges | `geo.SE.region[Skåne län].municipality` draws a kommun in Skåne, `geo.SE.locality[Lund].street` a street in Lund, and @@ -1139,7 +1139,7 @@ A shipped table built from a source is rebuilt by its script under `data-import/cache/`, which is ignored by version control and grows past a gigabyte, so pass `--cache DIR` to reuse a copy you already have and delete it to fetch afresh; `geo-us.py` fetches two -TIGER/Line files per county it ships, a few hundred megabytes, `geo-se.py` needs +TIGER/Line files per county it ships, about a gigabyte, `geo-se.py` needs a Trafikverket API key, free at [data.trafikverket.se](https://data.trafikverket.se/), in `TRAFIKVERKET_API_KEY` or a `--key-file`, and the Census host behind `geo-us.py` and `names-us.py` rejects a client for a while after a burst, so `--surnames` takes diff --git a/docs/decisions.md b/docs/decisions.md index 663dd64..ceb004b 100644 --- a/docs/decisions.md +++ b/docs/decisions.md @@ -555,7 +555,7 @@ A link is proved against the parent's keys and a key's uniqueness is a data mist both are load-time; the row lookup, by name and by parent, serves only a draw, so it waits for the first one, keeping `New` linear in the bytes read. On 2026-10-05, building every shipped lookup at load added 13 ms and 3.2 MiB to a 60 ms `New`. That cost grows with every -locale and with item 78, and most tables are never drawn by name or parent. The maintainer +locale and every place the geo tables ship, and most tables are never drawn by name or parent. The maintainer kept building the lookup on first draw, once per table. ## Two categories may name one TSV @@ -603,17 +603,18 @@ providing `geo.SE`'s paths, and without one `sv_SE.address` fails at first reach `FS` works against goal 6.2. Every package exports `Modules()`, so one spelling loads any of them; a data package imports only the packages it reads. -## The default embed holds every Swedish postort the import can place and give a street-delivery code and a street, and the US places of 25,000 or more +## The default embed holds every Swedish postort the import can place, a tenth of the US places owning a ZCTA drawn by population, and a tenth of each place's streets, at least ten -2026-09-24, Lilleman auf Larv. - -Sweden fits whole in 700 KB; every US place of 10,000 would pass a megabyte and fetch -1,200 counties of TIGER files, so the threshold sits where the two countries match in -size, and `--min-population` and `--streets-per-locality` on the import scripts build a -fuller set. Loading the whole shipped set took about 45 ms, about 20 ms of it the two -trees. - -Withdrawn by the maintainer on 2026-10-03; `todo.md` item 78 replaces it. +2026-10-11, Lilleman auf Larv, through `todo.md` item 78. Goals 2 and 14: ten streets a +place crowded 500 Stockholm customers onto ten streets, and US places of 25,000 or more +left out every town and village. `geo-us.py` draws among the places owning a ZCTA, since +a place owning none can carry no postal code, with Efraimidis and Spirakis's weighted +sampling from a fixed seed, so a rerun on the same sources draws the same places. The +draw keeps about 950 of the 1,584 places of 25,000 or more, and its smallest place holds +210 people. On 2026-10-11 the embed grew from 1.3 MB to 5.2 MB, and the first draw of +`en_US.address` took 75 ms against 19 ms before, within goal 13. `--place-share`, +`--street-share` and `--min-streets` on the import scripts build another set. Valid while +the first reach of a country stays unnoticed beside a test run. ## A locale's `address` binds its country's record once and prints it whole @@ -640,8 +641,8 @@ postort none of the three rules place is dropped, as is one not cased like a pla `I- 55 Bus` and `US Hwy 1` carry the most address ranges in many places and would head every address, so the import drops names spelled as a route. A ZCTA goes to the place its largest in-place part lies in, census-designated places left out since they never -ship, and ships only when that place does, so a few dozen places whose every code lies -mostly in a bigger neighbour ship no address; counting the land outside every place too +ship, and ships only when that place does, so a place whose every code lies mostly in a +bigger neighbour is never drawn; counting the land outside every place too would drop a quarter of the places, whose codes straddle unincorporated land, for a postal city the USPS mostly names the same way.