Flutterアプリで地図を扱うとき、「2点間の距離」や「座標がポリゴン内にあるか」などのジオメトリ計算をしたくなる場面があります。
そのようなときに便利なのが maps_toolkit
パッケージです。
1. maps_toolkitとは?
Google Maps Android APIにある SphericalUtil
をFlutterで使えるようにしたパッケージです。
距離計算、ポリゴン判定、角度計算などのジオメトリ処理を手軽に実装できます。
2. インストール方法
pubspec.yaml
に追加:
dependencies:
maps_toolkit: ^2.0.1
インストール後に以下を実行:
flutter pub get
3. 2点間の距離を計算する
以下のコードで、**2地点の距離(メートル)**を計算できます。
import 'package:maps_toolkit/maps_toolkit.dart' as mp;
void main() {
final point1 = mp.LatLng(35.681236, 139.767125); // 東京駅
final point2 = mp.LatLng(34.693738, 135.502165); // 大阪駅
final distance = mp.SphericalUtil.computeDistanceBetween(point1, point2);
print('距離は ${distance ~/ 1000} km'); // 約400km
}
4. 座標がポリゴン内にあるかを判定
final polygon = [
mp.LatLng(35.0, 139.0),
mp.LatLng(35.0, 140.0),
mp.LatLng(36.0, 140.0),
mp.LatLng(36.0, 139.0),
];
final point = mp.LatLng(35.5, 139.5);
final isInside = mp.PolygonUtil.containsLocation(point, polygon, true);
print('ポリゴン内か?: $isInside');
5. 他にもできること
機能 | 説明 |
---|---|
computeHeading | 2点間の方位(角度)を計算 |
computeOffset | 緯度経度+距離+角度 → 新しい緯度経度を算出 |
isLocationOnEdge | 線上に座標があるか判定(ポリラインやポリゴンの辺) |
computeArea | ポリゴンの面積(平方メートル)を計算 |
6. 注意点
- このパッケージは地図描画機能はありません(Google Mapsなどと併用)
- 単位はほとんどが「メートル」「度(角度)」です
- 座標は
LatLng(latitude, longitude)
の順番です(逆にしないよう注意)
まとめ
特徴 | 内容 |
---|---|
距離・方角計算 | 緯度経度ベースで高精度な計算が可能 |
ポリゴン判定 | 座標が多角形内にあるか簡単にチェックできる |
描画機能なし | UIとは別でロジック計算に特化 |
Google Mapsと併用可 | 位置情報アプリやマップ分析で活躍 |
おわりに
maps_toolkit
は、Flutterで地図系のアプリを作るなら知っておいて損はないロジックパッケージです。
計算だけを行いたい場面で非常に軽量かつ便利なので、ぜひ活用してみてください。
参考リンク