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_topology



postgis_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インストールマニュアルがあります。 要するに、今度はマップディレクトリのlib



bin



PATH



に追加します。 新しいシステム変数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で解析されます。 しかし、これに加えて、 lib



bin



への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



)。 PATH



bin



へのパスPATH



追加し、新しい変数PROJ_LIB



nad



へのパス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



All Articles