OpenStreetMaps (OSM) is quoted to be a "free wiki world map". The OSM tile server is essentially a web server specialized in delivering raster maps. It serves them as static ties and is also able to perform rendering in real-time or providing cached images.
we will start by updating our Ubuntu repositories
sudo apt-get update && sudo apt-get upgrade
Once done, we will start install the required base packages
sudo apt-get install postgresql postgresql-contrib postgis postgresql-10-postgis-2.4 postgresql-10-postgis-2.4-scripts osm2pgsql git
Just a brief description of all the above dependencies are mentioned below:
Furthermore, we will install mapnik packages and Node.js (npm)
sudo apt-get install curl unzip gdal-bin mapnik-utils libmapnik-dev nodejs npm
Now, we will globally install carlo dependency
sudo npm install -g carto
We will now install mod_tile
and renderd
to render and display tiles
sudo add-apt-repository ppa:osmadmins/ppa && sudo apt install libapache2-mod-tile renderd
Lastly, we will install certain font packages that are required
sudo apt-get install ttf-dejavu fonts-noto-cjk fonts-noto-hinted fonts-noto-unhinted ttf-unifont
Ufff.... π , I think we are done with installing packages. Now let's move on to the setup.
Firstly, we will begin by switching over to our postgres user
sudo -u postgres -i
Now, let's create a new database user
createuser osm
Next, we will create a new database named gis with the owner as the new user we have just created
createdb -E UTF8 -O osm gis
Now, setting the owner
psql -c "ALTER TABLE spatial_ref_sys OWNER TO osm;" -d gis
We will also enable two extensions for our created database
psql -c "CREATE EXTENSION postgis;" -d gis
psql -c "CREATE EXTENSION hstore;" -d gis
Now, that we have setup our postgres database for importing the tile data we can now exit
exit
Let's now set up a system user called osm
adduser osm
Now, we will clone the repository that contains styles and transformations scripts that we will need for database imports
git clone https://github.com/gravitystorm/openstreetmap-carto.git
Next, we will download the map data we will be using wget
wget -c http://planet.openstreetmap.org/pbf/planet-latest.osm.pbf
Now, alas, we can start importing the data
osm2pgsql --slim -d gis --hstore --multi-geometry --number-processes 2 --tag-transform-script /home/osm/openstreetmap-carto/openstreetmap-carto.lua --style /home/osm/openstreetmap-carto/openstreetmap-carto.style -C 12000 planet-latest.osm.pbf
Note: The -C
option should be used in a way that it matches the amount of RAM on your PC/Virtual Machine and --number-processes
matches the number of CPU cores.
Since this process will take quite a bit of time. It is recommended to run the entire process using a screen
multiplex session. For a quickie on screen
please click here. π
Now we use the osm
user and go into the directory where we had cloned the openstreetmap-carto
repository and run the python script that loads the shapefiles from the internet
scripts/get-shapefiles.py
Shapefiles are a format in which we can store GeoJSON data.
Now, we will use carto global dependency that was installed to convert project.mml
file to a style file for mapnik to use
carto project.mml > style.xml
Now, we will configure renderd
nano /etc/renderd.conf
There are a few points to note here:
num_threads
should match the number of cores on your map server.plugins_dir
should be /usr/lib/mapnik/3.0/input
XML
should match the style file generatedSave the file, now we will edit the initialization script in /etc/init.d/renderd
nano /etc/init.d/renderd
Here the RUNASUSER
be set to osm
Now, we will change the permission of the mod_file
folder
sudo chown osm:osm /var/lib/mod_tile/ -R
Now, we can reload the daemon and restart renderd
sudo systemctl daemon-reload && sudo systemctl daemon-reload
Now, you might browse to the address http:/127.0.0.1/osm/slippymap.html
and select local tiles to view your imported map tiles.
Voila! That's pretty much it, you have setup your own tile server.
Happy Grizzly π» Coding!
Node.js 24 is here with game-changing features like V8 13.6, Float16Array, explicit resource management, WebAssembly Memory64, and npm 11. Learn what's new and how to upgrade smoothly.
This blog post focuses on the new experimental feature in React 18 called the use hook. It explains how the use hook can be used to create custom hooks that can be reused across different components, simplifying state management and making code more modular.
In this blog post we'll explore how Next.js can help you optimize your website for search engines From server-side rendering to automatic code splitting we will cover all the features that make Next.js a powerful tool for SEO optimization