WindowsでのOSMデータベースベースのタイル生成のインストールと構成

免責事項


最近、OSMデータに基づいてタイルを生成するタスクが発生しました。 私は検索し、 いくつかの 記事を読みましたが、* nix-systemsはどこでも紹介され、Windowsを実行しているサーバーがありました。 最終的に、多かれ少なかれわかりやすいチュートリアルが見つかりましたが、それは少し時代遅れであり、どこでも詳細ではないので、いじくり回さなければなりませんでした。 成功した結論の後、私は私の経験が役に立つと思いました。

興味のある方は、猫の下でお願いします。

入門


インストールは、ソフトウェアなしで、クリーンなWindows 7および8.1で行われました。 次のものが必要です。

また、追加のツールが必要になりますが、それなしでは機能しません。

1. PostgreSQLをインストールして構成する


配布はオフサイトから取得できます。 インストールは非常に簡単ですが、いくつかのポイントがあります。

最初に、データベースが保存されているディレクトリを変更する必要があります(OSMデータが惑星全体で使用される場合、テラバイトまで必要になる場合があります)。 デフォルト(バージョン9.4の場合)は、 C:\Program Files\PostgreSQL\9.4\data

第二に、おそらくクラスターのロケールを変更する必要があります。 私の場合、 Russian, Russia 。 インストール中に、PostgreSQLサーバーのパスワードも求められますが、それも必要です。覚えておいてください。

PostgreSQL自体をインストールした後、データベースの拡張機能をインストールするためのインストールウィザードであるStackBuilderが起動します。 次の2つの拡張機能を選択する必要があります。SpatialExtensions-> PostGIS and Database Drivers-> JDBC。 デフォルトでは、インストール中のすべての設定。 PostGISのインストール中に、システム変数を作成する要求と、さらにいくつかの質問があります、同意します。 その後、PostgreSQLサービスを再起動する必要があります。

次に、 bin PostgreSQLディレクトリをPATHに追加します。 追加後、設定を適用するには、ログアウトしてから再度ログインする(logoff-login)必要があります。

インストールが正しいことを確認します。インストール段階で入力したパスワードを覚えておく必要があります。 プログラムでpgAdmin IIIを見つけて実行します。 サーバーのリストには、単一のlocalhost:5432 、接続されています。 失敗した場合、おそらくサービスは実行されていません。

ジオデータベーステンプレートを作成します。
 CREATE DATABASE template_postgis_20 WITH ENCODING='UTF8' OWNER=postgres CONNECTION LIMIT=-1 LC_COLLATE = 'Russian_Russia.1251' LC_CTYPE = 'Russian_Russia.1251' TABLESPACE=pg_default; 

テンプレートに2つの拡張を追加します: postgis_topologypostgis_topology 。 私たちはこの拠点から切り離されています。

template_postgis_20 template_postgis_20基づいてgisデータベースを作成します。
 CREATE DATABASE gis WITH OWNER = postgres ENCODING = 'UTF8' TEMPLATE = template_postgis_20 TABLESPACE = pg_default LC_COLLATE = 'Russian_Russia.1251' LC_CTYPE = 'Russian_Russia.1251' CONNECTION LIMIT = -1; 

ここから PostGIS GiSTのパッチを入手してください 。 コマンドラインからのパッチ:
 C:\Users\red>psql -U postgres -d gis -f legacy-postgis-gist.sql CREATE OPERATOR CLASS 

データベースの準備ができました。

2. Osm2pgsqlのインストールと構成


githubから最新リリースを取得して自分で収集するか、ここから完成したアーティファクト取得できます

osm2pgsqlで便利にダウンロード、解凍、名前変更します。 このディレクトリをPATH変数に追加します。 ログオフログイン。 すべてが機能することを確認します。
 C:\Users\red>osm2pgsql -h 

ヘルプを発行する必要があります。 githubのリポジトリから最後のdefault.styleを取得します。

すべてがOSMデータをインポートする準備ができています。

圧縮された形の惑星の地図の重さは約40 GBです。 たとえば、モスクワの地図は、たとえばここから取得できます 。 ダウンロード。

インポートするには、コマンドラインを実行します。
 C:\Users\red>osm2pgsql -d gis -U postgres -W -H localhost -P 5432 -s -SC:\osm2pgsql\default.style RU-MOW.osm.pbf 

-s 、つまり slim-一時データがデータベースに保存されるモード。 これにより、プロセスが遅くなり、ディスク使用量が増加しますが、RAM使用量は減少します。

すべてが正しい場合、パスワード要求が行われ、データベースへのダンプのインポートが開始されます。 最初の行には、あらゆる種類の警告がありますが、心配する必要はありません。すべてが正常です。 インポートが完了すると、次のようなものになります。
 Osm2pgsql took 160s overall 

データベース内のジオデータ。

3. Python 2.xをインストールします


ここから x86ディストリビューションをダウンロードします(WindowsのMapnikバイナリにはx86のみがあるため)。 1つを除いて、デフォルト設定を設定します。「python.exeをPATHに追加する」ことに注意するか、インストール後に手動で行ってください。 ログオフログイン。

インストールを確認します。
 C:\Users\red>python Python 2.7.10 (default, May 23 2015, 09:40:32) [MSC v.1500 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> 

Pythonの準備ができました。

4. Mapnikをインストールして構成する


繰り返しますが、2つのオプションがあります: githubからソースコードを自分で収集するか、 ここで既製のバイナリを取得しますWindows 32 bit Packageを探していWindows 32 bit Package 。ダウンロードして、 C:\mapnik-v2.2.0ます。

かなり詳細なwikiインストールマニュアルがあります。 要するに、今度はマップディレクトリのlibbinPATHに追加します。 新しいシステム変数PYTHONPATHを作成し、 C:\mapnik-v2.2.0\python\2.7\site-packagesへのパスを割り当てC:\mapnik-v2.2.0\python\2.7\site-packages 。これらは2つです。 このvcredistを入れて、それは3です。 ログオフログイン。

インストールを確認します。
 C:\Users\red>python Python 2.7.10 (default, May 23 2015, 09:40:32) [MSC v.1500 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>>import mapnik >>> 
可能性のあるエラーは、wikiで解析されます。 しかし、これに加えて、 libbinへのPATHの先頭に転送することを試みる価値があります。

そして、テストタイルを生成します。
 C:\Users\red>cd C:\mapnik-v2.2.0\demo\python C:\mapnik-v2.2.0\demo\python>python rundemo.py Pycairo not available... will render Cairo formats using alternative method 12 maps have been rendered in the current directory: - demo.png - demo256.png - demo64_binary_transparency.png - demo128_colors_hextree_no_alpha.png - demo_high.jpg - demo_low.jpg - demo.tif - demo.pdf - demo.ps - demo.svg - demo_cairo_rgb.png - demo_cairo_argb.png Have a look! 

ほとんどすべて。

githubに移動し、 PROJ.4ライブラリを見つけ、バイナリを見つけます: Prebuilt Win32 executables, DLL including NAD27 grid shift files 。 ダウンロード、解凍( c:\proj )。 PATHbinへのパスPATH追加し、新しい変数PROJ_LIBnadへのパスPATH追加します。 ログオフログイン。

もう少し。

スクリプトをダウンロードして、公式のsvnリポジトリからタイルを生成し、 c:\mapnik入れます

さらに、海岸線とスクリプトが機能するために必要なすべてのもの。 これにはget-coastlines.shスクリプトがありますが、bashで書かれており、Windowsでは動作しません。 しかし、それは非常にシンプルで短いため、すべてのステップをペンで繰り返します。

ダウンロード:
すべてのアーカイブをc:\mapnik\world_boundariesディレクトリにc:\mapnik\world_boundariesます。

最後の準備。 mapnik\inc移動し、 settings.xml.inc.templateファイルの名前をsettings.xml.inc.templateに変更しsettings.xml.inc

fontset-settings.xml.inc fontset-settings.xml.inc.templateファイル。

datasource-settings.xml.inc.templateファイルを編集しdatasource-settings.xml.inc
 <Parameter name="type">postgis</Parameter> <Parameter name="password">password</Parameter> <Parameter name="host">localhost</Parameter> <Parameter name="port">5432</Parameter> <Parameter name="user">postgres</Parameter> <Parameter name="dbname">gis</Parameter> <Parameter name="estimate_extent">false</Parameter> 

generate_tiles.pyスクリプトを少し修正しましょう:
193行目のブロック:
 if __name__ == "__main__": home = os.environ['HOME'] try: mapfile = os.environ['MAPNIK_MAP_FILE'] except KeyError: mapfile = home + "/svn.openstreetmap.org/applications/rendering/mapnik/osm-local.xml" try: tile_dir = os.environ['MAPNIK_TILE_DIR'] except KeyError: tile_dir = home + "/osm/tiles/" if not tile_dir.endswith('/'): tile_dir = tile_dir + '/' 
に置き換える
 if __name__ == "__main__": try: mapfile = os.environ['MAPNIK_MAP_FILE'] except KeyError: print('MAPNIK_MAP_FILE env var not found! Use default.') mapfile = 'C:/mapnik/osm.xml' # - try: tile_dir = os.environ['MAPNIK_TILE_DIR'] except KeyError: print('MAPNIK_TILE_DIR env var not found! Use default.') tile_dir = 'C:/tiles/' # - if not tile_dir.endswith('/'): tile_dir = tile_dir + '/' 

タイルが生成される境界(四角形の地理座標)を指定します。

前の213行目
  bbox = (-180.0,-90.0, 180.0,90.0) render_tiles(bbox, mapfile, tile_dir, 0, 5, "World") 
書く(私たちの場合、モスクワ)
  bbox = (37.32, 55.57, 37.88, 55.92) render_tiles(bbox, mapfile, tile_dir, 17, 17, "Moscow") exit() # ,        

ヒントとコツ
境界座標は、データの取得元であるosmファイルから取得されます(最初にあります)。 データファイルは非常に大きくなる可能性があるため、通常のテキストエディターで開くことはできません。EmEditor(有料)などのエディターを使用するか、自分でgrepをインストールすることをお勧めします。

パスを指定し、タイルの生成を開始します。
 C:\mapnik>generate_tiles.py 

プロセスは行かなければなりません。
数分から数週間かかります(全世界の場合で、最も強力な車ではありません)。

参照資料


0. softwaresimian.com/2012/12/02/openstreetmap-osm-install-on-windows-part-i-the-database
1. switch2osm.org/serving-tiles/manually-building-a-tile-server
2.wiki.openstreetmap.org/wiki/PostGIS/Installation
3.wiki.openstreetmap.org/wiki/Osm2pgsql
4.wiki.openstreetmap.org/wiki/Creating_your_own_tiles
5. habrahabr.ru/post/144675
6. habrahabr.ru/post/203212
7.データのロシア化: habrahabr.ru/post/259141

Source: https://habr.com/ru/post/J265329/


All Articles