如何使用Java发送Google地方信息搜索请求

对于20米范围内的任何银行,我需要通过long / lat搜索Goolge Places Pages。 此Google Places文档介绍了如何使用JavaScript。 他们正在使用我在Java中没有的google.maps.LatLng对象。

现在有人怎么打电话给服务?

也许Goolge Places还有一个Java API?

最诚挚的问候,基督徒。

编辑1:

我发现有人像这样构建url:

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

答案:编辑2:

我因为上面的post我发现了怎么做。 这是如何发送请求的示例:

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

这是Places API搜索,自动完成和详细信息的更完整示例(包括JSON解析和一些exception处理)。 它是为Android编写的,但可以很容易移植到非Android使用(需要包含org.json库并使用不同的日志记录)。 Place类是一个简单的值对象。

 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 autocomplete(String input) { ArrayList 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(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 search(String keyword, double lat, double lng, int radius) { ArrayList 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(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; } } 

GitHub和Maven Central提供了一个用于使用Google Places API的Java库(披露:我是开发人员。)获取地点列表(或详细信息,照片等)可以在一行或两行中完成。 有关示例和设置详细信息,请参阅项目页面。

https://github.com/pushbit/sprockets

Google Places API不存在任何官方Java库。 但是,Github上有几个项目。 另一个是: Github上的Google Places API Java库