1

我有一個android應用程序,用戶可以註冊,當它們登錄到他們的位置時,可以通過地圖上的標記看到,如圖所示。但我只想在100米內顯示附近的標記。Android - 如何顯示附近的用戶標記?

請幫我準確的編碼部分和所有的對象初始化。

enter image description here

這是我從數據庫中獲取所有用戶標記(緯度,經度)代碼:

private void getNearbyMarkers(){ 

    geoFireRef.addValueEventListener(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 

      for (DataSnapshot locationSnapshot : dataSnapshot.getChildren()){ 

       LocationData locations = locationSnapshot.getValue(LocationData.class); 

       final Double tempLat = Double.parseDouble(locations.getLatitude()); 
       final Double tempLng = Double.parseDouble(locations.getLongitude()); 
       final String uid = locations.getUid(); 
       databaseReference3.addValueEventListener(new ValueEventListener() { 
        @Override 
        public void onDataChange(DataSnapshot dataSnapshot) { 
         String name = dataSnapshot.child(uid).child("name").getValue().toString(); 
         String business = dataSnapshot.child(uid).child("business").getValue().toString(); 

         LatLng allLatLang = new LatLng(tempLat,tempLng); 
         MarkerOptions markerOptions = new MarkerOptions(); 
         markerOptions.position(allLatLang); 
         markerOptions.title(name); 
         markerOptions.snippet(business); 
         markerOptions.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_ORANGE)); 

         locationMarker = mMap.addMarker(markerOptions); 
        } 

        @Override 
        public void onCancelled(DatabaseError databaseError) { 

        } 
       }); 

      } 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 

     } 
    }); 

} 

非常感謝您在這方面的時間和幫助。

回答

1

您可以嘗試SphericalUtil.computeDistanceBetween,對於您需要添加的依賴,

dependencies { 
    compile 'com.google.maps.android:android-maps-utils:0.5+' 
} 

而且你可以嘗試像這樣在你的代碼,

markerOptions.visible(false);// We dont need to show, if its less than 100 meter we can show, otherwise we will just create and we will make it visble or not later 

locationMarker = mMap.addMarker(markerOptions); 

LatLng yourLatLang = new LatLng([your lat],[your lang]); 
if (SphericalUtil.computeDistanceBetween(yourLatLang, locationMarker.getPosition()) < 100) { 
    locationMarker.setVisible(true); 
} 
+0

我只是'改變locationMarker = mMap.addMarker(markerOptions.visible(false));' 這是一個完美的答案,謝謝如此如此這般如此如此^ _ ^ – Tamim

1

簡短的回答location.distanceTo(anotherLocation)

setupMap我建議增加額外的監聽器,以獲得以簡單的方式所有地點更改。

mMap.setMyLocationEnabled(true); 
mMap.setOnMyLocationChangeListener(this); 

然後在這個監聽器中,您只需要在當前位置和目標之間找到距離。以米爲單位的距離

@Override 
public void onMyLocationChange(Location location) { 
    Location target = new Location("target"); 
    for(LatLng point : new LatLng[]{POINTA, POINTB, POINTC, POINTD}) { 
     target.setLatitude(point.latitude); 
     target.setLongitude(point.longitude); 
     if(location.distanceTo(target) < METERS_100) { 
      // bingo! 
     } 
    } 
} 

您的活動不要忘了implements GoogleMap.OnMyLocationChangeListener

希望這能解決你的問題。有關如何與Google Maps API工作的進一步瞭解一下這個link

相關問題