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】端末の気圧情報と天気情報から現在地の高度を算出する は終わりです。
コメント