【Flutter】現在位置から画面中央へgoogle_maps_flutterのPolylineを引く
1. はじめに
タクシーアプリなどで見かけるアレです。google_maps_flutter でやってみます。
| Polylineを引く | zoom level 変更時の挙動 |
|---|---|
![]() |
![]() |
2. 困ったこと
2.1 パフォーマンス劣化
直線の Polyline であれば良いのですが、破線を描画しようとするとzoom levelによってマップのパフォーマンスが著しく劣化する事象に困りました。パフォーマンス劣化して最終的にはアプリがダウンします。ズームアウトさせた場合に顕著でしたので、破線の描画数が膨大になることが問題なのだろうと考えました。
そこで、ズームアウトした(zoom levelが小さくなった)場合は、以下のように指数関数的に PatternItem の length を変化させるようにして回避しました。
2.2 Current Position
geolocator で現在位置を入手しています。 しかし、google_maps_flutter がデフォルトで表示してくれる現在位置を示す青い丸と、geolocator が返してくる位置情報が完全一致しません。
これは位置情報の取得方法が違うのだろうなと思うのですが、google_maps_flutter は位置情報を返してくれるインタフェースはありません。そのため、Polyline の端を現在位置にピッタリフィットさせることができません。
今回はスルーしましたが、ここにこだわる場合は google_maps_flutter のデフォルトの現在位置アイコンの表示をやめて自前で表示するしかなさそうですね。
3. おわりに
google_maps_flutter_platform_interface の Changelog を見ていると、2.10.0 で Adds support for ground overlay. とありますね。
以前からFeature Requestが出ていたグラウンドオーバーレイがようやくサポートされそうです。
現時点では、まだ本体のPRはマージされておらず、サブPRがマージされたという状況のようです。
対応されることは無いのかなと思っていましたが、進捗しているようで何よりです。動向を気にしておこうと思います。


Discussion