【Flutter】端末の気圧情報と天気情報から現在地の高度を算出する | ヒヨコ プログラミング(ヒヨプロ)

【Flutter】端末の気圧情報と天気情報から現在地の高度を算出する

Flutter

Flutter で端末の現在地の高度を算出してみたので、本記事ではその方法を紹介します!

高度の計算方法

高度は、以下の式で海面気圧、現在地の気圧、気温から求めることができます。

実装

気温、海面気圧の取得

高度を算出するために必要な気温と海面気圧については、OpenWeather の API で取得しました。
詳細は以下の記事で紹介していますので、ここでは割愛しますが、取得した気温、海面気圧は WeatherInfo というモデルクラスに持たせています。それぞれ、WeatherInfo.temperature と WeatherInfo.pressure で参照できます。

現在地の気圧の取得

現在地の気圧は、スマートフォンの気圧センサーから取得しました。
Flutter で気圧センサーの値を取得するために、sensors_plus パッケージを使用しました。

sensors_plus の気圧センサーの取得イベントである BarometerEvent を取得するメソッドを以下のように作成しました。

Future<BarometerEvent?> getBarometerEvent() async {
  final completer = Completer<BarometerEvent>();
  late final StreamSubscription<BarometerEvent> subscription;

  subscription = barometerEventStream().listen((event) {
      completer.complete(event);
      subscription.cancel();
    },
    onError: (error) {
      completer.completeError(error);
      subscription.cancel();
    },
  );

  return completer.future;
}

気圧センサーの値は、BarometerEvent.pressure で取得できます。

final barometerEvent = await getBarometerEvent();
print(barometerEvent.pressure);

高度を算出

高度を算出するために必要なパラメータが全部取得できたので、上記の式から高度を計算します。
上記の式をメソッドにしたのが、以下のコードです。引数には、天気情報とスマートフォンの気圧センサーの値を渡します。

num calcAltitude(WeatherInfo weather, num devicePressure) {
  const exponent = 1 / 5.257;
  const lapseRate = 0.0065;

  final pressureRatio = weather.pressure / devicePressure;
  final kelvinTemp = weather.temperature + 273.15;
  final numerator = (pow(pressureRatio, exponent) - 1) * kelvinTemp;
  return numerator / lapseRate;
}

以上で、Flutter で現在地の高度が算出できるようになりました。

まとめ

今回は、Flutter で現在地の高度を算出する方法について紹介しました!

  • 高度を算出するためには、海面気圧、現在地の気圧、現在地の気温が必要
  • 海面気圧と現在地の気温は、OpenWeather API を使用して取得
  • 現在地の気圧は、スマートフォンの気圧センサーから取得

以上で、【Flutter】端末の気圧情報と天気情報から現在地の高度を算出する は終わりです。

おすすめ書籍

コメント

タイトルとURLをコピーしました