今回やったのは住所から経度緯度を取得するジオコーディングの逆、経度緯度から住所情報を取得するのが逆ジオコーディング(リバースジオコーディング)です。
使用したのはGoogleのジオコーディングAPIです。
コードはこんな感じで、www.textからJsonを取得できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
string baseurl = "http://maps.google.com/maps/api/geocode/json?"; string query = ""; void Start() { float lat = 26.68739f; float lng = 3.11659f; query = "latlng="+lat+","+lng+"&sensor=false&language=ja"; StartCoroutine (GetData()); } IEnumerator GetData() { string url = baseurl + query; WWW www = new WWW(url); yield return www; Debug.Log(www.text); } |
JSON形式で取得できるのはいいけど、javascriptと違って扱いが面倒でした。
入れ物用のクラスを用意してJsonUtility.FromJsonで格納する必要があります。
1 2 3 4 5 6 7 8 |
GoogleGeoJson json = JsonUtility.FromJson<GoogleGeoJson>(www.text); Debug.Log(JsonUtility.ToJson(json)); Debug.Log(json.results[0].address_components[0].long_name); Debug.Log(json.results[0].formatted_address); Debug.Log(json.results[0].geometry.bounds.northeast.lng); Debug.Log(json.results[0].geometry.location.lat); Debug.Log(json.results[0].geometry.viewport.southwest.lng); Debug.Log(json.results[0].types[0]); |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
[System.Serializable] public class GoogleGeoJson { public G_result[] results; public string status; } [System.Serializable] public class G_result { public G_address_component[] address_components; public string formatted_address; public G_geometry geometry; public string place_id; public string[] types; } [System.Serializable] public class G_address_component { public string long_name; public string short_name; public string[] types; } [System.Serializable] public class G_geometry { public G_Rect bounds; public G_latlng location; public string location_type; public G_Rect viewport; } [System.Serializable] public class G_Rect { public G_latlng northeast; public G_latlng southwest; } [System.Serializable] public class G_latlng { public float lat; public float lng; } |
JSON使うたびにクラス作るなんて面倒だけど仕方ない。
ネストされてないとかなり簡潔に書けるけど、大抵はネストされてると思う。
XML形式にしても、より面倒そうなのでAPI使いにくいなぁ。
せめて Dictionary クラスが使用可能ならよかったんですが。