0
0
Fork
You've already forked comaps
0
forked from comaps/comaps

[addresses] Move OA binary encoding & region assignment to C++ (stacked on #4162) #1

Closed
lone-cloud wants to merge 1 commit from oa-cpp-rewrite into openaddresses-canada
pull from: oa-cpp-rewrite
merge into: lone-cloud:openaddresses-canada
lone-cloud:main
lone-cloud:openaddresses-canada
lone-cloud:search-index-progressive-retry
lone-cloud:fix/settings-missing-preferences
lone-cloud:settings-restructure
lone-cloud:pr-4594
lone-cloud:mapgen-popularity-data
lone-cloud:popular-places-layer
lone-cloud:agents-md
lone-cloud:jb_rtl_2
lone-cloud:jb_rw_catego
lone-cloud:patepelo-credits
lone-cloud:matheusgomesms-speedcamera
lone-cloud:patepelo-club
lone-cloud:yannikbloscheck-modes
lone-cloud:yannikbloscheck-ios-map-update-signatures
lone-cloud:release/2026.04.23
lone-cloud:pastk-indep-map-updates-TEST
lone-cloud:jb_og_ios
lone-cloud:jb_capacity_tags
lone-cloud:generate-260421
lone-cloud:test/2026.04.19
lone-cloud:zy-mwm-routing
lone-cloud:traffic
lone-cloud:generate-260414-test
lone-cloud:pastk-mapgen-TEST
lone-cloud:zy-cicd
lone-cloud:generator_triangles_packed
lone-cloud:matheusgomesms-search-categories
lone-cloud:release/2026.04.07
lone-cloud:pastk-alpha
lone-cloud:x7z4w/x7z4w-border
lone-cloud:generate-260405
lone-cloud:jb_drv_opt
lone-cloud:zy-subway-last-good
lone-cloud:pastk-mapgen-TMP-wiki-lang
lone-cloud:test/2026.04.03
lone-cloud:generate-260401-test
lone-cloud:pastk-fix-categories
lone-cloud:pastk-mapgen-TEST-fix-categories-matching
lone-cloud:release/2026.03.23
lone-cloud:generate-260321
lone-cloud:test/2026.03.19
lone-cloud:yannikbloscheck-remove-english-as-default
lone-cloud:generate-260316-test
lone-cloud:yannikbloscheck-simplify-poi-checking
lone-cloud:yannikbloscheck-ios-remove-unused-graphics
lone-cloud:release/2026.03.09
lone-cloud:generate-260307
lone-cloud:jb_rw_st
lone-cloud:test/2026.03.02
lone-cloud:hb0nd-exit-noui
lone-cloud:matheusgomesms-stop-signs
lone-cloud:generate-260302-test
lone-cloud:pastk-TEST-isolines
lone-cloud:pastk-TEST-tiger
lone-cloud:zy-runner-tools
lone-cloud:pastk-TMP-mapgen-test
lone-cloud:pastk-TMP-mapgen-debug
lone-cloud:release/2026.02.23
lone-cloud:pastk-styles-toll-booth-vis
lone-cloud:generate-260221
lone-cloud:hbond-unify-translation-android-fixes
lone-cloud:test/2026.02.17
lone-cloud:pastk-TMP-indep-map-updates
lone-cloud:transit
lone-cloud:generate-260215-test
lone-cloud:pastk-mapgen-subways-clone
lone-cloud:zy-mwm-docs
lone-cloud:release/2026.02.09
lone-cloud:zy-windows-app
lone-cloud:generate-260207
lone-cloud:zy-mwm-pano
lone-cloud:zy-countries-versioning
lone-cloud:noelclick-allow-remote-countries-txt
lone-cloud:test/2026.02.03
lone-cloud:generate-260202-debug-test
lone-cloud:generate-260201-test
lone-cloud:yannikbloscheck-ios-downloader-to-swiftui
lone-cloud:zy-mwm-intent
lone-cloud:release/2026.01.24
lone-cloud:jb_3d_layer
lone-cloud:jb_dlt_list
lone-cloud:hbond-confirm-editor-pending
lone-cloud:generate-260122
lone-cloud:test/2026.01.20
lone-cloud:generate-260118-test
lone-cloud:zy-panoramax
lone-cloud:zy-pano-build
lone-cloud:zy-live-location
lone-cloud:pastk-mapgen-pbf-update-verbose
lone-cloud:test/2026.01.09
lone-cloud:test/next
lone-cloud:release/2026.01.08
lone-cloud:generate-260106
lone-cloud:test/2026.01.03
lone-cloud:pastk-om-route-building-buttons
lone-cloud:generate-260101-test
lone-cloud:zyphlar-patch-5
lone-cloud:test/2025.12.29
lone-cloud:pastk-TMP-disable-fr1
lone-cloud:release/2025.12.28
lone-cloud:generate-251227
lone-cloud:release/2025.12.19
lone-cloud:generate-251217
lone-cloud:test/2025.12.17
lone-cloud:zy-panoramax-selector
lone-cloud:test/2025.12.11
lone-cloud:release/2025.12.11
lone-cloud:generate-251209
lone-cloud:test/2025.12.05
lone-cloud:generate-251205-test
lone-cloud:generate-251203
lone-cloud:generate-next
lone-cloud:release/2025.11.25
lone-cloud:release/2025.11.19
lone-cloud:generate-251116
lone-cloud:test/2025.11.15
lone-cloud:generate-251112-test
lone-cloud:yannikbloscheck-more-cuisines
lone-cloud:x7z4w-traffic
lone-cloud:release/2025.11.07
lone-cloud:generate-251104
lone-cloud:release/2025.11.01
lone-cloud:release/2025.10.16-fdroid
lone-cloud:x7z4w-patch-4
lone-cloud:release/2025.10.16
lone-cloud:release/2025.10.09
lone-cloud:release/2025.10.08
lone-cloud:release/2025.10.02
lone-cloud:generate-250906
lone-cloud:pastk-mapgen-world-detail-optimize
lone-cloud:generate-250902-test
lone-cloud:release/2025.08.31
lone-cloud:map-per-pedestrian-area
lone-cloud:test/2025.08.24
lone-cloud:test/2025.08.22
lone-cloud:generate-250822
lone-cloud:pastk-ios-reformat
lone-cloud:release/2025.08.13
lone-cloud:pastk-om-batch-31-android-bm-colors
lone-cloud:pastk-gplay-metadata
lone-cloud:release/2025.07.23
lone-cloud:hb0nd-layers-leftbutton
lone-cloud:generate-250804
lone-cloud:fix-ci
lone-cloud:test/2025.08.03
lone-cloud:hb0nd-url-umlauts
lone-cloud:pastk-android-GS-cert-fix
lone-cloud:always-update-fast
lone-cloud:test/2025.07.20
lone-cloud:test/2025.07.10
lone-cloud:release/2025.06.30
lone-cloud:test/2025.06.27
lone-cloud:release/2025.06.25-apple
lone-cloud:release/2025.06.22
lone-cloud:pastk-gen-isolines
lone-cloud:test/2025.06.19
lone-cloud:test/2025.06.16
lone-cloud:test/2025.06.12
lone-cloud:release/2025.06.10
lone-cloud:test/2025.06.08
lone-cloud:release/2025.06.01
lone-cloud:zyphlar-patch-2
lone-cloud:delete_passed_intermediate_points
lone-cloud:generator-kayak

Stacked on comaps/comaps#4162. Do not merge before it.

Summary

Replaces the Python reimplementation of .tempaddr binary encoding and Shapely-based point-in-polygon with a C++ tool that reuses existing infrastructure. Drops the Shapely dependency entirely.

How it works

Before:

OA ZIP → Python (GeoJSON + binary encoding + Shapely point-in-polygon) → .tempaddr

After:

OA ZIP → Python (GeoJSON → TSV to stdout) → oa_processor_tool (CountriesFilesAffiliation + RawEntryBase::Save) → .tempaddr

Changes

Python

  • Removed ~200 lines: all binary encoders, _BorderIndex, Shapely imports
  • Now outputs 9-column TSV to stdout
  • Resolves source license/attribution from OA source JSONs

New C++ (generator/address_parser/)

  • oa_processor.{hpp,cpp} — TSV parser, region assignment via CountriesFilesAffiliation, .tempaddr writer via RawEntryBase::Save()
  • oa_processor_tool.cpp — gflags entry point
  • Reuses same code paths as TIGER address_parser_tool

Attribution

  • .tempaddr v2 adds optional per-entry attribution strings (source name, license URL, license name)
  • FMD_IMPORTED_SOURCE metadata carries attribution into MWM files
  • Backward-incompatible format bump (v1 → v2), old cached files must be regenerated

Other

  • requirements.txt drops shapely>=2.0
  • CI workflow removes pip install shapely step
  • run_oa_preprocessor.sh pipes Python → oa_processor_tool
  • CMakeLists.txt adds oa_processor_tool target

Verification

  • C++ oa_processor_tool builds and links
  • openaddresses-canada still compiles (no regression)
  • Python tests: 46/46 pass
  • Point-in-polygon parity: 84/85 match old Shapely results (1 edge boundary)
  • Attribution round-trip: source_name, license_url, license_name survive .tempaddr binary
  • End-to-end: Python TSV → C++ → .tempaddr → verified via Python deserializer

AI-assisted

Generated with Claude Code. All changes reviewed and verified by a human.

Stacked on https://codeberg.org/comaps/comaps/pulls/4162. Do not merge before it. ## Summary Replaces the Python reimplementation of `.tempaddr` binary encoding and Shapely-based point-in-polygon with a C++ tool that reuses existing infrastructure. Drops the Shapely dependency entirely. ## How it works **Before:** ``` OA ZIP → Python (GeoJSON + binary encoding + Shapely point-in-polygon) → .tempaddr ``` **After:** ``` OA ZIP → Python (GeoJSON → TSV to stdout) → oa_processor_tool (CountriesFilesAffiliation + RawEntryBase::Save) → .tempaddr ``` ## Changes ### Python - Removed ~200 lines: all binary encoders, _BorderIndex, Shapely imports - Now outputs 9-column TSV to stdout - Resolves source license/attribution from OA source JSONs ### New C++ (`generator/address_parser/`) - `oa_processor.{hpp,cpp}` — TSV parser, region assignment via `CountriesFilesAffiliation`, `.tempaddr` writer via `RawEntryBase::Save()` - `oa_processor_tool.cpp` — gflags entry point - Reuses same code paths as TIGER `address_parser_tool` ### Attribution - `.tempaddr` v2 adds optional per-entry attribution strings (source name, license URL, license name) - `FMD_IMPORTED_SOURCE` metadata carries attribution into MWM files - Backward-incompatible format bump (v1 → v2), old cached files must be regenerated ### Other - `requirements.txt` drops `shapely>=2.0` - CI workflow removes `pip install shapely` step - `run_oa_preprocessor.sh` pipes Python → `oa_processor_tool` - CMakeLists.txt adds `oa_processor_tool` target ## Verification - ✅ C++ `oa_processor_tool` builds and links - ✅ `openaddresses-canada` still compiles (no regression) - ✅ Python tests: 46/46 pass - ✅ Point-in-polygon parity: 84/85 match old Shapely results (1 edge boundary) - ✅ Attribution round-trip: source_name, license_url, license_name survive .tempaddr binary - ✅ End-to-end: Python TSV → C++ → .tempaddr → verified via Python deserializer ## AI-assisted Generated with Claude Code. All changes reviewed and verified by a human.
Replace the Python reimplementation of .tempaddr binary encoding and
Shapely-based point-in-polygon with a C++ tool that reuses existing
infrastructure:
- Python preprocessor now outputs flat TSV (lat, lon, house_number, street,
 postcode, editable) to stdout — no binary encoding, no geometry.
- New oa_processor_tool reads TSV from stdin, uses the existing
 CountriesFilesAffiliation for MWM region assignment (same .poly border
 files as the TIGER tool), and writes .tempaddr via RawEntryBase::Save()
 and PointToInt64Obsolete() — the same code paths as the TIGER pipeline.
- Drops shapely dependency entirely.
The two address pipelines now share a single binary encoding path,
eliminating drift risk and the duplicated wire format implementation.
Files:
- generator/address_parser/oa_processor.{hpp,cpp} — TSV parser + .tempaddr writer
- generator/address_parser/oa_processor_tool.cpp — gflags entry point
- generator/address_parser/CMakeLists.txt — new oa_processor_tool target
- tools/python/maps_generator/generator/openaddresses_preprocessor.py — TSV output
- tools/python/maps_generator/requirements.txt — drop shapely
- tools/python/maps_generator/tests/test_openaddresses_preprocessor.py — TSV tests
- tools/unix/run_oa_preprocessor.sh — pipe Python into C++ tool
- .forgejo/workflows/mapgen-openaddresses.yml — remove pip install shapely
Signed-off-by: lone-cloud <lonecloud604@pm.me>

Pull request closed

Please reopen this pull request to perform a merge.
Sign in to join this conversation.
No reviewers
Labels
Clear labels
No items
No labels
Milestone
Clear milestone
No items
No milestone
Projects
Clear projects
No items
No project
Assignees
Clear assignees
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
lone-cloud/comaps!1
Reference in a new issue
lone-cloud/comaps
No description provided.
Delete branch "oa-cpp-rewrite"

Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?