packet_mover
Joined 10 months ago
Joined 10 months ago
If you have 1-2 concrete suggestions on what makes it feel that way (copy/layout/typography), I am happy to improve it.
Those numbers look pretty reasonable. I’ll keep Photon in mind and, as I get time to benchmark different approaches on a few representative regions/hardware, I’ll use the results to decide what the best way forward is - and I’ll publish the numbers when I do.
Bounding box input is a really interesting idea. For my product, the best use would probably be to automate the request/fulfillment flow if this ever picks up. Letting someone draw/paste a bbox makes the request unambiguous and could be automated end-to-end.
Btw, the pack build process isn’t that compute-heavy. It’s not instant, but as a rough data point: on my laptop, a small country like Austria/Slovakia is on the order of ~1 hour to build the three artifacts (tiles + routing tiles + SQLite geocoder).
This is also why I lean on Nominatim-derived data for Corviont - it already condenses a lot of this into a single importance/ranking model. I have not tried a whole-world build though, so I am not sure how well that behaves at planet scale.
Have you (or anyone here) actually run Photon on edge-class hardware? If you have real-world numbers, I'd be interested in seeing them. When I add house-number search, Photon might be an easier route than enhancing my current approach.
It is built on open-source components and OSM-derived data, so the obligations are mostly (a) keeping third-party software licensing/attribution intact, and (b) OSM/ODbL compliance - clear attribution, and if you distribute derived OSM databases, meeting the ODbL share-alike requirements for those database artifacts.
I am handling this via attribution in the UI/docs and a licensing reference bundled with the dataset that points to a public licensing/attribution repo containing the third-party license texts and details: http://github.com/corviont/licensing
What I am selling is the packaging + ops side: ready-to-run region packs and (eventually) a signed updater for fleets.
One goal of Corviont is to avoid the on-device pain you hit with OSRM/Nominatim: the region pack is built once elsewhere, and the edge box mostly just serves prebuilt artifacts (PMTiles tiles, Valhalla routing tiles, and a SQLite geocoder index based on Nominatim).
In practice, requirements scale with region size and traffic. For larger regions the main constraint is usually SSD storage plus enough RAM headroom for routing/cache. I also picked Valhalla partly because it generally has a smaller RAM footprint than OSRM at serving time (OSRM is extremely fast but tends to be more memory-hungry).
Re: a bbox "builder" repo - it's an interesting idea. I could see it going two ways: (a) you want to run a bbox builder yourself, or (b) you want a simple way to specify a bbox so the dataset pack can be produced for you.
I started with the "ship a known-good pack" approach because the build pipeline is the messy part, and I want deployed boxes to stay simple/reproducible.
For your use case, which did you mean - run the build locally, or "draw/paste a bbox and get back a ready-to-run pack"? And would bbox be OK, or do you prefer admin boundaries (country/state/city)?
I am trying to learn from real deployments as I design Corviont's updater for edge boxes (bandwidth caps, maintenance windows, unreliable WAN, atomic swap + rollback).
When you say transit "zones" are small enough to deploy incrementally - what is the actual artifact per zone (roughly what format), and what sizes do you typically see?
And when a transit zone dataset changes, how do you roll that out safely - do you restart/reload the backend that serves that zone, or do you bring up a new backend/version and then flip travelmux to point at it?
Photon is built on Elasticsearch (Java) - so it tends to mean a heavier index + higher RAM/CPU expectations and more moving parts. That's fine on a beefy server, but it is a rough fit for the "drop-in appliance on small edge/on-prem boxes (amd64/arm64) + simple ops" goal.
Corviont's geocoder is intentionally "boring": a single SQLite file + an HTTP service, built from Nominatim-derived data. Fast startup, low RAM, easy to ship per-region, and it stays consistent with the rest of the stack.
That said - if there is demand for a "server-grade geocoder option" for people already comfortable running Elastic, I am not opposed to offering it as an alternative profile. The default is just optimized for constrained edge hardware and minimal moving parts.
Re: Weathergraph - thanks for the details. Since you already run whole-world reverse geocoding on a single server, that's a bit different from Corviont's current regional/fleet packaging (where you ship only the area you need to each edge/on-prem deployment). A "world geocoder-only" pack could still make sense - but it's a different distribution/update story than my default.
For your use case, do you want reverse results at the city/region/country level - or do you also need street/house number detail? That choice mostly determines how heavy a world geocoder-only pack needs to be.
Also it’s not one giant tile DB - there are 3 datasets:
- map tiles (PMTiles)
- routing tiles (Valhalla tiles)
- geocoder index (SQLite)
For Monaco all three are tiny - you can see the exact files here: https://github.com/corviont/monaco-demo/tree/main/dataFor small countries like Austria/Slovakia, each is typically hundreds of MB.
Original thread for background: https://news.ycombinator.com/item?id=46478061
This post is a write-up of measurements across multiple regions on a consistent baseline (EC2 c6g.xlarge / Graviton2), including methodology + raw numbers (disk footprint, p95 RAM, and p95 endpoint latencies).
If you’ve deployed mapping/search/routing into constrained or secured environments, what would you want benchmarked to make a real go/no-go decision?
Examples: Raspberry Pi/NUC class hardware, cold-start, concurrency, update workflow, custom overlays/POIs, address quality, terrain/elevation (hillshade/contours/LOS).
If you share rough "region size + target hardware + usage pattern," I’m happy to add more rows.