質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Google API

Googleは多種多様なAPIを提供していて、その多くはウェブ開発者向けのAPIです。それらのAPIは消費者に人気なGoogleのサービス(Google Maps, Google Earth, AdSense, Adwords, Google Apps,YouTube等)に基づいています。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

Google マップ

Google Mapは、Google社がオンラインで提供している地図・ローカル検索サービスです。GIS(Geographic Information System:地理情報システム)の中の「WebGIS」に該当します。地図・航空写真・地形の表示方式があり、それぞれユーザーが縮尺を調整して表示させることができます。地域の情報サービスを検索する機能やルート検索の機能も搭載されています。

Q&A

解決済

1回答

1931閲覧

CakePHP3で返ってきたJSONをもとにGoogleMapのマーカーを生成

ssk

総合スコア332

Google API

Googleは多種多様なAPIを提供していて、その多くはウェブ開発者向けのAPIです。それらのAPIは消費者に人気なGoogleのサービス(Google Maps, Google Earth, AdSense, Adwords, Google Apps,YouTube等)に基づいています。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

Google マップ

Google Mapは、Google社がオンラインで提供している地図・ローカル検索サービスです。GIS(Geographic Information System:地理情報システム)の中の「WebGIS」に該当します。地図・航空写真・地形の表示方式があり、それぞれユーザーが縮尺を調整して表示させることができます。地域の情報サービスを検索する機能やルート検索の機能も搭載されています。

0グッド

1クリップ

投稿2017/02/01 13:06

編集2017/02/02 03:18

PHP

1//Element/footer.ctp 2<script type="text/javascript"> 3$(function() { 4 $('#MapSearch').submit(function(event) { 5 event.preventDefault();//送信をキャンセル 6 var $form = $(this);//対象のフォーム要素を取得 7 // 送信ボタンを取得 8 // (後で使う: 二重送信を防止する。) 9 var $button = $form.find('button'); 10 11 $.ajax({ 12 url: "/test/ajax/hogessearch.json", 13 type: "get", 14 data: $form.serialize(), 15 dataType: "json", 16 timeout: 10000, 17 // 送信前 18 beforeSend: function(xhr, settings) { 19 // ボタンを無効化し、二重送信を防止 20 $button.attr('disabled', true); 21 }, 22 // 応答後 23 complete: function(xhr, textStatus) { 24 // ボタンを有効化し、再送信を許可 25 $button.attr('disabled', false); 26 }, 27 }).done(function (response) { 28 alert("サクセス"); 29 }).fail(function (response) { 30 alert("error"); 31 }); 32 }); 33}); 34</script>

JSON

1//submitで返ってくるJSON 2{ 3 "jsonDataList": [ 4 { 5 "id": 1, 6 "column01": "東京", 7 "column02": "35.681391", 8 "column03": "139.766103", 9 }, 10 { 11 "id": 2, 12 "column01": "新宿", 13 "column02": "35.689729", 14 "column03": "139.700464", 15 }, 16 ] 17 }

Javascript

1//現状 2places = new ns.MVCArray($.parseJSON(ここにJSON?)),

Javascript

1//最終的にしたい形 2places = new google.maps.MVCArray([ 3 ["1","東京", 35.681391, 139.766103], 4 ["2","新宿", 35.689729, 139.700464], 5 ["3","品川", 35.62876, 139.738999] 6 ]);

######補足

Javascript

1//GoogleMapのjavascript全文 2<script type="text/javascript"> 3function initMap() { 4 var map, 5 var infoWindow, 6 ns = google.maps, 7 mapOptions = { 8 zoom: 12, 9 center: new ns.LatLng(35.665595, 139.739) 10 }, 11 map = new ns.Map($("#map")[0], mapOptions), 12 13 places = new ns.MVCArray($.parseJSON()), 14 15 places.forEach(function (place) { 16 var marker = new ns.Marker({ 17 position: new ns.LatLng(place[1], place[2]), 18 map: map 19 }); 20 21 ns.event.addListener(marker, 'click', function () {//情報ウィンドウ 22 if (!infoWindow) { 23 infoWindow = new ns.InfoWindow(); 24 } 25 infoWindow.setContent(place[0]);//place 26 infoWindow.open(map, marker); 27 }); 28 }); 29} 30 </script>

#####流れ
1.トップページから条件を指定して検索
2.コントローラーで値を受け取り、JSONを返す
3.返ってきたJSONを元にGoogleMapのマーカーを生成

以上です。
3の部分でつまずいています、、、

よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

popobot

2017/02/01 21:08

submitして返ってくるjsonに合わせて処理を書けばいいと思うのですが... 返ってくるjsonに緯度経度があるのかもよくわかりません。
ssk

2017/02/02 03:20

追記・修正を行いました。返ってくるjsonに緯度経度の情報はございます。
guest

回答1

0

ベストアンサー

以下のような感じでしょうか。後は/test/ajax/hogessearch.jsonからデータを取得する処理を組み合わせればできるかと

<script type="text/javascript"> function initMap() { var map; var infoWindow; ns = google.maps; mapOptions = { zoom: 12, center: new ns.LatLng(35.665595, 139.739), }; map = new ns.Map($("#map")[0], mapOptions); json = { "jsonDataList": [ { "id": 1, "column01": "東京", "column02": "35.681391", "column03": "139.766103", }, { "id": 2, "column01": "新宿", "column02": "35.689729", "column03": "139.700464", }, ] }; json.jsonDataList.forEach(function (place) { console.log(place); var marker = new ns.Marker({ position: new ns.LatLng(place.column02, place.column03), map: map }); ns.event.addListener(marker, 'click', function () {//情報ウィンドウ if (!infoWindow) { infoWindow = new ns.InfoWindow(); } infoWindow.setContent(place.column01);//place infoWindow.open(map, marker); }); }); } google.maps.event.addDomListener(window, 'load', initMap); </script>

投稿2017/02/02 04:02

popobot

総合スコア6586

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ssk

2017/02/02 04:10

ありがとうございます>< こちらで試してみます。 /test/ajax/hogessearch.jsonからデータを取得する処理 ↑どのように書けばよいでしょうか?現状、データの取得ができていないです。公式ドキュメントも見たんですが、取得できませんでした、、
popobot

2017/02/02 04:14

あれ、一つ前の質問でjson取得するできてませんでしたっけ?? alert("サクセス");出力しているところでinitMap()を実行したらいいのではないかと。引数にjsonを渡してあげて
ssk

2017/02/03 09:11

お返事、遅くなってしまい申し訳ございません。 initMap(jsonDataList)とし、json = jsonDataList;にすることで意図した動作ができるようになりました。 助かりました。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問