# à portée conflated amenity database 2026-10-16-v1

The destination database behind [à portée](https://aportee.ca): the places that walking, cycling
and transit times are measured to, for all of Canada. It is built from
[OpenStreetMap](https://www.openstreetmap.org) and [Overture Maps](https://overturemaps.org)
places matched by [OpenPOIs](https://github.com/henryspatialanalysis/openpois), classified into
34 amenity types and checked against Statistics Canada facility databases.

This folder follows the layout of OpenPOIs on Source Cooperative
(<https://source.coop/henryspatialanalysis/openpois>), so the same folder can be copied there
unchanged. Snapshot of 2026-10-16; the release it comes from is à portée data release
`20261008-unified-r34`.

- **Licence of this database:** [Open Database License 1.0](./LICENSE-ODbL-1.0.txt) (ODbL).
  Individual contents keep their own licences; see [Licences](#licences-and-attribution).
- **Map and reports:** <https://aportee.ca> · **Data page:** <https://aportee.ca/data>
- **Matching code:** <https://github.com/henryspatialanalysis/openpois>

## Layout

```
2026-10-16-v1/
├── README.md                          # this file
├── SHA256SUMS                         # checksums of every other file in this folder
├── LICENSE-ODbL-1.0.txt               # licence of the database
├── LICENSE-CDLA-Permissive-2.0.txt    # licence of the Overture Places contents
├── LICENSE-Apache-2.0.txt             # licence of the Foursquare contents
├── NOTICE-Foursquare.txt              # Foursquare's NOTICE, plus our changes
├── conflated-parquet/                 # hive-partitioned by amenity_type
│   └── amenity_type=<type>/part-0.parquet
└── conflated-pmtiles/conflated.pmtiles
```

`conflated-parquet/` is partitioned by `amenity_type`, as OpenPOIs partitions its parquet by
`shared_label` (its category). Almost every use starts with one kind of place ("all pharmacies"),
so the partition lets a reader fetch one `part-0.parquet`; the `amenity_type` column is the
directory name and is not repeated inside the files. Province is a column (`province`), not a
partition: provincial files would split a type's rows across thirteen small files.

## Sources and versions

| Component | Version |
|---|---|
| OpenStreetMap | Geofabrik provincial extracts of 2026-08-25, snapshot `20260827-identity-conflation` |
| Overture Maps Places | release `2026-09-23.0` (`c081e6831915695d9c91ea6f1702704ae802e887705d7dc85038c5a64ba335d3` is the SHA-256 of the Canada extract that gives each record's `sources`) |
| Conflation | OpenPOIs commit [`8d199921cb4500f6ed4fce24a3b99c5922ce7331`](https://github.com/henryspatialanalysis/openpois/commits/8d199921cb4500f6ed4fce24a3b99c5922ce7331), conflation `20260923-taxonomy-r8-no-cd` |
| Classification and review | à portée destination profiles `destination-profiles-v33-r34-park-name-screen`, reviewed 2026-10-08 |
| Health facilities | Statistics Canada Open Database of Healthcare Facilities (ODHF) v2 |
| School levels | Statistics Canada Open Database of Educational Facilities (ODEF) v3.0.1 |
| Park access points | OpenStreetMap entrances, gates and edge crossings (à portée `park_access`) |

Input files, from the data release `20261008-unified-r34`:

| File | SHA-256 |
|---|---|
| `amenities_ab.parquet` | `bab189a209b95232939610ae037e29bf60d68dacd568bb79f4944befe5468ce7` |
| `amenities_bc.parquet` | `a4d292cb28f67e9276c115a51d8ad8016e9083c6691ff57b0a1cc00359c214c7` |
| `amenities_mb.parquet` | `27ee598f210e521b25c56372835000c6f94d960cb8c525e827429ce42ce23e1c` |
| `amenities_nb.parquet` | `640c4b6499379176c7601e90b2da700228d95294749c286ee225d6c0276c4443` |
| `amenities_nl.parquet` | `6a478ef8891aae66d0793893e1a72928aa6b1c9d67aab7cdfce975fa790d0c66` |
| `amenities_ns.parquet` | `48a403f8a3babb55a65ecfe070571b2ec4c7cba47b2eb15198f72a5e161ae7f9` |
| `amenities_nt.parquet` | `baf09f26e1f4ddf1a8352da1a18b908627150f0341d26c9e52b8b8824f9eff6c` |
| `amenities_nu.parquet` | `32603ec26a7377755c12b53fdd423dfd366d8f515be721c56695b1b281ead156` |
| `amenities_ontario.parquet` | `29bdbfadcc464a66881fcc932350909f5e05d3a3606174def9ad80c33de7878a` |
| `amenities_pe.parquet` | `f06c4efe31e790f9b5c0030f1e74202861b34bd85d6ece1efb888e5330ce8810` |
| `amenities_qc.parquet` | `68ecf23f08be03c09ce2cbad3a523c9f84b57fb29dbfee76409178d6144c2ef0` |
| `amenities_sk.parquet` | `ea5182b1dd8c5ac00044cf93ab117db2aa53549fa59cef8bf1aafdbec6dfb0f8` |
| `amenities_yt.parquet` | `462bfccb4a843695162ee069b98fc082fe21cc0fa88d3195f48ddec78aac9923` |
| `pois.pmtiles` | `c22104846a41649b04375abd4b7de89b52e9731daac8a7b209d4e0dc38593a3f` |

## Method

1. OpenPOIs finds nearby OpenStreetMap and Overture pairs, scores them on distance, name, type
   and identifiers, and joins the best one-to-one pairs into a single row (`source` = `matched`).
   Everything else stays one row from its own source (`osm` or `overture`). A model of how
   OpenStreetMap features age gives each row a `confidence`.
2. à portée maps both category systems to 34 amenity types with reviewed crosswalks,
   screens out categories that are not destinations, and applies dated, reviewed corrections.
3. Duplicate listings of one destination (for example a school mapped as a point and as a
   building) are collapsed by an exact-name, phone and address rule.
4. Statistics Canada ODHF adds health facilities missing from both sources; ODEF supplies school
   levels (elementary, secondary, post-secondary).
5. Parks are merged into complexes and get access points and size types (see below).
6. The table is split by province, written once per type, and the `overture_id` and
   `overture_datasets` columns are added from the Overture release (below).

The records of this folder are exactly the rows à portée routes to; nothing is added or removed
between the release and this folder.

## Counts

Rows: **971,087**, of which **626,638** are places (`access_of` is null) and **344,449** are routing access points.

Places by `source`:

| source | places |
|---|---|
| osm | 305,058 |
| overture | 238,158 |
| matched | 81,957 |
| odhf | 1,465 |

Places by Overture `sources[].dataset` (a record can list several datasets; OSM-only and ODHF places are not counted here):

| dataset | places |
|---|---|
| Overture | 320,115 |
| meta | 239,473 |
| Foursquare | 34,792 |
| Microsoft | 24,888 |
| DAC | 13,185 |
| AllThePlaces | 7,131 |
| RenderSEO | 561 |
| BrightQuery | 66 |
| PinMeTo | 19 |
| Overture-signals | 5 |

By province:

| province | places | rows | Foursquare places |
|---|---|---|---|
| AB | 77,859 | 132,150 | 3,780 |
| BC | 98,975 | 171,826 | 5,385 |
| MB | 21,662 | 34,463 | 870 |
| NB | 14,580 | 21,012 | 482 |
| NL | 9,361 | 12,546 | 238 |
| NS | 19,423 | 30,205 | 777 |
| NT | 1,100 | 1,683 | 24 |
| NU | 716 | 807 | 7 |
| ON | 232,361 | 343,553 | 14,347 |
| PE | 3,522 | 4,686 | 111 |
| QC | 124,392 | 181,093 | 7,969 |
| SK | 21,643 | 35,581 | 756 |
| YT | 1,044 | 1,482 | 46 |

By type:

| amenity_type | places | rows | Foursquare places |
|---|---|---|---|
| restaurant | 123,850 | 123,850 | 14,526 |
| park | 74,620 | 261,545 | 301 |
| sports_field | 56,152 | 56,152 | 46 |
| place_of_worship | 37,287 | 37,287 | 1,515 |
| playground | 35,407 | 35,407 | 49 |
| cafe | 27,767 | 27,767 | 2,791 |
| school | 26,550 | 26,550 | 521 |
| park_pocket | 23,118 | 45,832 | 6 |
| convenience_store | 19,630 | 19,630 | 1,249 |
| dentist | 18,789 | 18,789 | 2,421 |
| bank | 17,393 | 17,393 | 1,464 |
| pharmacy | 17,172 | 17,172 | 1,173 |
| park_neighbourhood | 16,332 | 123,821 | 32 |
| grocery | 15,432 | 15,432 | 1,270 |
| bar | 13,277 | 13,277 | 1,279 |
| elementary_school | 12,647 | 12,647 | 389 |
| childcare | 10,373 | 10,373 | 926 |
| clinic | 9,652 | 9,652 | 920 |
| nursing_home | 9,380 | 9,380 | 395 |
| bakery | 8,137 | 8,137 | 815 |
| community_centre | 7,922 | 7,922 | 87 |
| post_secondary | 7,188 | 7,188 | 599 |
| hardware | 6,485 | 6,485 | 768 |
| secondary_school | 4,525 | 4,525 | 107 |
| ice_rink | 4,417 | 4,417 | 77 |
| library | 4,416 | 4,416 | 184 |
| park_large | 4,223 | 31,544 | 10 |
| post_office | 3,996 | 3,996 | 0 |
| bookstore | 2,998 | 2,998 | 505 |
| bike_shop | 2,137 | 2,137 | 252 |
| pool | 1,711 | 1,711 | 80 |
| dog_park | 1,514 | 1,514 | 26 |
| laundromat | 1,107 | 1,107 | 0 |
| hospital | 1,034 | 1,034 | 9 |

## Schema (`conflated-parquet/`)

One row per (destination, type) pair. A place that counts as several types appears once for each,
with an `amenity_id` ending `#<type>`. Rows with `access_of` set are routing points, not places.

| Column | Description |
|---|---|
| `amenity_id` | Stable ID: `osm:<id>`, `overture:<uuid>`, `matched:<osm>_<uuid>` or `odhf:<hash>`, `#<type>` suffix for extra types, `@<n>` suffix for access points |
| `name` | Preferred display name |
| `lat`, `lon` | Representative point (WGS 84) |
| `amenity_type` | One of 34 types (also the partition directory) |
| `source` | `osm`, `overture`, `matched` (both) or `odhf` |
| `license` | Licences of the contents of the row, from the pipeline (see Licences) |
| `provenance` | Free-text trail: OpenPOIs source, classification policy version and reviews |
| `confidence` | OpenPOIs estimate that the place currently exists (0 to 1); 1.0 for ODHF, 0.5 where no estimate exists |
| `polygon_wkb` | Footprint as WKB polygon for parks and other areal destinations, else null |
| `access_of` | For an access point, the `amenity_id` of the destination it reaches; null for places |
| `access_kind` | `entrance`, `crossing` or `frontage`, for access points |
| `province` | Two-letter province or territory code of the regional file the row came from |
| `overture_id` | Overture place ID behind the row (from `amenity_id`, or the parent's for access points); null for OSM-only and ODHF rows |
| `overture_datasets` | Distinct `sources[].dataset` values of that Overture record in release `2026-09-23.0` (for example `Overture`, `meta`, `Foursquare`) |

Parks: a park is a `park` row. A complex of at least 2 ha is also a `park_neighbourhood` row and
one of at least 20 ha also a `park_large` row; under 2 ha the complex is also a `park_pocket`
row. These are copies of the same place at different sizes, so do not add the park types together.

## Quickstart

```python
import duckdb

BASE = "https://r2.aportee.ca/data/2026-10-16-v1"   # or the Source Cooperative folder
con = duckdb.connect()
con.execute("INSTALL httpfs; LOAD httpfs;")
df = con.execute(f"""
    SELECT province, COUNT(*) AS pharmacies
    FROM read_parquet('{BASE}/conflated-parquet/amenity_type=pharmacy/part-0.parquet')
    WHERE access_of IS NULL
    GROUP BY province ORDER BY pharmacies DESC
""").df()
print(df)
```

Plain HTTPS has no directory listing, so name the type's file as above. To read every type at
once, download the folder, or read it through Source Cooperative's S3 mirror with
`hive_partitioning = true` and a `**/*.parquet` glob, as in the
[OpenPOIs quickstart](https://source.coop/henryspatialanalysis/openpois).

`conflated-pmtiles/conflated.pmtiles` is the destination layer of the à portée
map: vector tiles (z11 to z14, layer `pois`, properties `type`, `name`, `id`, `confidence`) with one
point per place (access points are left out). Load it with MapLibre and `pmtiles://`. The tiles
are those of the à portée map release; only the archive's name and description were rewritten
(the tiler's local build paths were removed), so every tile is byte-identical.

## Licences and attribution

This database is a derivative database of OpenStreetMap, and it is released under the
[Open Database License 1.0](./LICENSE-ODbL-1.0.txt). Anyone who publicly uses it, or a
derivative database made from it, must credit the sources below, keep the ODbL notice and share
derivative databases under the same licence. Maps, charts and reports made from it
("Produced Works") need a notice that they were made from this database and that it is
available under the ODbL, with a link where practical, and the source credits below.

Why ODbL: OpenPOIs combines OpenStreetMap and Overture attributes in a single row, so the
result is not a collective database of separate parts but a database derived from OpenStreetMap
([ODbL 1.0 section 4.4](https://opendatacommons.org/licenses/odbl/1-0/), and the OSMF
[Collective Database Guideline](https://osmfoundation.org/wiki/Licence/Community_Guidelines/Collective_Database_Guideline_Guideline),
which only covers data types that are wholly OSM or wholly non-OSM). Overture says the same of
joins with OSM: "the resulting data may need to carry the Open Database License"
([Overture places guide](https://docs.overturemaps.org/guides/places/)). The permissive licences
of the other contents allow this, and their conditions are below.

Contents keep their own licences, listed per row in `license`:

| Contents | Licence | What the licence asks |
|---|---|---|
| OpenStreetMap features and geometry | ODbL 1.0 | Credit "© OpenStreetMap contributors" |
| Overture Places records | CDLA-Permissive-2.0 (some sources CC0-1.0) | Ship the licence text with shared data: [LICENSE-CDLA-Permissive-2.0.txt](./LICENSE-CDLA-Permissive-2.0.txt) |
| Foursquare OS Places records inside Overture | Apache-2.0 | Ship the licence ([LICENSE-Apache-2.0.txt](./LICENSE-Apache-2.0.txt)), the NOTICE with the change statement ([NOTICE-Foursquare.txt](./NOTICE-Foursquare.txt)) and mark changes |
| ODHF and ODEF (Statistics Canada) | Open Government Licence – Canada | Credit the source and keep the licence link |

Attribution lines:

- Short form (maps, credits lines): `© OpenStreetMap contributors · Overture Maps Foundation · StatCan · ODbL (derived)`
- Full form (data pages, reports, README):
  > Amenity data: © OpenStreetMap contributors (Open Database License 1.0) and © Overture Maps Foundation (CDLA-Permissive-2.0), matched by OpenPOIs and classified by à portée (Ammil Industries Ltd.), available under the Open Database License 1.0. Contains information from Statistics Canada's Open Database of Healthcare Facilities and Open Database of Educational Facilities, licensed under the Open Government Licence – Canada.
- Foursquare (only where `overture_datasets` lists it): `Foursquare Open Source Places © Foursquare Labs, Inc., licensed under the Apache License 2.0.`

Note on the `license` column: it is written by the pipeline from the row's `source`. The pipeline writes `CDLA-Permissive-2.0` for every Overture row. In this folder, rows whose Overture record lists `Foursquare` in `overture_datasets` say `Apache-2.0` instead (appended where the row had no Overture licence), because that is the licence Overture gives those records; the release's input files are unchanged.

## Change notes

- 2026-10-16-v1 repeats 2026-10-16-v0 with the same data: its Parquet files are byte-identical. Only conflated.pmtiles differs in bytes. The PMTiles writer had stored the build time in the gzip headers of the metadata and directories, so the file hash changed with every build. v1 writes them with a zero timestamp, so the same inputs give the same SHA256SUMS. The tiles, header and metadata decode identically in both.
- 2026-10-16-v0 stays available at r2.aportee.ca/data/2026-10-16-v0/.

## Reproducing this folder

```
uv run python scripts/pipeline/package_amenity_release.py --help
```

builds this folder from the release inputs listed above (the script checks the SHA-256 of every
regional file against the release's `h3/provenance/run.json` before it reads it). The same inputs
give the same `SHA256SUMS`.
