Un tile server de Paraguay

Usando un tile server de datos OSM de Paraguay (imagen destacada)

Un tile server de Paraguay

Categoría: Servidores

Este post es técnico, pero muy útil si quieren instalar un servidor de tiles con datos OSM de Paraguay.

Obs:

  • Se utiliza Ubuntu Server 18.04.4 LTS de 64 bits.
  • Instalamos y usamos:
    • PostgreSQL 10 y PostGIS 2.4
    • Mapnik 3
    • Node.js 10
    • Apache2

Hardware usado:

  • 4 Núcleos.
  • 4 GB de memoria RAM.
  • 30 GB de disco duro.

Consiste en 5 componentes:

  • Mod_tile
  • Renderd
  • Mapnik
  • osm2pgsql
  • Base de datos PostgreSQL/PostGIS

Entramos a la terminal y tecleamos lo siguiente:

sudo apt update && sudo apt install libboost-all-dev git-core tar unzip wget bzip2 build-essential autoconf libtool libxml2-dev libgeos-dev libgeos++-dev libpq-dev libbz2-dev libproj-dev munin-node munin libprotobuf-c0-dev protobuf-c-compiler libfreetype6-dev libtiff5-dev libicu-dev libgdal-dev libcairo-dev libcairomm-1.0-dev apache2 apache2-dev libagg-dev liblua5.2-dev ttf-unifont lua5.1 liblua5.1-dev libgeotiff-epsg 

Instalar PostgreSQL/PostGIS

sudo apt-get install postgresql postgresql-contrib postgis postgresql-10-postgis-2.4 postgresql-10-postgis-scripts
sudo apt-get autoremove && sudo apt clean && sudo apt autoclean

Crear base de datos

sudo -u postgres -i
createuser renderaccount
createdb -E UTF8 -O renderaccount gis
psql
\c gis
CREATE EXTENSION postgis;
CREATE EXTENSION hstore;
ALTER TABLE geometry_columns OWNER TO renderaccount;
ALTER TABLE spatial_ref_sys OWNER TO renderaccount;
ALTER user postgres WITH password 'passSeguro123456PY#';
\q
exit

Crear usuario

sudo useradd -m renderaccount
sudo passwd renderaccount

Instalar osm2pgsql

sudo apt install make cmake g++ libboost-dev libboost-system-dev libboost-filesystem-dev libexpat1-dev zlib1g-dev libbz2-dev libpq-dev libgeos-dev libgeos++-dev libproj-dev lua5.2 liblua5.2-dev
sudo apt-get autoremove && sudo apt clean && sudo apt autoclean
mkdir ~/repositoriosGIT
cd ~/repositoriosGIT
git clone git://github.com/openstreetmap/osm2pgsql.git
cd osm2pgsql
mkdir build && cd build
cmake ..
make -j4
sudo make install

Instalar Mapnik library

sudo apt install autoconf apache2-dev libtool libxml2-dev libbz2-dev libgeos-dev libgeos++-dev libproj-dev gdal-bin libmapnik-dev mapnik-utils python-mapnik
sudo apt-get autoremove && sudo apt clean && sudo apt autoclean

Verificar que mapnik este instalado correctamente. Tecleamos en la terminal lo siguiente:

python
import mapnik

Si no sale algún error es porque esta instalado correctamente. Volvemos a teclear en la terminal:

quit()

Instalar el mod_tile

cd ~/repositoriosGIT
git clone git://github.com/openstreetmap/mod_tile.git
cd mod_tile
./autogen.sh
./configure
make -j4
sudo make install
sudo make install-mod_tile
sudo ldconfig

Instalar Node.js

cd ~
sudo apt install curl
curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash -
sudo apt install -y nodejs
curl -sL https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
sudo apt update
sudo apt-get autoremove && sudo apt clean && sudo apt autoclean

Carto:
Entramos a la terminal y tecleamos lo siguiente:

cd ~/repositoriosGIT
git clone git://github.com/gravitystorm/openstreetmap-carto.git
cd openstreetmap-carto
sudo npm install -g carto
carto -v

Sale por pantalla:

1.2.0

Volvemos a teclear en la terminal:

 carto project.mml > mapnik.xml

Cargar datos al servidor
El país es Paraguay, pero ya depende de vos lo que queres importar.

Volvemos a teclear en la terminal:

cd ~
mkdir data
cd data
sudo wget -c http://download.geofabrik.de/south-america/paraguay-latest.osm.pbf

Importar datos OSM a la base de datos

sudo osm2pgsql -d gis -U postgres -W -P 5432 -H localhost --create --slim  -G --hstore --tag-transform-script ~/repositoriosGIT/openstreetmap-carto/openstreetmap-carto.lua -C 3000 --number-processes 4 -S ~/repositoriosGIT/openstreetmap-carto/openstreetmap-carto.style ~/data/paraguay-latest.osm.pbf

Shapes

cd ~/repositoriosGIT/openstreetmap-carto/
scripts/get-shapefiles.py

Fuentes

sudo apt install fonts-noto-cjk fonts-noto-hinted fonts-noto-unhinted ttf-unifont
sudo apt-get autoremove && sudo apt clean && sudo apt autoclean

Configuración del servidor web
Volvemos a entrar a l terminal y tecleamos lo siguiente:

sudo nano /usr/local/etc/renderd.conf

Cambiar lo siguiente:

plugins_dir=/usr/lib/mapnik/3.0/input
XML=/home/proyectosbeta/repositoriosGIT/openstreetmap-carto/mapnik.xml
URI=/hot/

Ahora guardamos los cambios (control + o) y luego cerramos el editor (control + x).

Configurar Apache
Volvemos a teclear en la terminal:

sudo mkdir /var/lib/mod_tile
sudo chown renderaccount /var/lib/mod_tile
sudo mkdir /var/run/renderd
sudo chown renderaccount /var/run/renderd

Configurar mod_tile
Volvemos a entrar a la terminal y tecleamos lo siguiente:

sudo nano /etc/apache2/conf-available/mod_tile.conf

Agregamos la siguiente linea:

LoadModule tile_module /usr/lib/apache2/modules/mod_tile.so

Ahora guardamos los cambios (control + o) y luego cerramos el editor (control + x). Volvemos a teclear en la terminal:

sudo a2enconf mod_tile

Volvemos a teclear en la terminal:

sudo nano /etc/apache2/sites-available/000-default.conf 

Agregamos entre «ServerAdmin» and «DocumentRoot»:

LoadTileConfigFile /usr/local/etc/renderd.conf
ModTileRenderdSocketName /var/run/renderd/renderd.sock

# Timeout before giving up for a tile to be rendered

ModTileRequestTimeout 0

# Timeout before giving up for a tile to be rendered that is otherwise missing

ModTileMissingRequestTimeout 30

Ahora guardamos los cambios (control + o) y luego cerramos el editor (control + x). Volvemos a teclear en la terminal:

sudo service apache2 reload
sudo service apache2 reload

Permisos de base de datos

sudo su
su postgres
psql

ALTER DATABASE gis OWNER TO renderaccount;
GRANT ALL PRIVILEGES ON DATABASE gis TO renderaccount;

\c gis
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO renderaccount;
ALTER TABLE geometry_columns OWNER TO renderaccount;
\q
exit
exit

Cambiamos de usuario

su renderaccount

Correr el rendered por primera vez:

renderd -f -c /usr/local/etc/renderd.conf

Entramos a nuestro navegador y tecleamos en la barra de direcciones:

http://192.168.1.204/hot/0/0/0.png

Probando el tile server
Probando el tile server

Usar en tu app de mapas:

http://192.168.1.204/hot/{z}/{x}/{y}.png

Ejemplo de una app usando el tile server
Ejemplo de una app usando el tile server
Ejemplo de una app usando el tile server
Ejemplo de una app usando el tile server


2 Comments

Patronews

25 abril 2020 en 6:53 pm

Muchas gracias por todo el aporte en cuanto a OSM, clases totalmente magistrales..

    admin

    26 abril 2020 en 1:48 am

    Por nada Patronews. Se tiene que mostrar las ventajas del proyecto OSM para que visualicen el gran potencial.

Deja un comentario