在android中使用google maps v2查找最近的加油站,并希望显示到它的路线

时间:2017-08-10 11:29:56

标签: android google-maps google-places-api google-maps-android-api-2

我可以使用以下代码找到附近的加油站,但我怎样才能找到最近的加油站?

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

在此之后,我正在解析响应。

但我想做的是想找到最近的一个?我可以用纬度和经度来计算距离,但我认为必须有一些更简单的方法吗?

有人可以帮我吗?

1 个答案:

答案 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

  

类型 - 将结果限制为与指定类型匹配的地方。只能指定一种类型(如果提供了多种类型,则忽略第一个条目后面的所有类型)

最近的加油站将是回应中的第一个。

我希望这有帮助!