今回は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;
}
以下の様な見た目になります。
今後は自分で登録した場所にマーカーを表示したり、情報ウインドウを表示できるようにしていきます。
次回から登録画面の作成に入ります。