PythonでGeoSpatial dataを可視化する。[Chapter 6]
PythonでGeoSpatial dataの解析と操作について[Chapter 5] に引き続き、PythonでGeoSpatial dataの可視化の基本を学んでおきます。PythonでGeoSpatialをやってみる。[Chapter 1] でPythonとGeoSpatialに関するlibraryが設定できているもとして進めていきます。
本tutorialは、Python Geospatial Developmentを参考にして、実践的に使えるPythonでGeoSpatialの使い方を学んでいくものです。
また、本Blog中のsource code等に関しては、あくまでも参考としてください。なにがあっても責任とれませんので。
そこんところ、ヨロシク~~!!
GeoSpatial dataの可視化
空間情報データを扱い目に見えるようにするには、raster dataとしては、PythonでGDALをちょろっと使ってみる。[Chapter 3] で学んだようにpylabなどを使って可視化できます。vector dataを表示させるには、mapnikを使ってimageを出力することができます。
mapnikは、vector dataをrenderする際に使うopen source library toolkitです。
mapnik自身はc++で書かれていて、c++、pythonなどで使うことができます。
日本語での説明は、mapnikとはを参考にしてください。
Mapnik
Pythonでは、GeoSpatialなVector dataの可視化はこのmapnik libraryを使いますを使います。mapnikについては、mapnik – GitHubを参考にしてください。
mapnikとは、「Pythonで使うGeoSpatialなVector dataの可視化のlibrary群」と言えるでしょうか。
Python Geospatial Developmentによれば、
の図のようなlibrary構成になっています。
Map objectを作成するとき、下記の事項が必要になります。
-
Mapの幅と高さ
-
mapの空間参照
-
背景色はと前景色
その後、mapのLayerを定義します。そのlayerには下記の事項が必要になります。
-
名前
-
LayerデータをDataSourceオブジェクトの定義。Data Sourceは、Database、shapefile、またはGDAL/OGR Data Sourceが使えます。
-
Layerで使う空間参照。全体として地図で使用される空間参照は違っていても問題ない。
-
Layerで使うStyle list。Styleは実際に(多くの場合XML style sheet)別の場所で定義されているので、それぞれのスタイルは、名前で呼ばれています。
最後に、mapnikの様々なlayerを描画するstyleを定義します。
それぞれのstyleは、名前とstyleの定義の構成しているruleを持っています。それぞれのruleは、
-
最小スケールと最大スケール値。マップの縮尺がこの範囲内であれば、ルールにのみ適用されます。
-
filter expression。ruleは、このfilter expressionに一致するように適用されます。
-
Symbolizersのlist。これらmatching featuresがマップ上に描画される方法を定義します。
mapnikの実装するSymbolizersのさまざまな種類の数があります。
-
LineSymbolizerは、lineに沿って、 “stroke”、linear ring、またはpolygonの外側の周りを描画するために使用されます。
-
LinePatternSymbolizerは、lineに沿って、 “stroke”、linear ring、またはpolygonの外側の周りを描画する画像ファイルの内容を(名前で指定された)を使用します。
-
PolygonSymbolizerはpolygonの内部を描画するために使用される。
-
PolygonPatternSymbolizerは、polygonの内部を描画する画像ファイルの内容を(再び名で指定された)を使用します。
-
PointSymbolizerの機能は、symbolを描画する画像ファイルの内容を(名前で指定された)を使用します。
-
TextSymbolizerの機能は、textを描画します。描画されるtextは、機能の属性のいずれかから取られ、textを描画する方法を制御するための多数のオプションがあります。
-
RasterSymbolizerは、どのGDALデータセットから取られたraster dataを描画するために使用されます。
-
ShieldSymbolizerは一緒にtext labelと点を描画します。これは、textとimageの両方が一緒に描かれていることを保証することを除いてlabelを描画するTextSymbolizerを描画するPointSymbolizerの使用に似ています。
-
BuildingSymbolizerそれはpolygonが三次元の建物であることが表示されるように、polygonを描画するために、擬似3D効果を使用しています。
-
最後に、MarkersSymbolizerは、次の青方向矢印を描画。polygonおよびline geometryの方向。地図上に一方通行を描画するために使用されることを意図している。
mapnikについては、mapnik GitHUBを参考にしてください。mapnikについて説明し出すと結構な量になるので、自習しておいてくださいね。
自習する際は、Learning Mapnik wikiが非常に参考になります。
mapnikのexample code
mapnikのinstallとdemo checkした後に、簡単なexample codeを動かしてみます。
mapnik Install
まず、mapnikは、mapnik downloadから、使用しているPythonのversionにあわせたinstallerをdownloadして、mapnik windows installの内容で環境設定しても、なぜか動きません。「scriptをcompileしてくださいね」なエラーが出てしまいます。 私の環境だけの問題かもしれませんが、ここでは、mapnikとはから、mapnik-2.0.1rc0.zipをdownloadして、環境設定を行いました。
のように、rundemo.pyと同じfolderにpng,pdf,tif,jpg形式等のfileが出力されます。
出力されないようならば、installか環境設定がうまくいっていないので、確認してください。
Example code
次に、Ediorで下記のcodeを入力して、保存します。
保存先はf:¥python_example¥chapter_3¥ folderにmapnik-example.pyで保存します。
[python]
import mapnik
symbolizer = mapnik.PolygonSymbolizer(mapnik.Color("darkgreen"))
rule = mapnik.Rule()
rule.symbols.append(symbolizer)
style = mapnik.Style()
style.rules.append(rule)
layer = mapnik.Layer("mapLayer")
fn = "f:¥¥shapefile_data¥¥TM_WORLD_BORDERS-0.3.shp"
layer.datasource = mapnik.Shapefile(file=fn)
layer.styles.append("mapStyle")
map = mapnik.Map(800, 400)
map.background = mapnik.Color("steelblue")
map.append_style("mapStyle", style)
map.layers.append(layer)
map.zoom_all()
mapnik.render_to_file(map, "map.png", "png")
[/python]
注意)上記codeで¥¥は全角ですので、半角にするかもしくは、バックスラッシュに置き換えてください。
次に、スタート → プログラム → Python 2.7 → IDLE(Python GUI)でShellを動かて、メニューから File → Open で先ほどのmapnik-example.pyを読み込みこむと、
な感じでfile openされます。
後は、F5 keyを押すか、メニューからRUN → Run Moduleで実行できます。
では、実行してみると、何も表示されませんが、f:¥python_example¥chapter_3にmap.pngが作成されています。
これを開いてみると
な感じでshapefileを読み込んでpng形式で出力されていることがわかります。
ほかの出力形式で試してみましょう。
[python]
symbolizer = mapnik.PolygonSymbolizer(mapnik.Color("darkblue"))
mapnik.render_to_file(map, "map2.jpg", "jpeg")
[/python]
で2カ所を変更して、保存後実行すると、f:¥python_example¥chapter_3にmap2.jpgが作成されています。
これを開いてみると
な感じでshapefileを読み込んでjpeg形式で出力されていることがわかります。
とりあえずは問題ないようですね。
後、libraryに何が含まれているかは、helpコマンドでみることができます。
たとえば、mapnikのlibraryのclass構成などが表示されて、
な感じで使うことができます。ただし、最初にLibraryをimport mapnikが必要です。
今回のまとめ
今回は、Python GUI Shellを使って、超~~簡単なmapnikのexampleを作成しました。このmapnikを使えばQGISのようなGIS Applicationのできます。 そして、wxPythonと組み合わせてPython GUI Applicationの作成も可能になると思います。いろいろとtryしてみてください。
次回は、PythonでのGeoSpatial dataについて概要を学んでいきます。
また、本tutorialは、Python Scriptの基本的なことはある程度理解している前提で今後も話を進めていきます。また、誤字、脱字、spell間違いや勘違いや翻訳間違いなど多々出てくると考えられます。
それは違うじゃん!!とかいろんな意見をいただければと思います。
そこんところ ヨロシク~~!!
最近のコメント