Releases: bikespace/parking-map-data
v2025.12
What's Changed
New dataset: Bicycle parking in Toronto apartment buildings from RentSafeTO
Check out the dataset here: data branch - Bicycle Parking in Apartments
- Add RentSafeTO data on bicycle parking in Toronto apartment buildings by @tallcoleman in #23
- Adds a new script and action to add/update data on bicycle parking in Toronto apartment buildings using open data from the RentSafeTO program.
- The script also calculates the amount of bicycle parking that would be required under the current zoning by-law and how the actual amount of bicycle parking compares.
- Improve diffing of source_files csvs by @tallcoleman in #24
- Add missing statusmanager save call to apartments dataset by @tallcoleman in #25
- Remove indexes from CSV outputs to improve diffing by @tallcoleman in #27
Bicycle Parking Data
- Improve input handling for clustering functions by @tallcoleman in #21
- Add retry for sources by @tallcoleman in #22 - this primarily helps to prevent the update from failing if the Overpass API for OpenStreetMap is overloaded
Documentation
- Update readmes on main by @tallcoleman in #26
Full Changelog: v2025.08...v2025.12
v2025.08
What's Changed
The following updates were made to improve the data that goes into the BikeSpace parking map:
Update bicycle_parking status handling by @tallcoleman in #17
- When we update data from the City of Toronto Open Data portal or OpenStreetMap, we record a couple basic things such as when the data source says it was last updated and how many entries there are in each dataset. These used to be written into a JSON file that only showed the stats from the most recent update, but are now added to a CSV file where you can see the trends over time.
- If you want to see the status log for the bicycle_parking dataset, you can view it here: bicycle_parking/statuses/bicycle_parking_statuses.csv
Improve deduplication by @tallcoleman in #18
- Much of our previous de-duplication between OpenStreetMap and City data relied on the
operator=tag, but this tag is usually not filled in by OpenStreetMap contributors. To improve the de-duplication, the script now omits any OpenStreetMap feature that is likely to be a City ring and post and that is within 5m of a known City ring and post. This removed approximately 600 duplicate features from the displayed data. - Occasionally, there are City of Toronto bike parking features mapped in OpenStreetMap that are not in the City of Toronto data (a common example is ring and posts or racks installed by the City parks department). To account for these, the script now keeps OpenStreetMap features tagged as being operated by the City if there is no known City feature within 30m.
- Why 5m and 30m? These are the same distances used by our clustering logic, based on past testing to maximize matches while avoiding false positives. For the 5m match, the locations for the City dataset that includes ring and posts are very accurate, so a small search radius catches most duplicates. Other City datasets are address-geolocated, so the larger 30m radius is required to confirm that there is not a match between OSM and City features.
- There is a new output file, output_files/all_normalized_tagged.geojson that shows the intermediate steps that go into the de-duplication logic. The properties starting with
_show the checks considered and_retainedshows the final result about whether to keep or drop a feature. This helps make it easier to understand why individual features are included or omitted from the map and fix errors. - City bike lockers used to be de-duplicated based on a proximity search of 200m (the radius was unusually large because the locations in the City data are not very precise). Locker de-duplication is now based on a ref tag, similar to the other datasets. Adding
ref:toronto.ca:lockers:title=to an OpenStreetMap feature will ensure that the OSM feature replaces the City feature in the displayed data. The title values can be looked up on the City's locker locations page.
Improve cluster property summarization functions by @tallcoleman in #20
- Currently, some City of Toronto features are clustered together into a single point on the map. Ring and Posts within 5m of each other are clustered together to improve usability and reduce the size of the data that needs to be loaded by the parking map. City bike racks from different datasets within 30m of each other are clustered together since they may be duplicates.
- When features are clustered together, their property values need to be combined. Previously, values that should be concatenated (e.g. ref ids) were joined together with semicolons per OpenStreetMap tagging norms. Other values that varied between features were simply listed, separated by the
|character. - Now, values that vary between features are summarized in a more concise way, with counts of each unique value encountered. For the
covered=tag, where values are essentially boolean (i.e.yes,no, or null), a single tag is generally returned based on the input values. E.g. allyeswould returnyes, someyesand some null would returnprobably yes, and someyesand somenowould returnmaybe. All of the summarization functions and the concatenation function now have more robust handling of null values and edge cases.
In addition to the changes noted above, the code was re-organized and cleaned up and more test coverage was added, especially for added or changed functionality.
Full Changelog: v2025.07...v2025.08
v2025.07
What's Changed
Initial version for data used in BikeSpace bike parking map.
Bike Parking Data
Main file used in the parking map is bicycle_parking/display_files/all_sources.geojson from the data branch.
Sources used:
- City of Toronto: Street Furniture - Bicycle Parking - Bicycle Locking Ring
- City of Toronto: Bicycle Parking Racks
- City of Toronto: Bicycle Parking - High Capacity (Outdoor)
- City of Toronto: Bike Stations (Indoor)
- City of Toronto: Bike Lockers Webpage
- OpenStreetMap - Overpass query of
amenity=bicycle_parkingwithin the City of Toronto
Bike Network Data
Main file used in the parking map is bicycle_network/cycling-network-display.geojson from the data branch.
Source: City of Toronto: Cycling Network
Main Changes
- Added to pipeline - pull city locker data from webpage by @tallcoleman in #3
- Save all normalized and cleanup by @tallcoleman in #5
- Convert archive file format to parquet by @tallcoleman in #6
- Reorganize structure by @tallcoleman in #7
- Update git switch by @tallcoleman in #10
- Add bicycle network data by @tallcoleman in #12
- Bicycle network data - make action commit conditional by @tallcoleman in #16
- Remove data updates on main by @tallcoleman in #13
Maintenance and Bugfixes
- Data format updates and added uv by @tallcoleman in #4
- Remove breakpoint from data_pipeline.py by @tallcoleman in #8
- Bugfix - ensure mkdirs also generate parents by @tallcoleman in #9
- Bugfix - convert last_updated to utc if no offset by @tallcoleman in #15
- Add testing action by @tallcoleman in #14
Full Changelog: https://github.com/bikespace/parking-map-data/commits/v2025.07