今回はGoogleMapsApiを使ってGoogleMapを表示させます。

ルーティングの設定

ログインボタンを押したら “/MemoryMap/public/displayMap” のリクエストを発行します。

MemoryMap/routes/web.php に以下を追加し、上記リクエストでコントローラーの “displayMap”メソッドを動かします。

Route::get('/displayMap', 'MemoryMapController@displayMap');

MemoryMap/app/Http/Controllers/MemoryMapController.php に以下を追加し、”displayMap”ビューを返却します。

// Map画面を返却する
 public function displayMap(){
  return view('displayMap');
}

ブレードの作成とGoogleMapの表示

MemoryMap/resources/views/displayMap.blade.php は以下の通りにしています。

今回はとりあえず地図を表示させるだけです。

<!DOCTYPE HTML>
<HTML>

<HEAD>
    <META http-equiv="Content-Type" content="text/html; charset=utf-8">
    <TITLE>思い出MAP</TITLE>
    <style>
        .map {
            width:500px;
            height:500px;
        }
    </style>
</HEAD>

<BODY>

    <div id="map" class="map"></div>

    <script async        
    src="https://maps.googleapis.com/maps/api/js?key=[APIKEY]&callback=initMap">
  </script>
    <script>
        var map;
        function initMap() {
            map = new google.maps.Map(document.getElementById('map'), {
                center: { lat: 35.681236, lng: 139.767125 },
                zoom: 10
            });
        };
    </script>

</BODY>

</HTML>

<script>タグにasync属性を追加することで、非同期に JS ファイルをダウンロード・実行します。

src=”https://maps.googleapis.com/maps/api/js?key=[APIKEY] でGoogleMapのAPIを読込んでいます。

callback関数でinitMapメソッドを呼び出しています。

initMapメソッドの中でcenterで中心地を、zoomで拡大率を設定しています。

styleで幅と高さを指定しないと表示されないので要注意です。

ログインボタンを押すと以下の様にGoogleMapが表示される画面に遷移します。

GoogleMapにマーカーを設置

少し手を加えて、Mapにマーカーを表示させるためにinitMapメソッドに以下を追加します。

        function initMap() {
            map = new google.maps.Map(document.getElementById('map'), {
                center: { lat: 35.681236, lng: 139.767125 },
                zoom: 10
            });

            marker = new google.maps.Marker({ 
            position: { lat: 35.681236, lng: 139.767125 }, 
            map: map 
            });
        };

以下の様にマーカーが表示されます。

ブレイドとCSSの設定

地図を表示する画面のレイアウトを整えます。

ナビゲーションを追加してみました。またcssを読込むようにしています

MemoryMap/resources/views/displayMap.blade.php

<!DOCTYPE HTML>
<HTML>

<HEAD>
    <META http-equiv="Content-Type" content="text/html; charset=utf-8">
    <TITLE>思い出MAP</TITLE>
    <link rel="stylesheet" type="text/css" href="css/displayMap.css" media="all">
</HEAD>

<BODY>

     <header>
        <p class="head_title">思い出<span>MAP</span></p>
        <nav>
            <ul>
                <li><a href="/MemoryMap/public/displayMap">MAP</a></li>
                <li><a href="">登録</a></li>
                <li><a href="">一覧</a></li>
            </ul>
        </nav>
    </header>

    <div id="map" class="map"></div>
    <script async
        src="https://maps.googleapis.com/maps/api/js?key=[APIKEY]&callback=initMap"></script>

    <script>

        var map;

        function initMap() {
            map = new google.maps.Map(document.getElementById('map'), {
                center: { lat: 35.681236, lng: 139.767125 },
                zoom: 10
            });
             
            marker = new google.maps.Marker({ 
            position: { lat: 35.681236, lng: 139.767125 }, 
            map: map 
            });
        };

    </script>

</BODY>

</HTML>

Larabelではcssはpublicフォルダ配下に配置します。

MemoryMap/public/css/displayMap.css

.head_title{
 font-size: 24px;
 font-weight: bold;
}

span{
 color:red;
}

nav{
 border-top: 1px solid #ccc;
 border-bottom: 1px solid #ccc;
 margin-bottom: 10px;
}
nav ul{
 display: table;
 margin: 0 auto;
 padding: 0;
 width: 80%;
 text-align: center;
}
nav ul li{
 display: table-cell;
 min-width: 50px;
 border-right: 1px solid #ccc;
}
nav ul li:first-child{
 border-left: 1px solid #ccc;
}
nav ul li a{
 display: block;
 width: 100%;
 padding: 10px 0;
 text-decoration: none;
 color: #aaa;
}
nav ul li a:hover{
 background-color:#F8E750;
}
nav ul li.current{
 font-weight: bold;
}
nav ul li.current a{
 border-bottom: 5px solid #00B0F0;
 color: #00B0F0;
}

.map {
    max-width: 90%; 
    height:300px;
    margin: 0 auto;
}

以下の様な見た目になります。

今後は自分で登録した場所にマーカーを表示したり、情報ウインドウを表示できるようにしていきます。

次回から登録画面の作成に入ります。