2012-09-17 17 views
6

Necesito buscar páginas de lugares de Goolge por longitud/lat para cualquier banco en el área de 20m. Este Google Places Doc describe cómo hacerlo con JavaScript. Están utilizando un objeto google.maps.LatLng que no tengo en Java.Cómo enviar una solicitud de búsqueda de Google Places con Java

¿Alguien ahora cómo llamar al Servicio?

¿Tal vez también hay una API de Java para Goolge Places?

Saludos cordiales, Christian.

Edición 1:

He encontrado someone la construcción de la URL así:

String url = baseUrl + "location=" + lat + "," + lon + "&" + 
       "radius=" + searchRadius + "&" + types + "&" + "sensor=true" + 
       "&" + "key=" + googleAPIKey; 

Respuesta: Edición 2:

que debido a la post anterior me enteré de cómo hacerlo. Este es un ejemplo de cómo enviar la solicitud:

public class GooglePlacesClient 
{ 
    private static final String GOOGLE_API_KEY = "***"; 

    private final HttpClient client   = new DefaultHttpClient(); 

    public static void main(final String[] args) throws ParseException, IOException, URISyntaxException 
    { 
     new GooglePlacesClient().performSearch("establishment", 8.6668310, 50.1093060); 
    } 

    public void performSearch(final String types, final double lon, final double lat) throws ParseException, IOException, URISyntaxException 
    { 
     final URIBuilder builder = new URIBuilder().setScheme("https").setHost("maps.googleapis.com").setPath("/maps/api/place/search/json"); 

     builder.addParameter("location", lat + "," + lon); 
     builder.addParameter("radius", "5"); 
     builder.addParameter("types", types); 
     builder.addParameter("sensor", "true"); 
     builder.addParameter("key", GooglePlacesClient.GOOGLE_API_KEY); 

     final HttpUriRequest request = new HttpGet(builder.build()); 

     final HttpResponse execute = this.client.execute(request); 

     final String response = EntityUtils.toString(execute.getEntity()); 

     System.out.println(response); 
    } 

} 

Respuesta

13

Aquí hay un ejemplo más completo (incluye análisis de JSON y algo de manejo de excepciones) para la búsqueda Lugares API, autocompletar, y los detalles. Fue escrito para Android, pero puede ser fácilmente portado para uso que no sea de Android (necesita incluir org.json libs y usar diferentes registros). La clase Place es un objeto de valor simple.

package com.example.google.places; 

import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 

import android.util.Log; 

import java.io.IOException; 
import java.io.InputStreamReader; 
import java.net.HttpURLConnection; 
import java.net.MalformedURLException; 
import java.net.URL; 
import java.net.URLEncoder; 
import java.util.ArrayList; 

/** 
* @author saxman 
*/ 
public class PlacesService { 
    private static final String LOG_TAG = "ExampleApp"; 

    private static final String PLACES_API_BASE = "https://maps.googleapis.com/maps/api/place"; 

    private static final String TYPE_AUTOCOMPLETE = "/autocomplete"; 
    private static final String TYPE_DETAILS = "/details"; 
    private static final String TYPE_SEARCH = "/search"; 

    private static final String OUT_JSON = "/json"; 

    // KEY! 
    private static final String API_KEY = "YOUR KEY"; 

    public static ArrayList<Place> autocomplete(String input) { 
     ArrayList<Place> resultList = null; 

     HttpURLConnection conn = null; 
     StringBuilder jsonResults = new StringBuilder(); 
     try { 
      StringBuilder sb = new StringBuilder(PLACES_API_BASE); 
      sb.append(TYPE_AUTOCOMPLETE); 
      sb.append(OUT_JSON); 
      sb.append("?sensor=false"); 
      sb.append("&key=" + API_KEY); 
      sb.append("&input=" + URLEncoder.encode(input, "utf8")); 

      URL url = new URL(sb.toString()); 
      conn = (HttpURLConnection) url.openConnection(); 
      InputStreamReader in = new InputStreamReader(conn.getInputStream()); 

      int read; 
      char[] buff = new char[1024]; 
      while ((read = in.read(buff)) != -1) { 
       jsonResults.append(buff, 0, read); 
      } 
     } catch (MalformedURLException e) { 
      Log.e(LOG_TAG, "Error processing Places API URL", e); 
      return resultList; 
     } catch (IOException e) { 
      Log.e(LOG_TAG, "Error connecting to Places API", e); 
      return resultList; 
     } finally { 
      if (conn != null) { 
       conn.disconnect(); 
      } 
     } 

     try { 
      // Create a JSON object hierarchy from the results 
      JSONObject jsonObj = new JSONObject(jsonResults.toString()); 
      JSONArray predsJsonArray = jsonObj.getJSONArray("predictions"); 

      // Extract the Place descriptions from the results 
      resultList = new ArrayList<Place>(predsJsonArray.length()); 
      for (int i = 0; i < predsJsonArray.length(); i++) { 
       Place place = new Place(); 
       place.reference = predsJsonArray.getJSONObject(i).getString("reference"); 
       place.name = predsJsonArray.getJSONObject(i).getString("description"); 
       resultList.add(place); 
      } 
     } catch (JSONException e) { 
      Log.e(LOG_TAG, "Error processing JSON results", e); 
     } 

     return resultList; 
    } 

    public static ArrayList<Place> search(String keyword, double lat, double lng, int radius) { 
     ArrayList<Place> resultList = null; 

     HttpURLConnection conn = null; 
     StringBuilder jsonResults = new StringBuilder(); 
     try { 
      StringBuilder sb = new StringBuilder(PLACES_API_BASE); 
      sb.append(TYPE_SEARCH); 
      sb.append(OUT_JSON); 
      sb.append("?sensor=false"); 
      sb.append("&key=" + API_KEY); 
      sb.append("&keyword=" + URLEncoder.encode(keyword, "utf8")); 
      sb.append("&location=" + String.valueOf(lat) + "," + String.valueOf(lng)); 
      sb.append("&radius=" + String.valueOf(radius)); 

      URL url = new URL(sb.toString()); 
      conn = (HttpURLConnection) url.openConnection(); 
      InputStreamReader in = new InputStreamReader(conn.getInputStream()); 

      int read; 
      char[] buff = new char[1024]; 
      while ((read = in.read(buff)) != -1) { 
       jsonResults.append(buff, 0, read); 
      } 
     } catch (MalformedURLException e) { 
      Log.e(LOG_TAG, "Error processing Places API URL", e); 
      return resultList; 
     } catch (IOException e) { 
      Log.e(LOG_TAG, "Error connecting to Places API", e); 
      return resultList; 
     } finally { 
      if (conn != null) { 
       conn.disconnect(); 
      } 
     } 

     try { 
      // Create a JSON object hierarchy from the results 
      JSONObject jsonObj = new JSONObject(jsonResults.toString()); 
      JSONArray predsJsonArray = jsonObj.getJSONArray("results"); 

      // Extract the Place descriptions from the results 
      resultList = new ArrayList<Place>(predsJsonArray.length()); 
      for (int i = 0; i < predsJsonArray.length(); i++) { 
       Place place = new Place(); 
       place.reference = predsJsonArray.getJSONObject(i).getString("reference"); 
       place.name = predsJsonArray.getJSONObject(i).getString("name"); 
       resultList.add(place); 
      } 
     } catch (JSONException e) { 
      Log.e(LOG_TAG, "Error processing JSON results", e); 
     } 

     return resultList; 
    } 

    public static Place details(String reference) { 
     HttpURLConnection conn = null; 
     StringBuilder jsonResults = new StringBuilder(); 
     try { 
      StringBuilder sb = new StringBuilder(PLACES_API_BASE); 
      sb.append(TYPE_DETAILS); 
      sb.append(OUT_JSON); 
      sb.append("?sensor=false"); 
      sb.append("&key=" + API_KEY); 
      sb.append("&reference=" + URLEncoder.encode(reference, "utf8")); 

      URL url = new URL(sb.toString()); 
      conn = (HttpURLConnection) url.openConnection(); 
      InputStreamReader in = new InputStreamReader(conn.getInputStream()); 

      // Load the results into a StringBuilder 
      int read; 
      char[] buff = new char[1024]; 
      while ((read = in.read(buff)) != -1) { 
       jsonResults.append(buff, 0, read); 
      } 
     } catch (MalformedURLException e) { 
      Log.e(LOG_TAG, "Error processing Places API URL", e); 
      return null; 
     } catch (IOException e) { 
      Log.e(LOG_TAG, "Error connecting to Places API", e); 
      return null; 
     } finally { 
      if (conn != null) { 
       conn.disconnect(); 
      } 
     } 

     Place place = null; 
     try { 
      // Create a JSON object hierarchy from the results 
      JSONObject jsonObj = new JSONObject(jsonResults.toString()).getJSONObject("result"); 

      place = new Place(); 
      place.icon = jsonObj.getString("icon"); 
      place.name = jsonObj.getString("name"); 
      place.formatted_address = jsonObj.getString("formatted_address"); 
      if (jsonObj.has("formatted_phone_number")) { 
       place.formatted_phone_number = jsonObj.getString("formatted_phone_number"); 
      } 
     } catch (JSONException e) { 
      Log.e(LOG_TAG, "Error processing JSON results", e); 
     } 

     return place; 
    } 
} 
+0

Gracias a ahorrar mi vida :) – Kunal

+0

Thnks mucho !!! –

10

Una biblioteca de Java para trabajar con la API de Google Places está disponible en GitHub y en Maven central (divulgación: Soy el desarrollador). Obtener una lista de lugares (o detalles, fotos, etc.) puede hacerse en una o dos líneas. Consulte la página del proyecto para ver ejemplos y configurar detalles.

https://github.com/pushbit/sprockets

+0

genial, gracias :) – d0x

+0

Esto es genial, gracias por eso :) – Alex

1

No existe ninguna biblioteca oficial de Java disponible para la API de Google Places. Sin embargo, hay varios proyectos alojados en Github. Otra es la siguiente: Google Places API Java Library on Github

+1

Cabe señalar que el repositorio vinculado es una bifurcación del proyecto original. El informe original se encuentra [aquí] (https://github.com/windy1/google-places-api-java) – Windwaker

+0

Hay. https://github.com/googlemaps/google-maps-services-java –

Cuestiones relacionadas