【问题标题】:Loading nearest shops from current location in Android Map在 Android 地图中从当前位置加载最近的商店
【发布时间】:2014-01-14 17:07:42
【问题描述】:

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

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

for(final Shop shop : this.response.shops){
            for(int i = 0; i < shop.getShopLat().size(); i++){
                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;
                    }

                });

            }
        }

已编辑:

LocationManager service = (LocationManager)     getActivity().getSystemService(getActivity().LOCATION_SERVICE);
    Criteria criteria = new Criteria();
    String provider = service.getBestProvider(criteria, false);
    Location userLocation = service.getLastKnownLocation(provider);

【问题讨论】:

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


    【解决方案1】:

    你可以使用google 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");
    

    here 是一个不错的链接,你可以关注这个

    【讨论】:

    • 这很好,但我认为他正在引用他在数据库中的一组商店。
    • @El_Mochiq:你是对的。等你回答。非常感谢
    • 查看link
    【解决方案2】:

    首先,你必须得到用户的位置,有很多方法可以实现,如果你想得到最好和最准确的位置,它并不像看起来那么简单,检查this线程,真的有帮助,在那之后我认为你应该使用这样的东西:

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

    【讨论】:

    • 感谢您的回答,但我该如何定义 userLocation
    • 我以为你实现了如何获取当前位置。让我更新我的答案。
    • 不,这是我混淆从当前位置获取经纬度和实现距离的地方。
    • 什么都不显示,显示全部还是什么?您是否在调试模式下运行设备?用户位置是否存在?
    • 仅显示当前位置。标记未加载。以正常和调试模式在设备上运行。未发现错误
    猜你喜欢
    • 2022-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多