Python

緯度経度から付近の地図を画像で保存するtip

先日、SIGNATEのマイナビコンペが終了しました。

自分のチームではアイデア賞を入賞しましたが、そこで行った処理の一部についてまとめようと思います。(全体の振り返りはまた今度)

コードは最後に書きます

どんな処理をするのかな

  1. foliumで地図データのhtmlを生成
  2. seleniumでhtmlファイルをクロップし、pngファイルで保存する

するだけです。

ただ、調べてもあまり情報がなかったので書こうかなと思いました。

①foliumで地図データのhtmlを生成

そもそもfoliumを知っている人はどれくらいいるのでしょうか。少なくとも僕は今まで知りませんでした。

https://qiita.com/pork_steak/items/f551fa09794831100faa

ここの記事がわかりやすかったです。

試しにやってみるとこのようになります。(読み込みが終わってないですが)

引数に緯度経度を渡してあげれば勝手にファイルを作ってくれるのでかんたんにできます。

ちなみに白黒や地形図などいろんな種類の地図を出力させることもできます。

②seleniumでhtmlファイルをクロップすし、pngファイルで保存する

driver.save_screenshot()

でできます。引数には保存するパスを指定します。

地図データが意外に重いので2秒くらいは待ったほうがいいと思います(time.sleep(2))

気を使うとしたら、ファイルのパスですね。

driver.get()では絶対パスが必要です。

sys.pathでワーキングディレクトリを取得するので、それに相対パスにくっつけることで絶対パスにすることができます。

driver.get("file:///{}/sample.html".format(sys.path[0]))

まとめ

あらかんたん。調べてみれば案外かんたんにできるものですね。

マイナビコンペではこれを使って全データの地図を取得しました。

データ数が多く、1回のループに5秒くらいかかったのでjoblibで全コア使用し一晩ぶん回してやっと終わりました。

train, test合わせて20GB超えてしまったので驚きました(Google Driveの100GBプラン入っててよかった)

 

コードをおいておきます

 

COMMENT

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です