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

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

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

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Google マップ

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

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

解決済

1回答

2849閲覧

JavaScriptでのジオコーディング

退会済みユーザー

退会済みユーザー

総合スコア0

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Google マップ

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

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

0クリップ

投稿2016/11/11 10:40

編集2016/11/11 15:06

ジオコーディングについて質問があります。

GoogleMapAPIを利用してジオコーディングをしようと試みました。
地名を検索して緯度経度を変数に代入したいのですが、うまくいきません。

例えば
東京駅と検索すると東京駅の緯度経度がido、keidoという変数に入るみたいなものを作ろうとしています。

GoogleMapAPIを使わなくてもいいのですがサンプルコードのようなものを教えてくださると助かります。

function initMap() { **var myLatLng = {lat: 35.658581, lng: 139.745433};** var map = new google.maps.Map(document.getElementById('map'), { zoom: 15, center: **myLatLng** }); var marker = new google.maps.Marker({ position: myLatLng, map: map }); var geocoder = new google.maps.Geocoder(); document.getElementById('submit').addEventListener('click', function() { geocodeAddress(geocoder, map); }); }

太文字になっている場所のlatとlngを取得し、以下のlatitudeとlongitudeに数値を代入しようと考えてきます。

var params = { keyid: '', format: 'json', latitude: 0, longitude: 0, range: 2, freeword: '' };

代入は
params.latitude = myLatLng.lat();
params.longitude = myLatLng.lng();
上記のコードで代入しようと考えたのですがうまく動きませんでした。

<!DOCTYPE html> <html lang="ja" dir="ltr"> <head> <title>J14014 課題1</title> <meta name="viewport" content="initial-scale=1.0, user-scalable=no"> <meta charset="utf-8"> <style> html, body { height: 100%; margin: 0; padding: 0; } #map { height: 500px; width: 50%; } #floating-panel { position: absolute; top: 10px; left: 35%; z-index: 5; background-color: #fff; padding: 5px; border: 1px solid #999; text-align: center; font-family: 'Roboto','sans-serif'; line-height: 30px; padding-left: 10px; } </style> </head> <body> <div id="floating-panel"> <input id="address" type="textbox" value=""> <input id="submit" type="button" value="Geocode"> </div> <div id="map"></div> <script src="https://maps.googleapis.com/maps/api/js?key={APIkey}></script> <script> function initMap() { var myLatLng = {lat: 35.658581, lng: 139.745433}; var map = new google.maps.Map(document.getElementById('map'), { zoom: 15, center: myLatLng }); var marker = new google.maps.Marker({ position: myLatLng, map: map }); var geocoder = new google.maps.Geocoder(); document.getElementById('submit').addEventListener('click', function() { geocodeAddress(geocoder, map); }); } function geocodeAddress(geocoder, resultsMap) { var address = document.getElementById('address').value; geocoder.geocode({'address': address}, function(results, status) { if (status === google.maps.GeocoderStatus.OK) { resultsMap.setCenter(results[0].geometry.location); var marker = new google.maps.Marker({ map: resultsMap, position: results[0].geometry.location }); } else { alert('Geocode was not successful for the following reason: ' + status); } }); } initMap(); </script> <a href="http://www.gnavi.co.jp/"> <img src="http://apicache.gnavi.co.jp/image/rest/b/api_265_65.gif" width="265" height="65" border="0" alt="グルメ情報検索サイト ぐるなび"> </a> <input type="hidden" value="2aac5d7fc6cc734c236af8f5511b353f" class="js--key"> <br> <br> <label for="freeword">フリーワード検索</label> <input type="text" name="freeword" id="freeword" value="" class="js--freeword" /> <br> <br> <br> <br> <input type="button" value="店舗結果" class="js--apply" /> <script src="https://code.jquery.com/jquery-1.11.2.min.js"></script> <script> (function(){ var url = 'http://api.gnavi.co.jp/RestSearchAPI/20150630/?callback=?'; var params = { keyid: '', format: 'json', latitude: 0, longitude: 0, range: 2, freeword: '' }; var showResult = function(result){ if ( result.total_hit_count > 0 ) { document.write(result.total_hit_count + '件の結果が見つかりました。'); document.write('<br>'); document.write('現在の仕様では最大10件しか表示できません。\n'); document.write('<table border=1 id="id33a">'); document.write('<tr>'); document.write('<td>店舗ID</td>'); document.write('<td>店舗名</td>'); document.write('<td>路線名</td>'); document.write('<td>駅名</td>'); document.write('<td>徒歩(分)</td>'); document.write('</tr>'); for ( var i in result.rest ){ document.write('<tr>'); <!-- 店舗ID --> if ( result.rest[i].id == '[object Object]'){ document.write('<td></td>'); }else{ document.write('<td>'+ result.rest[i].id + '</td>'); } <!-- 店舗名 --> if ( result.rest[i].name == '[object Object]'){ document.write('<td></td>'); }else{ document.write('<td>'+ result.rest[i].name + '</td>'); } <!-- 路線名 --> if ( result.rest[i].access.line == '[object Object]'){ document.write('<td></td>'); }else{ document.write('<td>'+ result.rest[i].access.line + '</td>'); } <!-- 駅名 --> if ( result.rest[i].access.station == '[object Object]'){ document.write('<td></td>'); }else{ document.write('<td>'+ result.rest[i].access.station + '</td>'); } <!-- 徒歩(分)--> if ( result.rest[i].access.walk == '[object Object]'){ document.write('<td></td>'); }else{ document.write('<td>'+ result.rest[i].access.walk + '分'+ '</td>'); } document.write('</tr>'); } document.write('</table>'); document.write('<a href="ぐるなびAPI.html">戻る</a>'); } else { alert( '検索結果が見つかりませんでした。' ); } } $(document).on('click', '.js--apply', function(){ params.keyid = $('.js--key').val(); //params.latitude = station_name.value.split("&")[0]; //params.longitude = station_name.value.split("&")[1]; params.latitude = myLatLng.lat(); params.longitude = myLatLng.lng(); params.freeword = $('.js--freeword').val(); $.getJSON(url, params, function(result){ showResult(result); }); }); })(jQuery); </script> </body> </html>

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

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

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

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

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

Lhankor_Mhy

2016/11/11 10:47

補足願います。「うまくいきません」とは具体的にはどのような現象が起きましたか? 「XXXXのような動作を期待して」「XXXXのようなコードを書いたら」「XXXXのような動作をした」かを補足してください。
退会済みユーザー

退会済みユーザー

2016/11/11 10:55

ソースコードなどを追加しました!
Lhankor_Mhy

2016/11/11 10:58

たとえば、params.latitudeに35.658581が入ればいいのでしょうか? それならparams.latitude = myLatLng.lat;ですね。
退会済みユーザー

退会済みユーザー

2016/11/11 11:01

params.latitude = myLatLng.lat(); と書いていたのをparams.latitude = myLatLng.lat;と変えたのですがうまくいきませんでした。
Lhankor_Mhy

2016/11/11 11:08

「うまくいきませんでした」とは具体的には何が起きましたか? エラーが出たのであればエラーメッセージを、違う値が入ったのであればその値を書いてください。
退会済みユーザー

退会済みユーザー

2016/11/11 11:14

補足忘れてたのですが、GoogleMapAPIとぐるなびAPIの連携をしています。Uncaught ReferenceError: myLatLng is not defined at HTMLInputElement.<anonymous>とエラーがでました。Chromeのコンソールで確認しました。
Lhankor_Mhy

2016/11/11 11:31

それはどこの行で起きたエラーでしょうか。ここに書かれたものでコードはすべてではないのではないかと思うのですが。
Lhankor_Mhy

2016/11/11 11:56

なるほど。できればjavascript全部を見たいんですが。たぶん、スコープの問題だと思います。
退会済みユーザー

退会済みユーザー

2016/11/11 12:04

全体を追記しました
Lhankor_Mhy

2016/11/11 12:44

とりあえず、geocodeAddressの戻り値がないので、mapやmarkerからlatlngを取り出すしかないんですが、スコープが違うので参照できないと思いますよ。全体的にコードを見なおしてみてはいかがですか?
kei344

2016/11/11 14:58

コードはそれぞれコードブロックで囲んでいただけませんか? ```(バッククオート3つ)で囲み、前後に改行をいれるか、コードを選択して「<code>」ボタンを押すとコードブロックになります。
guest

回答1

0

ベストアンサー

計3か所の変更。
#####ひとつめ

javascript

1(function(){ 2 3 var url = 'http://api.gnavi.co.jp/RestSearchAPI/20150630/?callback=?'; 4 var params = { 5 keyid: '', 6 format: 'json', 7 latitude: 0, 8 longitude: 0, 9 range: 2, 10 freeword: '' 11 };

↑を↓に変更。

javascript

1var params = { 2 keyid: '', 3 format: 'json', 4 latitude: 0, 5 longitude: 0, 6 range: 2, 7 freeword: '' 8}; 9(function(){ 10 11 var url = 'http://api.gnavi.co.jp/RestSearchAPI/20150630/?callback=?';

#####ふたつめ

javascript

1$(document).on('click', '.js--apply', function(){ 2 params.keyid = $('.js--key').val(); 3 //params.latitude = station_name.value.split("&")[0]; 4 //params.longitude = station_name.value.split("&")[1]; 5 params.latitude = myLatLng.lat(); 6 params.longitude = myLatLng.lng(); 7 params.freeword = $('.js--freeword').val(); 8 $.getJSON(url, params, function(result){ 9 showResult(result); 10 }); 11});

↑を↓に変更。

javascript

1$(document).on('click', '.js--apply', function(){ 2 params.keyid = $('.js--key').val(); 3 params.freeword = $('.js--freeword').val(); 4 $.getJSON(url, params, function(result){ 5 showResult(result); 6 }); 7});

#####みっつめ

javascript

1if (status === google.maps.GeocoderStatus.OK) { 2 resultsMap.setCenter(results[0].geometry.location); 3 var marker = new google.maps.Marker({ 4 map: resultsMap, 5 position: results[0].geometry.location 6 });

↑を↓に変更

javascript

1if (status === google.maps.GeocoderStatus.OK) { 2 params.latitude = results[0].geometry.location.lat(); 3 params.longitude = results[0].geometry.location.lng();

動作確認はしてないので、何もエラーが出ずに動いたら、たぶん私が一番びっくりします。

質問者さんは初心者の方ですかね? もしそうなら、こういう複雑なコールバック地獄を処理するのは100時間早いです。もう少し基礎から修業し直してください。

投稿2016/11/12 09:56

Lhankor_Mhy

総合スコア36074

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

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

退会済みユーザー

退会済みユーザー

2016/11/12 11:13

何もエラーなしに動きました!!! もっと勉強して少しずつやっていきたいと思います!! ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問