0

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

下面的代码加载全部由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); 

回答

0

首先,你必须得到用户的位置,有很多方法可以实现这并不像看起来那么简单,如果你想得到最好和最准确的位置,检查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 

所以,只要把一个if放在for语句中。

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

       }); 

      } 
      } 
     } 
+0

谢谢您的回答,但我怎么定义** **用户位置 – Kabe

+0

我认为你已经实现了如何获得当前位置。让我更新我的答案。 – Aiapaec

+0

不,这是我困惑从当前位置获得经度和实现距离的地方。 – Kabe

1

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

here是一个很好的链接,你可以按照这个

+0

这很好,但我认为他正在接受一群他在数据库中的商店。 – Aiapaec

+0

它确实合适,因为我已经阅读json的店铺位置 – Kabe

+0

@ El_Mochiq:你说得对。等待你的回答。感谢先进的 – Kabe

相关问题