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

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

ただいまの
回答率

90.53%

  • Go

    626questions

    Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

  • Google マップ

    414questions

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

googlemaps.github.ioのGeocode関数から特定の値を取得する方法

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 463

tororo_umai

score 1

 前提・実現したいこと

googlemaps.github.ioのGeocode関数を用いて、
Geometry.Location.LatGeometry.Location.Lngの値を取得したいです。

 発生している問題

該当ソースコードのmain.goにおいて、
resp.Geometry.Location.Latをすればいいのかなと思いましたが、
以下のエラーが出ました。

resp.Geometry undefined (type []maps.GeocodingResult has no field or method Geometry)

 該当のソースコード

↓ main.go

package main

import (
    "fmt"

    "golang.org/x/net/context"
    "googlemaps.github.io/maps"
)

func main() {
    c, err := maps.NewClient(maps.WithAPIKey("API_KEY"))
    if err != nil {
        fmt.Errorf("fatal error: %s", err)
    }

    address := &maps.GeocodingRequest{
        Address: "東京駅",
    }

    resp, err := c.Geocode(context.Background(), address)
    if err != nil {
        fmt.Printf("Geocode err: %v\n", err)
        return
    }
    fmt.Printf("OK. resp: %+v\n", resp)
    fmt.Printf("OK. resp: %+v\n", resp.Geometry.Location.Lat)
}

↓ googlemaps.github.io/maps/geocoding.go(一部引用)

package maps

import (
    "errors"
    "net/url"
    "strings"

    "golang.org/x/net/context"
)

var geocodingAPI = &apiConfig{
    host:            "https://maps.googleapis.com",
    path:            "/maps/api/geocode/json",
    acceptsClientID: true,
}

// Geocode makes a Geocoding API request
func (c *Client) Geocode(ctx context.Context, r *GeocodingRequest) ([]GeocodingResult, error) {
    if r.Address == "" && len(r.Components) == 0 && r.LatLng == nil {
        return nil, errors.New("maps: address, components and LatLng are all missing")
    }

    var response struct {
        Results []GeocodingResult `json:"results"`
        commonResponse
    }

    if err := c.getJSON(ctx, geocodingAPI, r, &response); err != nil {
        return nil, err
    }

    if response.Status == "ZERO_RESULTS" {
        return []GeocodingResult{}, nil
    }

    if err := response.StatusError(); err != nil {
        return nil, err
    }

    return response.Results, nil
}

// GeocodingResult is a single geocoded address
type GeocodingResult struct {
    AddressComponents []AddressComponent `json:"address_components"`
    FormattedAddress  string             `json:"formatted_address"`
    Geometry          AddressGeometry    `json:"geometry"`
    Types             []string           `json:"types"`
    PlaceID           string             `json:"place_id"`
}

// AddressGeometry is the location of a an address
type AddressGeometry struct {
    Location     LatLng       `json:"location"`
    LocationType string       `json:"location_type"`
    Bounds       LatLngBounds `json:"bounds"`
    Viewport     LatLngBounds `json:"viewport"`
    Types        []string     `json:"types"`
}

// LatLng represents a location on the Earth.
type LatLng struct {
    Lat float64 `json:"lat"`
    Lng float64 `json:"lng"`
}

 補足情報(FW/ツールのバージョンなど)

OS: Windows 10 Home
開発環境: LiteIDE X(ver. X32.2)

 その他

初歩的な質問で申し訳ございませんが、
ご回答のほどよろしくお願いいたします。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

respはスライスなのでフィールドを持ちえません。
そのようなアクセスの仕方は出来ません。
(という事をエラーメッセージがちゃんと教えてくれています。)
スライスの要素にアクセスするなら

geoResult := resp[0]


というように要素を取り出してください。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/04/04 21:14

    ご回答くださりありがとうございます。
    教えてくださったように、変数に入れると取得できました。
    エラーメッセージの意味をちゃんと理解できてなかったです。
    フィールドとスライスの使い方や違いについて、もう一度学びなおします。

    キャンセル

同じタグがついた質問を見る

  • Go

    626questions

    Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

  • Google マップ

    414questions

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