从Android地图中的当前位置加载最近的商店

从Android地图中的当前位置加载最近的商店,android,json,google-maps,google-maps-android-api-2,google-maps-api-2,Android,Json,Google Maps,Google Maps Android Api 2,Google Maps Api 2,我需要你帮我搬最近的商店。目前,我实现了从包含lat&long的json加载所有商店。但现在我想在距离当前位置5公里的范围内装载所有商店。有些人建议我使用distanceTo()来实现这一点,但我无法实现它。请找个人帮忙解决这个问题 以下代码从json加载所有商店(工作正常): 首先,你必须获得用户的位置,有很多方法可以实现这一点,如果你想获得最佳和最准确的位置,这并不像看上去那么简单,检查线程,真的很有帮助,然后我认为你应该使用以下方法: float[] results = new float

我需要你帮我搬最近的商店。目前,我实现了从包含lat&long的json加载所有商店。但现在我想在距离当前位置5公里的范围内装载所有商店。有些人建议我使用distanceTo()来实现这一点,但我无法实现它。请找个人帮忙解决这个问题

以下代码从json加载所有商店(工作正常):


首先,你必须获得用户的位置,有很多方法可以实现这一点,如果你想获得最佳和最准确的位置,这并不像看上去那么简单,检查线程,真的很有帮助,然后我认为你应该使用以下方法:

float[] results = new float[3];
Location.distanceBetween(userLocation.getLatitude(), userLocation.getLongitude(), Double.parseDouble(shop.getShopLat().get(i), Double.parseDouble(shop.getShopLng().get(i)), results);
//results[0] = distance in meters
所以只要在for语句中加一个if

for(final Shop shop : this.response.shops){
   for(int i = 0; i < shop.getShopLat().size(); i++){
    float[] results = new float[3];
        Location.distanceBetween(userLocation.getLatitude(), userLocation.getLongitude(), Double.parseDouble(shop.getShopLat().get(i), Double.parseDouble(shop.getShopLng().get(i)), results);
        if(results[0]<=5000)
        {   
                    map.addMarker(new MarkerOptions().position(new LatLng(Double.parseDouble(shop.getShopLat().get(i)), Double.parseDouble(shop.getShopLng().get(i)))).title(shop.getName()));
                    map.setInfoWindowAdapter(new GoogleMap.InfoWindowAdapter()     
               {    
                    @Override
                    public View getInfoContents(Marker marker) {
                        // TODO Auto-generated method stub
                        return null;
                    }

                    @Override
                    public View getInfoWindow(Marker marker) {
                        // TODO Auto-generated method stub
                        return null;
                    }

                });

            }
          }
        }
for(最终车间:this.response.shops){
对于(int i=0;i如果(结果[0]U可以使用谷歌api来实现这一点

StringBuilder sb = new StringBuilder(
            "https://maps.googleapis.com/maps/api/place/nearbysearch/json?");
    sb.append("location=" + latitude + "," + longitude);
    sb.append("&radius=5000");
    sb.append("&types=" + placeType);
    sb.append("&sensor=true");
    sb.append("&key=Your Api Key");

这是一个很好的链接,您可以按照此链接进行操作,谢谢您的回答,但是我如何定义UserLocation我以为您实现了如何获取当前位置。让我更新我的答案。不,这就是我混淆了从当前位置获取lat&long和实现距离的地方。没有显示任何内容、显示所有内容还是什么?您正在跑步吗设备处于调试模式?用户位置存在?仅显示当前位置。标记未加载。在设备上以正常模式和调试模式运行。未发现错误。这很好,但我认为他正在查看数据库中的一组商店。@El_Mochiq:你说得对。等待你的回答。感谢你提前检查此问题
for(final Shop shop : this.response.shops){
   for(int i = 0; i < shop.getShopLat().size(); i++){
    float[] results = new float[3];
        Location.distanceBetween(userLocation.getLatitude(), userLocation.getLongitude(), Double.parseDouble(shop.getShopLat().get(i), Double.parseDouble(shop.getShopLng().get(i)), results);
        if(results[0]<=5000)
        {   
                    map.addMarker(new MarkerOptions().position(new LatLng(Double.parseDouble(shop.getShopLat().get(i)), Double.parseDouble(shop.getShopLng().get(i)))).title(shop.getName()));
                    map.setInfoWindowAdapter(new GoogleMap.InfoWindowAdapter()     
               {    
                    @Override
                    public View getInfoContents(Marker marker) {
                        // TODO Auto-generated method stub
                        return null;
                    }

                    @Override
                    public View getInfoWindow(Marker marker) {
                        // TODO Auto-generated method stub
                        return null;
                    }

                });

            }
          }
        }
StringBuilder sb = new StringBuilder(
            "https://maps.googleapis.com/maps/api/place/nearbysearch/json?");
    sb.append("location=" + latitude + "," + longitude);
    sb.append("&radius=5000");
    sb.append("&types=" + placeType);
    sb.append("&sensor=true");
    sb.append("&key=Your Api Key");