OpenStreetMap Tile Server (OTS)
OTS is a server that loads OpenStreetMap data file (*.osm.pbf) into memory then generates map tiles for HTTP requests.

Compile & Packaging
$ git clone https://github.com/OutOfBedlam/ots.git
$ cd ots
- compiled executable binary will be created in
./tmp
$ make
Start OTS as tile-rendering-server and OSM data-server in a process
You need to download osm.pbf file from OpenStreetMap sites
https://wiki.openstreetmap.org/wiki/Planet.osm#Country_and_area_extracts
Current version of OTS loads whole map data into memory, so make sure your osm.pbf file is size enough to fit system memory.
./tmp/ots server -p 1918 -i ./tmp/my-area.osm.pbf
sequenceDiagram
autonumber
Note over Browser, OTS: HTTP (ex: leaflet.js)
Browser ->>+ OTS : http://server_addr/tiles/{z}/{x}/{y}.png
OTS->>OTS: Convert coords
OTS->>OTS: Retrieve map data
OTS->>OTS: Gen image
OTS ->>- Browser: .png
Start tile-rendering-server and data-server
- start a process as a data-server
./tmp/ots server -p 1918 -i ./tmp/my-area.osm.pbf
- start tile-rendering-server
Specify the endpoint of data-server instead of *.osm.pbf file with -i
./tmp/ots server -p 1919 -i tcp://127.0.0.1:1918
- then web browser can retrieve map tiles as following flow
Web browser --> 127.0.0.1:1919 (rendering server) --> 127.0.0.1:1918 (data server)
sequenceDiagram
autonumber
Note over Browser, Render-Server: HTTP (ex: leaflet.js)
Browser ->>+ Render-Server : http://server_addr/tiles/{z}/{x}/{y}.png
Render-Server->>Render-Server: Convert coords
Render-Server ->>+ Data-Server : request map data with lat/lon bounds
Note over Render-Server, Data-Server: GRPC
Data-Server ->>- Render-Server: map data (osm features)
Render-Server->>Render-Server: Gen image
Render-Server ->>- Browser: .png
Configuration file
edit and copy server-config-sample.hcl, keep file extension as *.hcl. then apply the path with -c argument.
./tmp/ots server -c <config_file.hcl>
config file items
| item |
desc |
ex |
pname |
process instance name |
"ots01" |
osm-data-source |
data file or data server address |
"./data.osm.pbf" "tcp://localhost:1918" |
bind |
listening address |
"127.0.0.1" |
port |
listening port |
1919 |
grpc.max-recv-msg-size |
grpc limit (MB) |
100 |
grpc.max-send-msg-size |
grpc limit (MB) |
100 |
log.console |
log output to console |
true false |
log.filename |
log file path |
|
log.default-prefix-width |
|
10 |
log.default-level |
log level |
"TRACE" |
http.console-color |
colored http log |
true false |
http.debug-mode |
debug http log |
true false |
httplog.console |
|
|
httplog.filename |
|
|
httplog.default-prefix-width |
|
|
httplog.default-level |
|
|
rendering server only items
| item |
desc |
ex |
cache-size |
size of lru cache |
2000 |
show-watermark |
watermark (tile coordinates) on tiles |
true false |
show-labels |
enable labels |
true false |
All items in config file can be override by command line arguments. the name of argument is same as config item with double dash --. For example, to override port number ots -c my-config.hcl --port=2929, port number 2929 will be applied.
Where to download *.osm.pbf files
ex) Download south korean osm.pbf file
References about osm.pbf files