- Publikovat mapovou službu nad daty OpenStreetMap, která bude publikovat tato data jako WMS v určitých stylech (Google, Default, BW, ...)
- Vytvořit vlastní styl, upravit, otestovat (např. v QGIS)
- Instalace potřebných balíků
- Vyklonovat projekt basemaps (použijeme fork OpenGeoLabs)
- Stáhnout potřebné pokladová globální mapa - hranice kontinentů a generalizované hranice kontinentů
- Nastavit databázi PostgreSQL
Na Ubuntu:
sudo apt-get install mapserver-bin mapcache-tools cgi-mapserver gdal-bin postgresql postgis\
build-essential python-dev protobuf-compiler libprotobuf-dev libtokyocabinet-dev python3-psycopg2 osmctools
- Připravit adresářovou strukturu
sudo make -p /opt
cd opt
- stáhnout imposm3 z githubu
wget https://github.com/omniscale/imposm3/releases/download/v0.10.0/imposm-0.10.0-linux-x86-64.tar.gz
- rozbalit
tar -xzf imposm-0.10.0-linux-x86-64.tar.gz
- Udělat si link, aby byl soubor spustitelný
sudo ln -s /opt/imposm-0.10.0-linux-x86-64/imposm /usr/local/bin/imposm
- ověřit fungování
imposm --help
Pokud už nějakou podobnou databázi máš, tak samozřejmě nevytvářet
sudo -u postgres createdb osm
Vytvořit uživatele osm
pro databázi osm
a nastavit heslo
sudo -u postgres createuser -P osm
Enter password for new role:
Enter it again:
V rámci databáze osm
vytvořit extensi postgis
sudo -u postgres psql osm
osm=> CREATE EXTENSION postgis;
osm=> \q
Vyklonujeme projekt basemaps (původně z MapServer, ale použijeme fork OpenGeoLabs, protože toho v sobě už má víc)
git clone ssh://git@github.com/opengeolabs/basemaps.git
cd basemaps
- Hranice kontintentů
- Generalizované hranice kontinentů
Uložit do adresáře basemaps/data/
mkdir data
cd data
wget https://osmdata.openstreetmap.de/download/land-polygons-complete-3857.zip
wget https://osmdata.openstreetmap.de/download/simplified-land-polygons-complete-3857.zip
Rozbalit
unzip land-polygons-complete-3857.zip
unzip simplified-land-polygons-complete-3857.zip
Nakopírovat obsah adresářů do adresáře basemaps/data
mv land-polygons-complete-3857/* ../
mv simplified-land-polygons-complete-3857/* ../
Vytvořit indexy
# cd basemaps/data
make
Vytvořit wrapper pro hlavní Makefile: Soubor basemaps/aname.mk
, který nastaví některé potřebné proměnné pro výslední MapFile
OSM_SRID = 3857
OSM_PREFIX = osm_new_
OSM_DB_CONNECTION = host=localhost dbname=osm user=osm password=HESLO_UZIVAKA_OSM port=5432
include Makefile
Použijeme Luxembursko, protože je rozumně velké. Je dohromady jedno, na čem to budeš testovat
cd basemaps
wget http://download.geofabrik.de/europe/luxembourg-latest.osm.pbf
Import do PostgreSQL
imposm import -connection postgis://osm:osm@localhost/osm -mapping CESTA_K_BASEMAPS/basemaps/imposm3-mapping.json -read luxembourg-latest.osm.pbf -write -optimize -overwritecache -srid 3857
V databázi by měly být tabulky s prefixem osm_new_
s daty (takhle jsme si to už dřív napsali do souboru aname.mk
sudo -u postgres psql osm
osm=# \dt
List of relations
Schema | Name | Type | Owner
--------+--------------------------+-------+----------
public | osm_new_admin | table | osm
public | osm_new_aeroways | table | osm
public | osm_new_amenities | table | osm
public | osm_new_buildings | table | osm
public | osm_new_landusages | table | osm
public | osm_new_landusages_gen0 | table | osm
public | osm_new_landusages_gen00 | table | osm
public | osm_new_landusages_gen1 | table | osm
public | osm_new_places | table | osm
public | osm_new_railways | table | osm
public | osm_new_railways_gen0 | table | osm
public | osm_new_railways_gen1 | table | osm
public | osm_new_roads | table | osm
public | osm_new_roads_gen0 | table | osm
public | osm_new_roads_gen1 | table | osm
public | osm_new_transport_areas | table | osm
public | osm_new_transport_points | table | osm
public | osm_new_waterareas | table | osm
public | osm_new_waterareas_gen0 | table | osm
public | osm_new_waterareas_gen1 | table | osm
public | osm_new_waterways | table | osm
public | osm_new_waterways_gen0 | table | osm
public | osm_new_waterways_gen1 | table | osm
public | spatial_ref_sys | table | postgres
(24 rows)
osm=#
Stačí dát jenom make
a jako vstupní soubor námi předpřipravený aname.mk
. Jako parametr musíme explicitně uvézt styl
make -f aname.mk STYLE=google
make -f aneme.mk STYLE=bw
Měly by vzniknout dva soubory: osm-google.map
a osm-bw.map
Měly by v nich být koretní napojení do databáze, v SQL Selectech je vidět správné jméno tabulky s prefixem osm_new_
MAP
...
LAYER
...
CONNECTIONTYPE postgis
CONNECTION "host=localhost dbname=osm user=osm password=HESLO_OSM port=5432"
DATA "geometry from (select geometry,osm_id, name as name from osm_new_buildings) as foo using unique osm_id using srid=3857"
...
...
END
Je možné použít lighthttpd, nginx, cokoliv, ale ukážu to na Apach2. Nejlépe je to popsané na https://github.com/mapserver/mapserver/wiki/Install-mapserver-on-ubuntu-18.04-from-official-repository takže parafrázuju:
- Nainstalovat apache2 a všechny potřebné balíky
sudo apt-get install apache2 apache2-bin apache2-utils cgi-mapserver mapserver-bin
- Povolit
mod-cgi
do serveru
sudo a2enmod cgi fcgid
- Nakonfigurovat spustitelnost skriptu v Apachi, podívat se, jestli je v souboru
/etc/apache2/sites-available/000-default.conf
něco takového a případně to tam doplnit nebo upravit
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin/">
AllowOverride All
Options +ExecCGI -MultiViews +FollowSymLinks
AddHandler fcgid-script .fcgi
Require all granted
</Directory>
- Server restart
sudo service apache2 restart
- V příkazové řádce
mapserv -v
-
V prohlížeči http://localhost/cgi-bin/mapserv?SERVICE=WMS&VERSION=1.1.1&REQUEST=GetCapabilities
-
Přidat cestu k našemu
google
mapfile http://localhost/cgi-bin/mapserv?MAP=/home/USER/src/basemaps/osm-google.map&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetCapabilities -
Přidat adresu http://localhost/cgi-bin/mapserv?MAP=/home/USER/src/basemaps/osm-google.map do QGIS jako vrstvu WMS a vyzkoušet
CGI skript pro případné přidání do
/usr/lib/cgi-bin/google