Google GeoCoding の使用を検討している場合は、次のものが役立ちます。
Geocoding API リクエストは、次の形式にする必要があります。
http://maps.googleapis.com/maps/api/geocode/output?パラメータ
ここで、出力は次の値のいずれかになります。
json (recommended) indicates output in JavaScript Object Notation (JSON)
xml indicates output as XML
HTTPS 経由で Geocoding API にアクセスするには、次を使用します。
https://maps.googleapis.com/maps/api/geocode/output?parameters
HTTPS は、リクエストにユーザーの場所などの機密ユーザー データを含むアプリケーションに推奨されます。
いずれの場合も、一部のパラメーターは必須ですが、一部のパラメーターはオプションです。URL では標準であるように、すべてのパラメーターはアンパサンド (&) 文字を使用して区切られます。パラメータのリストと可能な値を以下に列挙します。
必須パラメータ
address — The address that you want to geocode.
or
latlng — The textual latitude/longitude value for which you wish to obtain the closest, human-readable address. See Reverse Geocoding for more information.
or
components — A component filter for which you wish to obtain a geocode. See Component Filtering for more information. The components filter will also be accepted as an optional parameter if an address is provided.
sensor — Indicates whether or not the geocoding request comes from a device with a location sensor. This value must be either true or false.
Maps API for Business ユーザーは、ジオコーディング リクエストに有効なクライアント パラメータと署名パラメータを含める必要があります。詳細については、Maps API for Business Web Services を参照してください。
オプションのパラメーター
bounds — The bounding box of the viewport within which to bias geocode results more prominently. This parameter will only influence, not fully restrict, results from the geocoder. (For more information see Viewport Biasing below.)
language — The language in which to return results. See the list of supported domain languages. Note that we often update supported languages so this list may not be exhaustive. If language is not supplied, the geocoder will attempt to use the native language of the domain from which the request is sent wherever possible.
region — The region code, specified as a ccTLD ("top-level domain") two-character value. This parameter will only influence, not fully restrict, results from the geocoder. (For more information see Region Biasing below.)
components — The component filters, separated by a pipe (|). Each component filter consists of a component:value pair and will fully restrict the results from the geocoder. For more information see Component Filtering, below.
JSON 出力形式
この例では、Geocoding API は、「1600 Amphitheatre Parkway, Mountain View, CA」に関するクエリに対して json レスポンスをリクエストします。
http://maps.googleapis.com/maps/api/geocode/json?address=1600+Amphitheatre+Parkway,+Mountain+View,+CA&sensor=true_or_false
この例では、この値を明示的に true または false に設定する必要があることを強調するために、センサー パラメーターを変数 true_or_false のままにしています。
このリクエストによって返される JSON を以下に示します。実際の JSON には空白が含まれていない可能性があることに注意してください。リクエスト間の空白の量や形式について推測しないでください。
{
"results" : [
{
"address_components" : [
{
"long_name" : "1600",
"short_name" : "1600",
"types" : [ "street_number" ]
},
{
"long_name" : "Amphitheatre Pkwy",
"short_name" : "Amphitheatre Pkwy",
"types" : [ "route" ]
},
{
"long_name" : "Mountain View",
"short_name" : "Mountain View",
"types" : [ "locality", "political" ]
},
{
"long_name" : "Santa Clara",
"short_name" : "Santa Clara",
"types" : [ "administrative_area_level_2", "political" ]
},
{
"long_name" : "California",
"short_name" : "CA",
"types" : [ "administrative_area_level_1", "political" ]
},
{
"long_name" : "United States",
"short_name" : "US",
"types" : [ "country", "political" ]
},
{
"long_name" : "94043",
"short_name" : "94043",
"types" : [ "postal_code" ]
}
],
"formatted_address" : "1600 Amphitheatre Pkwy, Mountain View, CA 94043, USA",
"geometry" : {
"location" : {
"lat" : 37.42291810,
"lng" : -122.08542120
},
"location_type" : "ROOFTOP",
"viewport" : {
"northeast" : {
"lat" : 37.42426708029149,
"lng" : -122.0840722197085
},
"southwest" : {
"lat" : 37.42156911970850,
"lng" : -122.0867701802915
}
}
},
"types" : [ "street_address" ]
}
],
"status" : "OK"
}
緯度と経度を取得するのに役立つサンプル コードを次に示します。
public static void main(String[] args) {
try
{
URL url = new URL("http://maps.googleapis.com/maps/api/geocode/json?address=1600+Amphitheatre+Parkway,+Mountain+View,+CA&sensor=false");
URLConnection conn = url.openConnection();
conn.connect();
InputStreamReader isr = new InputStreamReader(conn.getInputStream());
StringBuffer sbLocation = new StringBuffer();
for (int i=0; i != -1; i = isr.read())
{
sbLocation.append((char)i);
}
String getContent = sbLocation.toString().trim();
if(getContent.contains("results"))
{
String temp = getContent.substring(getContent.indexOf("["));
JSONArray JSONArrayForAll = new JSONArray(temp);
String lng = JSONArrayForAll.getJSONObject(0).getJSONObject("geometry").getJSONObject("location").get("lng").toString();
String lat = JSONArrayForAll.getJSONObject(0).getJSONObject("geometry").getJSONObject("location").get("lat").toString();
System.out.println(" Latitude : " + lat);
System.out.println(" Longitude : " + lng);
}
}
catch (MalformedURLException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
}