I used this helpful code snippet in order to get the current location in my android application and now I want to get the route
(street_address), street_number
, postal_code
and country
(always long_name
) in a Google Geocoding JSON Object. At the moment I use a do - while loop and then split formatted_address
to get the desired results, but I think it would be better to access the value by its key.
The JSON looks like this:
{
"results": [
{
"types": [
"street_address"
],
"formatted_address": "RotenturmstraÃe 2, 1010 Vienna, Austria",
"address_components": [
{
"types": [
"street_number"
],
"short_name": "2",
"long_name": "2"
},
{
"types": [
"route"
],
"short_name": "Rotenturmstr.",
"long_name": "RotenturmstraÃe"
},
{
"types": [
"sublocality_level_1",
"sublocality",
"political"
],
"short_name": "Innere Stadt",
"long_name": "Innere Stadt"
},
{
"types": [
"locality",
"political"
],
"short_name": "Vienna",
"long_name": "Vienna"
},
{
"types": [
"administrative_area_level_1",
"political"
],
"short_name": "Vienna",
"long_name": "Vienna"
},
{
"types": [
"country",
"political"
],
"short_name": "AT",
"long_name": "Austria"
},
{
"types": [
"postal_code"
],
"short_name": "1010",
"long_name": "1010"
}
],
"geometry": {
"viewport": {
"southwest": {
"lng": 16.3719497197085,
"lat": 48.20797491970851
},
"northeast": {
"lng": 16.3746476802915,
"lat": 48.2106728802915
}
},
"location": {
"lng": 16.3732987,
"lat": 48.2093239
},
"location_type": "ROOFTOP"
}
},
{
"types": [
"neighborhood",
"political"
],
"formatted_address": "Stephansdom, 1010 Vienna, Austria",
"address_components": [
{
"types": [
"neighborhood",
"political"
],
"short_name": "Stephansdom",
"long_name": "Stephansdom"
},
{
"types": [
"sublocality_level_1",
"sublocality",
"political"
],
"short_name": "Innere Stadt",
"long_name": "Innere Stadt"
},
{
"types": [
"locality",
"political"
],
"short_name": "Vienna",
"long_name": "Vienna"
},
{
"types": [
"administrative_area_level_1",
"political"
],
"short_name": "Vienna",
"long_name": "Vienna"
},
{
"types": [
"country",
"political"
],
"short_name": "AT",
"long_name": "Austria"
},
{
"types": [
"postal_code"
],
"short_name": "1010",
"long_name": "1010"
}
],
"geometry": {
"bounds": {
"southwest": {
"lng": 16.3663459,
"lat": 48.2016949
},
"northeast": {
"lng": 16.382804,
"lat": 48.21546559999999
}
},
"viewport": {
"southwest": {
"lng": 16.3663459,
"lat": 48.2016949
},
"northeast": {
"lng": 16.382804,
"lat": 48.21546559999999
}
},
"location": {
"lng": 16.3767451,
"lat": 48.2083206
},
"location_type": "APPROXIMATE"
}
},
{
"types": [
"postal_code"
],
"formatted_address": "1010 Vienna, Austria",
"address_components": [
{
"types": [
"postal_code"
],
"short_name": "1010",
"long_name": "1010"
},
{
"types": [
"locality",
"political"
],
"short_name": "Vienna",
"long_name": "Vienna"
},
{
"types": [
"administrative_area_level_1",
"political"
],
"short_name": "Vienna",
"long_name": "Vienna"
},
{
"types": [
"country",
"political"
],
"short_name": "AT",
"long_name": "Austria"
}
],
"geometry": {
"bounds": {
"southwest": {
"lng": 16.3552218,
"lat": 48.1992606
},
"northeast": {
"lng": 16.3853131,
"lat": 48.2185876
}
},
"viewport": {
"southwest": {
"lng": 16.3552218,
"lat": 48.1992606
},
"northeast": {
"lng": 16.3853131,
"lat": 48.2185876
}
},
"location": {
"lng": 16.3677601,
"lat": 48.2083556
},
"location_type": "APPROXIMATE"
}
},
{
"types": [
"sublocality_level_1",
"sublocality",
"political"
],
"formatted_address": "Innere Stadt, 1010 Vienna, Austria",
"address_components": [
{
"types": [
"sublocality_level_1",
"sublocality",
"political"
],
"short_name": "Innere Stadt",
"long_name": "Innere Stadt"
},
{
"types": [
"locality",
"political"
],
"short_name": "Vienna",
"long_name": "Vienna"
},
{
"types": [
"administrative_area_level_1",
"political"
],
"short_name": "Vienna",
"long_name": "Vienna"
},
{
"types": [
"country",
"political"
],
"short_name": "AT",
"long_name": "Austria"
},
{
"types": [
"postal_code"
],
"short_name": "1010",
"long_name": "1010"
}
],
"geometry": {
"bounds": {
"southwest": {
"lng": 16.3552218,
"lat": 48.1992606
},
"northeast": {
"lng": 16.3853131,
"lat": 48.2185876
}
},
"viewport": {
"southwest": {
"lng": 16.3552218,
"lat": 48.1992606
},
"northeast": {
"lng": 16.3853131,
"lat": 48.2185876
}
},
"location": {
"lng": 16.3697428,
"lat": 48.2088774
},
"location_type": "APPROXIMATE"
}
},
{
"types": [
"administrative_area_level_1",
"political"
],
"formatted_address": "Vienna, Austria",
"address_components": [
{
"types": [
"administrative_area_level_1",
"political"
],
"short_name": "Vienna",
"long_name": "Vienna"
},
{
"types": [
"country",
"political"
],
"short_name": "AT",
"long_name": "Austria"
}
],
"geometry": {
"bounds": {
"southwest": {
"lng": 16.1826199,
"lat": 48.1182699
},
"northeast": {
"lng": 16.5774999,
"lat": 48.3230999
}
},
"viewport": {
"southwest": {
"lng": 16.1826199,
"lat": 48.1182699
},
"northeast": {
"lng": 16.5774999,
"lat": 48.3230999
}
},
"location": {
"lng": 16.3738138,
"lat": 48.20823499999999
},
"location_type": "APPROXIMATE"
}
}
]
Here is my code:
public static JSONObject getLocationInfo(double lat, double lng) {
HttpGet httpGet = new HttpGet("http://maps.googleapis.com/maps/api/geocode/json?latlng="+ lat+","+lng +"&sensor=true");
HttpClient client = new DefaultHttpClient();
HttpResponse response;
StringBuilder stringBuilder = new StringBuilder();
try {
response = client.execute(httpGet);
HttpEntity entity = response.getEntity();
InputStream stream = entity.getContent();
int b;
while ((b = stream.read()) != -1) {
stringBuilder.append((char) b);
}
} catch (ClientProtocolException e) {
} catch (IOException e) {
}
JSONObject jsonObject = new JSONObject();
try {
jsonObject = new JSONObject(stringBuilder.toString());
} catch (JSONException e) {
e.printStackTrace();
}
return jsonObject;
}
public static String getCurrentLocationViaJSON(double lat, double lng) {
JSONObject jsonObj = getLocationInfo(lat, lng);
Log.i("JSON string =>", jsonObj.toString());
String currentLocation = "testing";
String street_address = null;
String postal_code = null;
try {
String status = jsonObj.getString("status").toString();
Log.i("status", status);
if(status.equalsIgnoreCase("OK")){
JSONArray results = jsonObj.getJSONArray("results");
int i = 0;
Log.i("i", i+ "," + results.length() ); //TODO delete this
do{
JSONObject r = results.getJSONObject(i);
JSONArray typesArray = r.getJSONArray("types");
String types = typesArray.getString(0);
if(types.equalsIgnoreCase("street_address")){
street_address = r.getString("formatted_address").split(",")[0];
Log.i("street_address", street_address);
}else if(types.equalsIgnoreCase("postal_code")){
postal_code = r.getString("formatted_address");
Log.i("postal_code", postal_code);
}
if(street_address!=null && postal_code!=null){
currentLocation = street_address + "," + postal_code;
Log.i("Current Location =>", currentLocation); //Delete this
i = results.length();
}
i++;
}while(i<results.length());
Log.i("JSON Geo Locatoin =>", currentLocation);
return currentLocation;
}
} catch (JSONException e) {
Log.e("testing","Failed to load JSON");
e.printStackTrace();
}
return null;
}
Any help would be greatly appreciated.