1

私はユーザーが登録できるアンドロイドアプリを持っており、ログインしたときに、この画像のように地図上のマーカーで表示されます。しかし、私はちょうど100メートル以内に近くのマーカーを表示したい。Android - 周辺のユーザーマーカーを表示するにはどうすればよいですか?

正確なコーディングセクションとすべてのオブジェクト初期化を手伝ってください。ここで

enter image description here

データベースからすべてのユーザーマーカー(緯度、LNG)を取得するための私のコードです:

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) { 

     } 
    }); 

} 

あなたの時間とこの問題での支援のためにありがとうございました。 setupMap

答えて

1

Google Maps API表情で作業する方法についてさらに知識についてあなたは、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)

私は、簡単な方法ですべての場所の変更を取得するには、追加のリスナーを追加することをお勧めします。

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

希望にあなたの活動を忘れないでください。このlink

関連する問題