4 releases
Uses new Rust 2024
| new 0.0.4 | Aug 4, 2026 |
|---|---|
| 0.0.3 | Aug 2, 2026 |
| 0.0.2 | Jul 11, 2026 |
| 0.0.1 | Jun 28, 2026 |
#6 in #geocoding
655KB
19K
SLoC
geolite 
this is a work in progress and, for now, new patch versions have no backward-compatibility guarantees
open source geocode
getting started
with cargo
$ cargo install geolite
$ geolite --version
$ geolite build brazil # needs +/- 45gb while building then +/- 3gb when finished
$ geolite http-server # open http://localhost:8080
with docker
# command line
$ docker run pjpimentel/geolite:0.0.1 -- --version
# pre-built countries geocodes
$ docker run -p 8080:8080 pjpimentel/geolite:prebuilt-brazil
# open http://localhost:8080
docs
- source code modules
- docker images
- cookbook
docker images
base image
$ docker run pjpimentel/geolite:0.0.1 -- --version
$ docker run -t -v ./data:/data pjpimentel/geolite:0.0.1 build brazil
pre-built images
size matters: once a country's data grows too large for a docker image, its pre-built image stops being updated and may be dropped.
docker run -p 8080:8080 pjpimentel/geolite:prebuilt-brazil
docker run -p 8080:8080 pjpimentel/geolite:prebuilt-brazil-YYYYMMDDHHMM
# open http://localhost:8080
available country list
| # | country | docker cmd |
|---|---|---|
| 1 | brazil | docker run -p 8080:8080 pjpimentel/geolite:prebuilt-brazil |
| 2 | portugal | docker run -p 8080:8080 pjpimentel/geolite:prebuilt-portugal |
| 3 | argentina | docker run -p 8080:8080 pjpimentel/geolite:prebuilt-argentina |
| 4 | bolivia | docker run -p 8080:8080 pjpimentel/geolite:prebuilt-bolivia |
| 5 | chile | docker run -p 8080:8080 pjpimentel/geolite:prebuilt-chile |
| 6 | colombia | docker run -p 8080:8080 pjpimentel/geolite:prebuilt-colombia |
| 7 | ecuador | docker run -p 8080:8080 pjpimentel/geolite:prebuilt-ecuador |
| 8 | guyana | docker run -p 8080:8080 pjpimentel/geolite:prebuilt-guyana |
| 9 | paraguay | docker run -p 8080:8080 pjpimentel/geolite:prebuilt-paraguay |
| 10 | peru | docker run -p 8080:8080 pjpimentel/geolite:prebuilt-peru |
| 11 | suriname | docker run -p 8080:8080 pjpimentel/geolite:prebuilt-suriname |
| 12 | uruguay | docker run -p 8080:8080 pjpimentel/geolite:prebuilt-uruguay |
| 13 | venezuela | docker run -p 8080:8080 pjpimentel/geolite:prebuilt-venezuela |
| 14 | netherlands | docker run -p 8080:8080 pjpimentel/geolite:prebuilt-netherlands |
| 15 | switzerland | docker run -p 8080:8080 pjpimentel/geolite:prebuilt-switzerland |
cookbook
execute all necessary steps
$ geolite build brazil
# or with docker
$ docker run --rm -t -v ./geolite-data:/.geolite pjpimentel/geolite:latest build brazil
$ docker run --rm -p 8080:8080 -v ./geolite-data:/.geolite pjpimentel/geolite:latest http-server
extract each data from a pbf file
$ geolite osm-pbf-file download brazil
$ geolite extract osm-pbf-blob-chunks brazil
$ geolite extract osm-pbf-data brazil
$ geolite extract osm-admin-levels
$ geolite extract osm-house-numbers
index extracted data
$ geolite index admin-levels-hierarchy
$ geolite index user-friendly-name
$ geolite index coordinates
optimize data
$ geolite optimize delete-intermediary-data
$ geolite optimize sqlite-file
query
$ geolite query "-23.970949,-46.318730"
$ geolite query "rua castro alves, embare, santos, sao paulo"
explore
$ geolite http-server
merge separately-built databases
# machine 1
$ geolite --sqlite-path sudeste.sqlite3 build sudeste
# machine 2
$ geolite --sqlite-path nordeste.sqlite3 build nordeste
# merge all builds into a new combined database (created fresh)
$ geolite merge brazil.sqlite3 sudeste.sqlite3 nordeste.sqlite3 ...
# or with docker
$ docker run --rm -t -v ./geolite-data:/.geolite pjpimentel/geolite:latest --sqlite-path /.geolite/sudeste.sqlite3 build sudeste
$ docker run --rm -t -v ./geolite-data:/.geolite pjpimentel/geolite:latest --sqlite-path /.geolite/nordeste.sqlite3 build nordeste
$ docker run --rm -t -v ./geolite-data:/.geolite pjpimentel/geolite:latest --sqlite-path /.geolite/brazil.sqlite3 merge /.geolite/brazil.sqlite3 /.geolite/sudeste.sqlite3 /.geolite/nordeste.sqlite3
$ docker run --rm -p 8080:8080 -v ./geolite-data:/.geolite pjpimentel/geolite:latest --sqlite-path /.geolite/brazil.sqlite3 http-server
question and answers
a) why geolite?
"geo" comes from "geocode" and "lite" comes from "sqlite", no special meaning.
b) where does the data come from?
the data comes from any .osm.pbf file (openstreetmap's protobuffer format). this project uses geofabrik as the initial source, which extracts its data from openstreetmap.
license: GNU AGPLv3
Dependencies
~69MB
~1M SLoC