MyEnigma

とある自律移動システムエンジニアのブログです。#Robotics #Programing #C++ #Python #MATLAB #Vim #Mathematics #Book #Movie #Traveling #Mac #iPhone

Google Earth上にグラフを簡単に描画できるPythonライブラリgoogleearthplotを作った

f:id:meison_amsl:20151213211915p:plain

目次

はじめに

この記事は2015年Python アドベントカレンダー 21日目の記事です。

 

Google Earthによるかっこいいグラフ

あるプレゼン資料でGoogle Earthに

棒グラフを書いている人がいて、

凄くかっこいいなと思い、

色々調べた所、

下記のGE Graphというツールを使っているようでした。

 

このツールを使うことで、

グラフ情報が含まれたCSVファイルから

Google Earth描画用のkmlファイルを出力してくれるみたいです。

 

しかし、このソフトはWindows専用ですし、

自分でカスタマイズできないので、

Pythonライブラリを作ってみました。

 

Google Earth上にグラフを簡単に描画できるPythonライブラリgoogleearthplot

今回作成した、

Google Earth上にグラフを簡単に描画できるPythonライブラリ

googleearthplotは下記のGithubリポジトリで公開されています。

github.com

 

Pythonライブラリなので、

WindowsやMac, Linuxなど

マルチプラットフォームで動きますし、

Webサービスなど、

自分のPythonツールに組み込むことも簡単だと思います。

 

googleearthplotを使うのに必要なツール

今回作成したPythonライブラリ

googleearthplotは

下記の外部ツールを使っているので

インストールする必要があります。

 

simplekml

kmlファイルを作成するための

pythonライブラリです。

インストールしていない場合は、

下記のコマンドでインストールして下さい。

$ pip install simplekml

 

pandas

有名なデータ解析ライブラリです。

CSVファイルを読み込む時に使用されています。

インストールしていない場合は、

下記のコマンドでインストールして下さい。

$ pip install pandas

 

Google Earth (Pro)

このツールはGoogle Earth用の

kmlファイルを作成するので、

Google Earthをインストールする必要があります。

 

先日、Google Earthの有料版(Pro)が無料になったので、

下記のリンクからGoogle EarthのProをインストールしましょう。

 

インストール方法

googleearthplotは下記のGitHubリポジトリにて公開されています。

github.com

 

下記のPyPIに登録されているので、下記のコマンドでpipを使ってインストールできます。

sudo pip install googleearthplot

下記はPyPIのプロジェクトページです。

googleearthplot 0.0.2 : Python Package Index

 

後は自分のコードで下記のコマンドで

googleearthplotクラスをインポートして下さい。

from googleearthplot import googleearthplot

 

使い方

下記のようなサンプルコードを実行することで、

様々なグラフを描画するための

kmlファイルを生成できます。

 

点をプロットする

指定した緯度経度のポイントに

点プロットをする場合は、

下記のようなコードを実行することで、

複数の点をプロットすることができます。

# Plot point chart
gep10 = googleearthplot()
lat = [ -77.6192, -77.6195, -77.6198, -77.6208, -77.6216]
lon = [43.1725, 43.1728, 43.173, 43.1725, 43.1719, 43.1719]
for (ilat,ilon) in zip(lat,lon):
    gep10.PlotPoints(ilat, ilon, "point")
gep10.GenerateKMLFile(filepath="sample10.kml")

 

上記のコードで生成されたkmlファイルをクリックすると、

下記の様にgoogle earth上で見えるはずです。

f:id:meison_amsl:20160227223341p:plain

 

棒グラフ

棒グラフは下記のように生成できます。

#A bar plot 
gep1=googleearthplot()
lat=18.333868#degree
lon=-34.038274#degree
num=100 #bar height size
size=1  #meter
name="barsample"
color="red"
gep1.PlotBarChart(lat,lon,num,size,name,color);
gep1.GenerateKMLFile(filepath="sample1.kml")

上記のサンプルコードにより生成された

kmlファイルをクリックすると、

下記のようなグラフがGoogle Earthで表示されます。

f:id:meison_amsl:20151213212014p:plain

  

また、下記のようにaddLabelフラグを立てることで、

PlotBarChart(lat,lon,num,size,name,color,addLabel=True)

グラフにラベルを追加することができます。

f:id:meison_amsl:20151221203319p:plain

 

CSVファイルから棒グラフを作成する

CSVファイルを読み込んで、

その結果から棒グラフを作成するのは、

下記のサンプルコードで可能です。

#bar plot from csv
gep=googleearthplot()
gep.PlotBarChartsFromCSV("barchartsampledata.csv")
gep.GenerateKMLFile(filepath="sample2.kml")

すると下記のようなグラフが得られます。

f:id:meison_amsl:20151213212049p:plain

読み込ませるCSVファイルは

下記のサンプルデータのような

フォーマットである必要があります。

 

ラインプロット

Google Earth上に線を書くのは、

下記のように実現できます。

#Plot line chart
gep2=googleearthplot()
lat=[-77.6192,-77.6192,-77.6195,-77.6198,-77.6208,-77.6216,-77.6216,-77.6216]
lon=[43.1725,43.1725,43.1728,43.173,43.1725,43.1719,43.1719,43.1719,43.1719]
gep2.PlotLineChart(lat, lon, name="trajectory",color="pink")
gep2.GenerateKMLFile(filepath="sample3.kml")

すると、下記のようなグラフが得られます。

f:id:meison_amsl:20151213212109p:plain

 

高さ情報付きのラインプロット

先ほどのラインプロットに

高さ情報を付けることも可能です。

#Plot line chart with height
gep3=googleearthplot()
lat=[-77.6192,-77.6192,-77.6195,-77.6198,-77.6208,-77.6216]
lon=[43.1725,43.1725,43.1728,43.173,43.1725,43.1719,43.1719]
height=[10,40,60,80,100,120,140]
gep3.PlotLineChart(lat, lon, heightList=height, name="trajectory2",color="aqua")
gep3.GenerateKMLFile(filepath="sample4.kml")

下記のような高さ情報付きのラインプロットが得られます。

f:id:meison_amsl:20151213212132p:plain

CSVファイルデータに基づくラインプロット

CSVファイルデータに基いて、

下記のようなラインプロットをすることも可能です。

#line plot from csv file
gep4=googleearthplot()
gep4.PlotLineChartFromCSV("sampledata/lineplotsampledata.csv", name="trajectory3", color="gold", width=10)
gep4.GenerateKMLFile(filepath="sample5.kml")

すると、下記のようなグラフが得られます。

f:id:meison_amsl:20151213212228p:plain

読み込ませるCSVファイルフォーマットに関しては、

下記のサンプルCSVファイルを参考にしてください。

 

CSVファイルデータに基づく3Dラインプロット

先ほどのCSVファイルに高さ情報を入れることで、

高さ情報を含んだラインプロットを

CSVファイルデータを用いて実現できます。

#line plot from csv file with height
gep5=googleearthplot()
gep5.PlotLineChartFromCSV("sampledata/lineplotsampledata2.csv", name="trajectory4", color="orange", width=10)
gep5.GenerateKMLFile(filepath="sample6.kml")

f:id:meison_amsl:20151213212301p:plain

 

こちらがサンプル・データです。

lineplotsampledata2.csv

 

画像のオーバレイ

ロゴなどの画像データを

google earthの画面上に貼り付けることができます。

 

#Plot overlay image sample
gep8=googleearthplot()
gep8.PlotOverlayImg("img/samplelogo.png",200,300,name="logo")
gep8.GenerateKMLFile(filepath="sample8.kml")

すると下記のような画面が得られます。

f:id:meison_amsl:20151213212324p:plain

 

グラフやフォントの色のオプション

グラフやフォントの色(color変数)は、

下記の中から選べます。

'aliceblue', 'antiquewhite', 'aqua', 'aquamarine', 'azure', 'beige', 'bisque', 'black', 'blanchedalmond', 'blue', 'blueviolet', 'brown', 'burlywood', 'cadetblue', 'changealpha', 'changealphaint', 'chartreuse', 'chocolate', 'coral', 'cornflowerblue', 'cornsilk', 'crimson', 'cyan', 'darkblue', 'darkcyan', 'darkgoldenrod', 'darkgray', 'darkgreen', 'darkgrey', 'darkkhaki', 'darkmagenta', 'darkolivegreen', 'darkorange', 'darkorchid', 'darkred', 'darksalmon', 'darkseagreen', 'darkslateblue', 'darkslategray', 'darkslategrey', 'darkturquoise', 'darkviolet', 'deeppink', 'deepskyblue', 'dimgray', 'dimgrey', 'dodgerblue', 'firebrick', 'floralwhite', 'forestgreen', 'fuchsia', 'gainsboro', 'ghostwhite', 'gold', 'goldenrod', 'gray', 'green', 'greenyellow', 'grey', 'hex', 'hexa', 'honeydew', 'hotpink', 'indianred', 'indigo', 'ivory', 'khaki', 'lavender', 'lavenderblush', 'lawngreen', 'lemonchiffon', 'lightblue', 'lightcoral', 'lightcyan', 'lightgoldenrodyellow', 'lightgray', 'lightgreen', 'lightgrey', 'lightpink', 'lightsalmon', 'lightseagreen', 'lightskyblue', 'lightslategray', 'lightslategrey', 'lightsteelblue', 'lightyellow', 'lime', 'limegreen', 'linen', 'magenta', 'maroon', 'mediumaquamarine', 'mediumblue', 'mediumorchid', 'mediumpurple', 'mediumseagreen', 'mediumslateblue', 'mediumspringgreen', 'mediumturquoise', 'mediumvioletred', 'midnightblue', 'mintcream', 'mistyrose', 'moccasin', 'navajowhite', 'navy', 'oldlace', 'olive', 'olivedrab', 'orange', 'orangered', 'orchid', 'palegoldenrod', 'palegreen', 'paleturquoise', 'palevioletred', 'papayawhip', 'peachpuff', 'peru', 'pink', 'plum', 'powderblue', 'purple', 'red', 'rgb', 'rosybrown', 'royalblue', 'saddlebrown', 'salmon', 'sandybrown', 'seagreen', 'seashell', 'sienna', 'silver', 'skyblue', 'slateblue', 'slategray', 'slategrey', 'snow', 'springgreen', 'steelblue', 'tan', 'teal', 'thistle', 'tomato', 'turquoise', 'violet', 'wheat', 'white', 'whitesmoke', 'yellow', 'yellowgreen'

 

最後に

次はこのpythonライブラリを使って、

CSVファイルをアップロードすると、

グラフ出力用のkmlファイルを出力してくれる

Webサービスを作ろうかと思います。

 

参考資料

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com

MyEnigma Supporters

もしこの記事が参考になり、

ブログをサポートしたいと思われた方は、

こちらからよろしくお願いします。

myenigma.hatenablog.com