ShogoHirasawa / geocoding_API

住所から緯度・軽度を抽出する作業
0 stars 0 forks source link

Google Map Geocoding APIでエラーがでる #1

Open ShogoHirasawa opened 3 years ago

ShogoHirasawa commented 3 years ago

以下のコードをGASで使ってみたがエラーがでる

function wmap_getLocationNumber(address) { var api_url = "https://maps.googleapis.com/maps/api/geocode/json?address=" + encodeURI(address); var response = UrlFetchApp.fetch(api_url); var result = JSON.parse(response); var location = result['results'][0]['geometry']['location']; return [ [ location['lat'] , location['lng'] ] ]; }

TypeError: Cannot read property 'geometry' of undefined wmap_getLocationNumber @ コード.gs:5

ShogoHirasawa commented 3 years ago

参考サイト https://www.wmapst.net/google/gas-google/20161207-google-spreadsheet-getlocationnumber-google-apps-script/

takuro-mapbox commented 3 years ago

GASの全コード貼れますか?

ShogoHirasawa commented 3 years ago

function wmap_getLocationNumber(address) { var api_url = "https://maps.googleapis.com/maps/api/geocode/json?address=" + encodeURI(address); var response = UrlFetchApp.fetch(api_url); var result = JSON.parse(response); var location = result['results'][0]['geometry']['location']; return [ [ location['lat'] , location['lng'] ] ]; }

がコードの全容で

TypeError: Cannot read property 'geometry' of undefined wmap_getLocationNumber @ コード.gs:5

がエラーコードになってます

takuro-mapbox commented 3 years ago

なるほど。wmap_getLocationNumberをセルで実行している感じですか?

takuro-mapbox commented 3 years ago

おそらくAPIキーの指定が必要かと思いますがどこかで指定してますか?

ShogoHirasawa commented 3 years ago

wmap_getLocationNumberを関数としてセルで呼び出している感じです

APIキーを取得しているはずなのですが、上手く行かないんですよね・・・。 もう一度、APIキーの取得からやってみます・・・。

takuro-mapbox commented 3 years ago

var api_urlの部分でAPIキーを指定できますか?? ?key=xxxx

ShogoHirasawa commented 3 years ago

ありがとうございます 11:00~のMTG後に、アドバイス頂いた手順でやってみます!

takuro-mapbox commented 3 years ago

はい! ちなみにGASでClassも用意されてるみたいですね。知らなかったです。 あと以下のコードをApp Script内で実行しても実行しても緯度・経度取得できると思います。(MapboxのGeocoding APIです) スプレッドシートのURL指定とシート&セル指定が必要です。アクセストークンは僕のを使用してます。

//変数spreadsheetに指定のスプレッドシートオブジェクトを取得
  var sp_url = "https://docs.google.com/spreadsheets/d/xxxxxxxx/"; //ここを修正
  var spreadsheet = SpreadsheetApp.openByUrl(sp_url);
  var sheet = spreadsheet.getSheetByName("xx");  //ここを修正
  var lastRow = sheet.getLastRow();
  var location = ""

function myFunctionJSON() {
  for(let i = 1; i < lastRow; i++) {
    var row = i + 2
    var range = sheet.getRange(row,xx);  //ここを修正
    var value = range.getValue();
    var location = value
    var url = "https://api.mapbox.com/geocoding/v5/mapbox.places/" + location +".json?access_token=pk.eyJ1IjoidGVla2F5MDkiLCJhIjoiY2treHJiZXBlNTU3NDJ2cXQ0dDE3ZW5qNSJ9.En9xipyTDvmwC4r7KXgWrw"
    var json = UrlFetchApp.fetch(url).getContentText();
    var jsonData = JSON.parse(json);
    var center = jsonData.features[0].center;
    sheet.getRange(row,xx).setValue(center[0])  //ここを修正
    sheet.getRange(row,xx).setValue(center[1])  //ここを修正
  }
}
ShogoHirasawa commented 3 years ago

これって、sheet.getRange(row,xx)の部分に住所が書かれたセルを指定するって感じですかね?

takuro-mapbox commented 3 years ago

そうです!