2012-09-17 5 views
6

Ich muss Goolge Orte Seiten von Long/Lat für alle Banken in der Gegend von 20m suchen. Diese Google Places Doc beschreibt, wie man es mit JavaScript macht. Sie verwenden ein google.maps.LatLng Objekt, das ich nicht in Java habe.So senden Sie eine Google Places-Suchabfrage mit Java

Kann jemand jetzt den Service anrufen?

Vielleicht gibt es auch eine Java API für Goolge Places?

Mit freundlichen Grüßen, Christian.

Edit 1:

Ich fand someone die URL wie diese Konstruktion:

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

Antwort: Edit 2:

ich wegen der Post oben fand ich heraus, wie es zu tun. Dies ist ein Beispiel dafür, wie die Anfrage senden:

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

} 

Antwort

13

hier ein vollständigeres Beispiel (mit JSON-Analyse und eine Ausnahmebehandlung) für Places API-Suche, die automatischen Vervollständigung und Details. Es wurde für Android geschrieben, kann aber leicht für Nicht-Android-Anwendungen portiert werden (muss org.json-Bibliotheken enthalten und eine andere Protokollierung verwenden). Die Klasse Place ist ein einfaches Wertobjekt.

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

Vielen Dank, du rettest mein Leben :) – Kunal

+0

Thnks du sehr viel !!! –

10

Eine Java-Bibliothek für die Arbeit mit dem Google Places API ist auf GitHub und in Maven Zentral verfügbar (Offenlegung: Ich bin der Entwickler.) Eine Liste von Orten bekommen (oder Details, Foto etc.) in ein oder zwei Zeilen erfolgen. Auf der Projektseite finden Sie Beispiele und richten Details ein.

https://github.com/pushbit/sprockets

+0

cool, danke :) – d0x

+0

Das ist cool, danke dafür :) – Alex

1

Es gibt keine offizielle Java-Bibliothek für Google Places API. Es gibt jedoch mehrere Projekte auf Github. Eine andere ist dies: Google Places API Java Library on Github

+1

Es sollte beachtet werden, dass das verlinkte Repository eine Gabelung des ursprünglichen Projekts ist. Das ursprüngliche Repo befindet sich [hier] (https://github.com/windy1/google-places-api-java) – Windwaker

+0

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