2012-09-17 14 views
6

Devo cercare Goolge Places Pages per long/lat per qualsiasi banca nell'area di 20m. Questo Google Places Doc descrive come farlo con JavaScript. Stanno usando un oggetto google.maps.LatLng che non ho in Java.Come inviare una richiesta di ricerca di Google Places con Java

Qualcuno ora come chiamare il servizio?

Forse c'è anche un'API Java per Goolge Places?

Cordiali saluti, Cristiano.

Edit 1:

ho trovato someone costruzione del URL come questo:

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

Risposta: Edit 2:

io a causa del post di cui sopra ho trovato il modo di farlo. Questo è un esempio di come inviare la richiesta:

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); 
    } 

} 

risposta

13

Ecco un esempio più completo (comprende JSON parsing e alcuni gestione delle eccezioni) per la ricerca Luoghi API, completamento automatico, e dettagli. È stato scritto per Android, ma può essere facilmente portato per uso non Android (è necessario includere librerie org.json e utilizzare diversi log). La classe Place è un oggetto valore semplice.

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

Grazie per avermi salvato la vita :) – Kunal

+0

Grazie mille !!! –

10

Una libreria Java per lavorare con le API di Google Places è disponibile su GitHub e Maven centrale (disclosure: io sono lo sviluppatore.) Ottenere un elenco di luoghi (o dettagli, foto, ecc) può essere fatto in una o due righe. Vedere la pagina del progetto per esempi e impostare i dettagli.

https://github.com/pushbit/sprockets

+0

cool, grazie :) – d0x

+0

Questo è bello, grazie per questo :) – Alex

1

Non esiste alcuna libreria ufficiale di Java disponibile per Google Places API. Tuttavia, ci sono diversi progetti ospitati su Github. Un altro è questo: Google Places API Java Library on Github

+1

Va notato che il repository collegato è un fork del progetto originale. Il repository originale si trova [qui] (https://github.com/windy1/google-places-api-java) – Windwaker

+0

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

Problemi correlati