🧩

Flutter--入力された緯度経度を三次元空間座標に変換する with chatGPT

2023/01/20に公開

大きな目標

Unityの空間で検索結果を三次元的に表示し、例えば開架の図書館内を歩きながらときどき本を手に取るような閲覧の仕方を可能にする。

中期的な目標

データベースに無関心なuserが入力しても適切なデータがMySQLに蓄積されるようなフロントをFlutterで作る。

今日の目標

入力された緯度経度を三次元空間座標に変換する。

ChatGTPへの質問

FlutterでtextFieldに入力された
latをラジアンに変換してsnとし、
lngをラジアン変換してewとし、
さらにそれらを用いて 
x=cos sn * cos ew
y=sin sn
Z = cos sn * sin ew
の三つを出力するコードを書いてください。

import 'package:flutter/material.dart';
import 'dart:math' as math;

class MyHomePage extends StatefulWidget {
  
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  double lat = 0.0;
  double lng = 0.0;
  double x = 0.0;
  double y = 0.0;
  double z = 0.0;

  
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('My App'),
      ),
      body: Column(
        children: [
          Padding(
            padding: const EdgeInsets.all(8.0),
            child: TextField(
              onChanged: (value) {
                setState(() {
                  lat = double.parse(value);
                });
              },
              keyboardType: TextInputType.number,
              decoration: InputDecoration(
                hintText: 'Enter Latitude',
              ),
            ),
          ),
          Padding(
            padding: const EdgeInsets.all(8.0),
            child: TextField(
              onChanged: (value) {
                setState(() {
                  lng = double.parse(value);
                });
              },
              keyboardType: TextInputType.number,
              decoration: InputDecoration(
                hintText: 'Enter Longitude',
              ),
            ),
          ),
          RaisedButton(
            child: Text('Convert'),
            onPressed: () {
              setState(() {
                double sn = (math.pi * lat) / 180;
                double ew = (math.pi * lng) / 180;
                x = math.cos(sn) * math.cos(ew);
                y = math.sin(sn);
                z = math.cos(sn) * math.sin(ew);
              });
            },
          ),
          Text('x: $x'),
          Text('y: $y'),
          Text('z: $z'),
        ],
      ),
    );
  }
}

まとめ

textFieldにHintテキストまで書いてくれた。
RaisedButtonはエラーが出たので、TextButtonに変更。
void main(){}を加えて、text表示を多少いじった結果がこちら。
ほんとうは、textFieldに入力ではなく、Googlemapのピンから取得した位置情報を使いたいのだが、それはまた改めて。

Flutter大学

Discussion