【Flutter】google_maps_flutterのMarkerをプルプルさせる

2025/02/02に公開

1. はじめに

google_maps_flutter のマーカーをプルプル震わせてみます。

https://gist.github.com/motucraft/12b767327c5bc039e6f2ac3dd779926a

2. 悩み

google_maps_flutterMarker 周りを触るとき、いつも厄介だなと思うのが BitmapDescriptor ですね。これはもう何年も前から...

私が最初にこの議論を認識したのは3, 4年前だったと思います。エコシステムの成長とともに「そのうち解消されるっしょ」と思っていましたが、状況は変わらないまま既に2025年を迎えました。この先もおそらく変わらないでしょうね😢

他の選択肢としては、flutter_map を使うという選択もあると思います。
ただ、Mapの情報量としてはやはり Google Map が圧倒的で、なかなか OpenStreetMapMapbox など他のタイルベンダーを使用するという選択に至りません。

他には、flutter_map を利用しつつタイルレイヤに Google Map の Map Tiles API を使うという方法もあると思いますが、

https://docs.fleaflet.dev/tile-servers/using-google-maps

Tile providers that also provide their own SDK solution to display tiles will often charge a higher price to use 3rd party libraries like flutter_map to display their tiles. Just another reason to switch to an alternative provider.

ということで、なかなか現実的ではなさそうに思っています。Map Tiles API の使用量と請求額 を見ると、1タイルのリクエストごとに課金されそうなので費用面が怖いですよね。

2.1 怪しそうなアイデア

そのような中で、こんな手もあるのか!!と思ったのがこれです。

flutter_map のタイルレイヤに google_maps_flutter を使うというアイデアですね。
GoogleMapの方はIgnorePointer して、mapEvent にて flutter_mapgoogle_maps_flutter の同期をかけているようです。

この方法は、google_maps_flutter を使用していることにはなるので Google Map の利用規約違反にはならない、という論理なのでしょうか?怪しいと思いますけどね..
機能的にも こちらのコメント にあるようにAndroidでマーカーが遅延する問題があるようでした。flutter_mapgoogle_maps_flutter の同期をかけるという仕組みなので、このような問題も発生するのでしょうね。

2.2 map パッケージ

map というパッケージもあるようです。
これも事情は同じように思います。exampleを見てみると、以下のようにタイルサーバを利用しており、Legal notice と書かれています。これは Google Map の利用規約に違反すると思いますので商用利用には難しそうですね。

https://github.com/xclud/flutter_map/blob/d7979cdca4c25369f60c4539473562edaa62d47e/example/lib/utils/tile_servers.dart#L3-L10


色々と考えてはみるものの、結局 google_maps_flutter を利用するしかなさそう、という悩みでした。

3. おわりに

2025年にもなったので、google_maps_flutter の状況変化していないかな?と少し探ってみたのですが、悩みは変わらずでした。Googleさんのやる気はなさそうですので、この先も変わらないのだろうなと思っています。

有名どころのアプリ(ナビアプリ、タクシー配車アプリ、宅配アプリなど)を眺めてみても、どれもネイティブ実装のようですね。マップが機能の中心だったり存在価値となるようなアプリを Flutter で、というのは苦しいでしょうね。もちろん、ROI次第でしょうけど。

GitHubで編集を提案

Discussion