如何调整Google Maps API中地点的搜索半径?

时间:2018-07-30 06:15:11

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

发送请求时,我使用parameter radius=300,它应该显示距我的位置300米半径内的位置:

StringBuilder stringBuilder = new StringBuilder("https://maps.googleapis.com/maps/api/place/nearbysearch/json?");
stringBuilder.append("location=").append(mLatitude).append(",").append(mLongitude);
stringBuilder.append("&keyword=пятерочка | магнит");
stringBuilder.append("&language=ru");
stringBuilder.append("&radius=300");
stringBuilder.append("&sensor=true");

与我的位置相距300米的同一Circle

Circle circle = mMap.addCircle(new CircleOptions()
        .center(latLng)
        .radius(300).strokeColor(Color.argb(50, 255, 0, 0))
        .fillColor(Color.argb(50, 255, 0, 0)));

文档说,以米为单位返回值,这是在300米的请求中以及在Circle 300米中返回的,但实际上我得到了:

image from my device

是否可以使圆显示的半径与请求的半径匹配?

P.S。对不起我的英语不好

1 个答案:

答案 0 :(得分:1)

This文档说-

  

此区域内的结果将比结果排名更高   在搜索圈之外;但是,外部的突出结果   可能包括搜索半径。

因此,结论是某些突出位置可能会显示在您定义的半径之外。但是,您可以通过从API获取所有结果后实施循环来排除边界之外的内容。

  1. 在依赖项中包含Map-utils-
  

实现'com.google.maps.android:android-maps-utils:0.5 +'

  1. 计算每个位置到中心的距离,以及边界内的位置标记
for (Place place: allPlaces) {
    float distance = (float) SphericalUtil.computeDistanceBetween(centreLatLng, place.getLatLng());
    if (distance <= 300) {
        Marker placeMarker = googleMap.addMarker(new MarkerOptions()
            .position(place.getLatLng())
            .title(place.getName())
            .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE))
            .anchor(0.5 f, 1.0 f));
    }
}