Slide 1

Slide 1 text

Flutterにおけるマップ/ピン描画 2024/10/24 Katada Yuta Flutterアプリケーション上での過密なピン情報の表示に挑戦

Slide 2

Slide 2 text

INDEX 自己紹介 ENECHANGEでのモバイルアプリ開発について ピン表示をまとめる(クラスタリング)仕組み クラスタリングはなんのため? クラスタリングに仕込んだ工夫たち まとめ(宣伝) 1 2 3 4 5 6

Slide 3

Slide 3 text

3 LON Copyright © ENECHANGE Ltd., All rights reserved. Confidential / not for distribution About Me Yuta Katada ENECHANGE株式会社 ● 2023/12〜 FlutterエンジニアとしてENECHANGEに入社 ○ エネルギークラウド事業部/EVユニット ○ アプリエンジニア ● Swift/Kotlin修行中 ● 🎾󰝱🎮🍺 @ktd_yuta GitHub: Yuta-KTD

Slide 4

Slide 4 text

ENECHANGEでのモバイルアプリ開発に ついて プロダクト紹介

Slide 5

Slide 5 text

5 LON Copyright © ENECHANGE Ltd., All rights reserved. Confidential / not for distribution ENECHANGEでのアプリ開発について ENECHANGEではEV充電に関わるアプリを複数開発しています 基本的にそれらのアプリはFlutterを用いてiOS/Androidのクロスプラットフォーム開発をしています ENECHANGE Cloud EV[EV App]より引用: https://enechange.co.jp/e_cloud-ev/application/

Slide 6

Slide 6 text

6 LON Copyright © ENECHANGE Ltd., All rights reserved. Confidential / not for distribution ※ 2024/10/24時点 ENECHANGEでのアプリ開発について 膨大な充電器スポットのピン情報(全国20,654箇所※)を モバイル端末の小さい画面で表示したい クラスタリングやってみよう👌

Slide 7

Slide 7 text

ピン表示をまとめる仕組み(クラスタリ ング)について

Slide 8

Slide 8 text

8 LON Copyright © ENECHANGE Ltd., All rights reserved. Confidential / not for distribution 通常マップ(クラスタリングをしない) クラスタリングを適用したマップ ピン表示をまとめる仕組み(クラスタリング)について ● シンプル ● 表示ピンの詳細情 報は見えない ● ユーザーにズーム を誘導できる ● (処理も表示も)煩雑 ● ピンが重なり合って表 示情報が見えない 「マーカークラスタリング」と呼ばれる、近接するマーカーを統合する機能(※) ※: Google Maps JavaScript API: https://developers.google.com/maps/documentation/javascript/marker-clustering?hl=ja

Slide 9

Slide 9 text

9 LON Copyright © ENECHANGE Ltd., All rights reserved. Confidential / not for distribution 弊社ではFlutterアプリ上でクラスタリングを実現するために以下ライブラリを使用 google_maps_flutter + google_maps_cluster_manager google_maps_flutter: Google提供のマップ表示公式ライブラリ google_maps_cluster_manager: GoogleMapライブラリで使用されるマーカーを、クラスタリングした状態で受け渡 すことができる Flutterでのクラスタリング実現方法

Slide 10

Slide 10 text

10 LON Copyright © ENECHANGE Ltd., All rights reserved. Confidential / not for distribution Flutterでのクラスタリング実現方法 google_maps_cluster_managerは内部的にはジオハッシュ(※)を用いてクラスタリングを実現している クラスタリングの範囲の操作はジオハッシュの桁数を変えて表現している ジオハッシュとは? 地球上の座標を分割し、文字列に落とし込んだもので、桁数によってその分割範囲を操作できる 例: ジオハッシュxn7より、xn76u の方が高精度な(狭い)範囲を表現している(※位置関係は参考) ※: https://en.wikipedia.org/wiki/Geohash xn7 xn76u

Slide 11

Slide 11 text

クラスタリングは何のため? UX観点からクラスタリングの目的を再考する

Slide 12

Slide 12 text

12 LON Copyright © ENECHANGE Ltd., All rights reserved. Confidential / not for distribution クラスタリングは何のため? 🎉クラスタリング実装完了🎉 これだけでユーザーが充電器を探しやすくなったのか?🤔

Slide 13

Slide 13 text

13 LON Copyright © ENECHANGE Ltd., All rights reserved. Confidential / not for distribution クラスタリングを行うことで • ユーザーの目的にマッチした充電器をスムーズに見つけて欲しい • →ユーザーが見つけたい充電器はアプリ提供先顧客ごとに目的も変わるのでは? – ユーザーはなぜその企業のアプリを使用するのか? – 会社が充電器を提供しているのであれば、自社の充電器を使いたいから使っているのでは? クラスタリングは何のため? 特定の充電器を探しやすい仕掛けを作ろう!

Slide 14

Slide 14 text

クラスタリングに 仕込んだ仕込もうとしてる工夫たち 1. クラスタリングするピンとしないピンに分ける 2. クラスタリングをタップした時にズームする

Slide 15

Slide 15 text

15 LON Copyright © ENECHANGE Ltd., All rights reserved. Confidential / not for distribution クラスタリングに仕込もうとしてる工夫たち ① クラスタリングするピンとしないピンに分ける

Slide 16

Slide 16 text

16 LON Copyright © ENECHANGE Ltd., All rights reserved. Confidential / not for distribution クラスタリングに仕込もうとしてる工夫たち ① クラスタリングするピンとしないピンに分ける 特定の充電器のみをクラスタリングせずにピン表示する <想定したユーザーの行動> 特定の種別(提供者)の充電器を使いたい →少ない操作で見つけたい 青: クラスタリングしない 赤: クラスタリングする(他社) 実装例(※) ※: 公式example( https://github.com/bpillon/google_maps_cluster_manager/blob/master/example/lib/multiple.dart )を参考に実装

Slide 17

Slide 17 text

17 LON Copyright © ENECHANGE Ltd., All rights reserved. Confidential / not for distribution クラスタリングに仕込もうとしてる工夫たち ② クラスタリングをタップした時にズームする

Slide 18

Slide 18 text

18 LON Copyright © ENECHANGE Ltd., All rights reserved. Confidential / not for distribution クラスタリングに仕込もうとしてる工夫たち ② クラスタリングをタップした時にズームする クラスタリングをタップした時に、地図を詳細(狭域)表示する 特定の条件のマーカーにフォーカスする <想定したユーザーの行動> クラスタリングをタップする →クラスタリング内のスポットに行きたい (→クラスタリングの中でも特に特定の事業者の充電器にフォーカ スしたい) クラスタリングをタップ →マップ倍率を増やす →特定のマーカーを大きく する

Slide 19

Slide 19 text

19 LON Copyright © ENECHANGE Ltd., All rights reserved. Confidential / not for distribution クラスタリングに仕込もうとしてる工夫たち ② クラスタリングをタップした時にズームする マーカーをタップした際のメソッドに以下を仕込む ・フォーカス対象の指定 ・特定倍率までズームする

Slide 20

Slide 20 text

まとめ

Slide 21

Slide 21 text

21 LON Copyright © ENECHANGE Ltd., All rights reserved. Confidential / not for distribution • モバイルアプリという制約の中でいかにユーザーに目的の地理空間情報にアクセスしてもらえ るか? • その仕組みの一つとしてマーカークラスタリング機能を導入! • 弊社ではクラスタリングを通して何ができるのか?何がしたいのかを考察した結果👉 – クラスタリングをしないピンをあえて作る – クラスタリングをタップした時の挙動を工夫 まとめ 上記機能を随時追加予定!今後の反響に期待...!

Slide 22

Slide 22 text

22 LON Copyright © ENECHANGE Ltd., All rights reserved. Confidential / not for distribution • ENECHANGEでは今回紹介したEV充電アプリ以外にも、「エネルギーの未来を作る」という ミッションをベースに様々なプロダクトを提供しており、開発エンジニアを募集しています! • https://engineer-recruit.enechange.co.jp/ または「エネチェンジ エンジニア」で検索 一緒にエネルギーの未来を作るメンバーを募集中!

Slide 23

Slide 23 text

エネルギーの未来をつくる CHANGING ENERGY FOR A BETTER WORLD