我可以使用以下代码找到附近的加油站,但我怎样才能找到最近的加油站?
StringBuilder googlePlacesUrl = new StringBuilder("https://maps.googleapis.com/maps/api/place/nearbysearch/json?");
googlePlacesUrl.append("location=" + source.latitude + "," + source.longitude);
googlePlacesUrl.append("&radius=" + PROOXIMITY_RADIUS);
googlePlacesUrl.append("&types=" + "gas_station");
googlePlacesUrl.append("&sensor=true");
googlePlacesUrl.append("&key=" + GOOGLE_API_KEY);
使用上面的代码,我正在创建网址以获取最近的加油站。
public String read(String httpUrl){
String httpData = "";
InputStream stream = null;
HttpURLConnection urlConnection = null;
try{
URL url = new URL(httpUrl);
urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.connect();
stream = urlConnection.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(stream));
StringBuffer buf = new StringBuffer();
String line = "";
while((line = reader.readLine()) != null){
buf.append(line);
}
httpData = buf.toString();
reader.close();
} catch (Exception e) {
Log.e("HttpRequestHandler" , e.getMessage());
} finally {
try {
stream.close();
urlConnection.disconnect();
} catch (Exception e){
Log.e("HttpRequestHandler" , e.getMessage());
}
}
return httpData;
}
在此之后,我正在解析响应。
但我想做的是想找到最近的一个?我可以用纬度和经度来计算距离,但我认为必须有一些更简单的方法吗?
有人可以帮我吗?
答案 0 :(得分:1)
最直接的方法是在请求中使用rankby=distance
参数。
rankby - 指定列出结果的顺序。请注意,如果指定了radius(在上面的必需参数下描述),则不得包括rankby。可能的值有:
突出(默认)。此选项根据结果的重要性对结果进行排序。排名将有利于指定区域内的显着位置。地方在Google索引中的排名,全球知名度以及其他因素都会影响显着性。
<强>距离即可。此选项按照与指定位置的距离按升序对搜索结果进行偏差。指定距离时,需要一个或多个关键字,名称或类型。
https://developers.google.com/places/web-service/search#PlaceSearchRequests
以下代码段(删除radius
并添加rankby
)
StringBuilder googlePlacesUrl = new StringBuilder("https://maps.googleapis.com/maps/api/place/nearbysearch/json?");
googlePlacesUrl.append("location=" + source.latitude + "," + source.longitude);
googlePlacesUrl.append("&rankby=distance");
googlePlacesUrl.append("&type=" + "gas_station");
googlePlacesUrl.append("&key=" + GOOGLE_API_KEY);
您还可以删除很久以前弃用且不再使用的sensor
参数。请注意types
参数无效,您应根据文档使用type
。
类型 - 将结果限制为与指定类型匹配的地方。只能指定一种类型(如果提供了多种类型,则忽略第一个条目后面的所有类型)
最近的加油站将是回应中的第一个。
我希望这有帮助!