1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Kotlinで地図アプリ(ゴミ拾いアプリ)作成。(11日目)完成?

Last updated at Posted at 2022-01-02

Kotlinで制作している、GoogleMapを使った、自作のゴミ拾いアプリ。制作11日目。

結論から言うと、本日、完成しました。

Node.jsを使いMySQLと接続する予定でしたが、レンタルサーバでは使えないようなので、PHP+jQueryを使う方法に変更しました。

#PHPでMySQLに接続しJson形式で出力

Qiitaで紹介されているコードを参考に、若干修正を加えて、動作チェック用のシンプルなコードを作成してみました。

sql_read.php
<?php
 
 define('DSN','mysql:host=(ホスト);dbname=(データベースネーム)');
 define('DB_USER','(ID)');
 define('DB_PASSWORD','(PASS)');
 define('TABLE_NAME','(テーブル名)');
 error_reporting(E_ALL & ~E_NOTICE);

 mb_language("uni");
 mb_internal_encoding("utf-8");
 mb_http_input("auto");
 mb_http_output("utf-8");
 
try {
    $dbh = new PDO(DSN, DB_USER, DB_PASSWORD);
} catch (PDOException $e) {
    echo $e->getMessage();
    exit;
}
 
 $sth = $dbh->prepare("SELECT * FROM ".TABLE_NAME);
 $sth->execute();
 
 $userData = array();
 
 while($row = $sth->fetch(PDO::FETCH_ASSOC)){
     $userData[]=array(
     'DATE'=>$row['DATE'],
     'type'=>$row['type'],
     'latitude'=>$row['latitude'],
     'longitude'=>$row['longitude']
     );
 }
 
 header('Content-type: application/json');
 echo json_encode($userData);
?>

出力結果:
※実際の位置情報を伏せる為、「000.000000000」にしています。

イメージ7472.jpg

参考サイト:

#JavaScript(jQery)からPHPを実行

jQeryを使って、上記で作成したPHPを実行して、結果を、表示するだけのテスト用のシンプルな物です。

sql_read.html
<html>
  <head>
    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
    <script type="text/javascript">
      function readPHP() {
        return $.ajax({
            url: "sql_read.php",
            dataType: "json",
            async: false
            }).responseText; 
      }
      var json = JSON.parse(readPHP());
      for (let i = 0; i < json.length; i++) {
        document.write(json[i].DATE);
        document.write(json[i].type);
        document.write(json[i].latitude);
        document.write(json[i].longitude);
        document.write("<br>");
      }
    </script>
  </head> 
  <body>
  </body>
</html>

イメージ7474.jpg

#昨日のコードと組み合わせて、地図上に表示

昨日作成したコードと、今日作成したコードを組み合わせて、MySQLから取得した位置情報を、地図上に表示してみます。

index.html
<html>
<head>
<meta charset="UTF-8">
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script async="" src="https://maps.googleapis.com/maps/api/js?key=(APIキー)&callback=initMap"></script>
<script>
  function readPHP() {
    return $.ajax({
        url: "sql_read.php",
        dataType: "json",
        async: false
        }).responseText; 
  }
  function initMap() {
    var mapMainPosition = new google.maps.LatLng(緯度, 経度);
    var name = { 0: '空き缶/ペットボトル', 1: '袋ゴミ', 2: '粗大ごみ' };
    var icon = { 0: 'gomi01.png', 1: 'gomi02.png', 2: 'gomi03.png' };

    var json = JSON.parse(readPHP());

    var data = new Array();
    for (let i = 0; i < json.length; i++) {
        var point = new google.maps.LatLng(json[i].latitude, json[i].longitude);
        data.push({date: json[i].DATE, position: point, content: name[json[i].type],icon: icon[json[i].type]},);
      }

    var map = new google.maps.Map(document.getElementById('gmap'), {
      zoom: 14,
      center: mapMainPosition,
      scrollwheel: false,
      mapTypeId: google.maps.MapTypeId.ROADMAP
    });
    
    for (i = 0; i < data.length; i++) {
      var myMarker = new google.maps.Marker({
        position: data[i].position,
        map: map,
        icon: {
          url: data[i].icon,
          scaledSize: new google.maps.Size(40, 40)
        }
      });
      attachMessage(myMarker, data[i].content,data[i].date);

    }
  }
  
  function attachMessage(marker, msg,date) {
    google.maps.event.addListener(marker, 'click', function(event) {
      new google.maps.InfoWindow({
        content: msg + "("+date+")"
      }).open(marker.getMap(), marker);
    });
  }
</script>
</head>
<body>
<div id="gmap" style="width:600px; height:400px; background-color:orange"></div>
</body>
</html>

お見せ出来ないですが、MySQLに記録されている位置情報を読み取って、地図上に表示できるようになっています。

イメージ7476.jpg

#完成?

一応当初の目標だった、

1.Kotlinで制作した地図アプリから位置情報をGET送信
2.サーバサイドで、PHPでGETリクエストを受信し、MySQLに保存
3.非公開の為、BASIC認証を作成
4.MySQLに保存されたデータを、ブラウザで地図上に表示(HTML,CSS,JavaScript,jQuery,PHP)

を達成しました。

#今後の課題

現状は、ただ地図にマーカーを表示するだけなので、一般公開する場合は、セキュリティ面を考慮したり、WEBフレームワークのBootsTrapを使ったり、グラフ表示するなど、必要に応じて、今後カスタムしていくかもです。

Kotlinで制作したアプリに関しても、最小限の機能しかないので、拡張して機能を増やすなど。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?