googleが提供しているgoogleMapを埋め込んだサイトを作成したいと思い、MapsjavascriptAPIの埋め込みと、現在位置の取得ボタンは実装できました。
そして検索ボックスを作成して場所を入力するとそこを表示する機能を追加したいと思いました。
やり方は https://www.out48.com/archives/1870/ この記事を参考にしました。
この記事の中に https://developers.google.com/maps/documentation/javascript/examples/places-searchbox?hl=ja#maps_places_searchbox-html 公式のページがあってそのjavascriptとhtmlの書き方を実際に試してみると検索ボックスに文字を入力してエンターを押しても何も起こりませんでした。
どこが間違っているのか全く分からない状態です。どなたかわかる方がいればよろしくお願いいたします。
[javascriptファイル]
javascript
1function initAutocomplete() { 2 const map = new google.maps.Map(document.getElementById("map"), { 3 center: { lat: -33.8688, lng: 151.2195 }, 4 zoom: 13, 5 mapTypeId: "roadmap", 6 }); 7 // Create the search box and link it to the UI element. 8 const input = document.getElementById("pac-input"); 9 const searchBox = new google.maps.places.SearchBox(input); 10 11 map.controls[google.maps.ControlPosition.TOP_LEFT].push(input); 12 // Bias the SearchBox results towards current map's viewport. 13 map.addListener("bounds_changed", () => { 14 searchBox.setBounds(map.getBounds()); 15 }); 16 17 let markers = []; 18 19 // Listen for the event fired when the user selects a prediction and retrieve 20 // more details for that place. 21 searchBox.addListener("places_changed", () => { 22 const places = searchBox.getPlaces(); 23 24 if (places.length == 0) { 25 return; 26 } 27 28 // Clear out the old markers. 29 markers.forEach((marker) => { 30 marker.setMap(null); 31 }); 32 markers = []; 33 34 // For each place, get the icon, name and location. 35 const bounds = new google.maps.LatLngBounds(); 36 37 places.forEach((place) => { 38 if (!place.geometry || !place.geometry.location) { 39 console.log("Returned place contains no geometry"); 40 return; 41 } 42 43 const icon = { 44 url: place.icon, 45 size: new google.maps.Size(71, 71), 46 origin: new google.maps.Point(0, 0), 47 anchor: new google.maps.Point(17, 34), 48 scaledSize: new google.maps.Size(25, 25), 49 }; 50 51 // Create a marker for each place. 52 markers.push( 53 new google.maps.Marker({ 54 map, 55 icon, 56 title: place.name, 57 position: place.geometry.location, 58 }) 59 ); 60 if (place.geometry.viewport) { 61 // Only geocodes have viewport. 62 bounds.union(place.geometry.viewport); 63 } else { 64 bounds.extend(place.geometry.location); 65 } 66 }); 67 map.fitBounds(bounds); 68 }); 69}
[htmlファイル]
html
1<!DOCTYPE html> 2<html xmlns:th="http://www.thymeleaf.org" 3 xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"> 4<head> 5<meta charset="UTF-8"> 6<title>Insert title here</title> 7</head> 8<body> 9 10 <!-- Maps JavaScript API(地図)、Places API(入力場所検索ボックス)のapiキー作成し埋め込み ロード時動作 --> 11 <script 12 src="https://maps.googleapis.com/maps/api/js?key=AIzaSyC6gVVngdDmxOTy4il-r0utj51VfO0fRqw&libraries=places&callback=initAutocomplete&libraries=places&v=weekly" 13 defer> 14 </script> 15 16 17 <!-- jsファイルアクセス --> 18 <script th:src="@{/js/MapsJavaScriptCurrentLocationSearch.js}"> 19 </script> 20 21 <script th:src="@{/js/MapsJavaScriptGetAPI.js}"> 22 </script> 23 24 <script th:src="@{/js/MapsJavaScriptApiSearchBox.js}"> 25 </script> 26 27 28 29 <p> 30 <button onclick="getMyPlace()">現在位置を取得</button> 31 </p> 32 <div id="result"></div> 33 34 <!-- 検索ボックス機能 --> 35 <input id="pac-input" class="controls" type="text" 36 placeholder="Search Box"> 37 38 <!-- マップ表示 --> 39 <div id="map"></div> 40 41</body> 42</html>
javascript
1function getMyPlace() { 2 var output = document.getElementById("result"); 3 if (!navigator.geolocation){//Geolocation apiがサポートされていない場合 4 output.innerHTML = "<p>Geolocationはあなたのブラウザーでサポートされておりません</p>"; 5 return; 6 } 7 function success(position) { 8 var latitude = position.coords.latitude;//緯度 9 var longitude = position.coords.longitude;//経度 10 output.innerHTML = '<p>緯度 ' + latitude + '° <br>経度 ' + longitude + '°</p>'; 11 // 位置情報 12 var latlng = new google.maps.LatLng( latitude , longitude ) ; 13 // Google Mapsに書き出し 14 var map = new google.maps.Map( document.getElementById( 'map' ) , { 15 zoom: 15 ,// ズーム値 16 center: latlng ,// 中心座標 17 } ) ; 18 // マーカーの新規出力 19 new google.maps.Marker( { 20 map: map , 21 position: latlng , 22 } ) ; 23 }; 24 function error() { 25 //エラーの場合 26 output.innerHTML = "座標位置を取得できません"; 27 }; 28 navigator.geolocation.getCurrentPosition(success, error);//成功と失敗を判断
[エラー情報]
検索ボックスに入力してエンターを押すと公式サイトのサンプル上ではちゃんと動作するのですが、
私の場合は何も起きず、開発ツールのコンソールにも何も表示されていませんでした。
回答1件
あなたの回答
tips
プレビュー