6

Google Haritalar'ın sol üst köşesinde, kullanıcılara belirli bir nokta işaret noktasından x uzaklıkta olmaları konusunda bilgi veren bir TextView görüntülemeye çalışıyorum, ör. "A konumuna yakınsınız", ancak menzil dahilinde yalnızca TextView gösteriliyor. Aralık dışına çıkarlarsa, TextView kaybolacaktır.Google Haritalar'daki güncel konumdaki yakındaki işaretçi konumlarını nasıl sürekli olarak tespit edebilirim?

Google Rehber API'sının size yakındaki tüm yerleri gösterdiğinin farkındayım, ancak kullanıcıların yakınlarına x uzaklıkları olması durumunda haritadaki işaretçilerin yakın konumlarını göstermek istiyorum.

Bunu nasıl başarabilirim? Google Rehber API'sını kullanmaya gerek duyar mıyım?

benim sınıf .java:

private GoogleMap mMap; 

private LatLng currLocation; 

private static final LatLng POINTA = new LatLng(32.820193, -117.232568); 
private static final LatLng POINTB = new LatLng(32.829129, -117.232204); 
private static final LatLng POINTC = new LatLng(32.821114, -117.231534); 
private static final LatLng POINTD = new LatLng(32.825157, -117.232003); 

// Array to store hotspot coordinates 
private ArrayList<LatLng> markerCoords = new ArrayList<LatLng>(); 
private static final int POINTS = 4; 

@Override 
protected void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_map); 

    setUpMapIfNeeded(); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) 
{ 
    // Create MenuInflater object to insert ActionBar buttons 
    MenuInflater inflater = getMenuInflater(); 

    // Display the ActionBar buttons from .xml 
    inflater.inflate(R.menu.menu_map, menu); 

    return true; 
} 

@Override 
protected void onResume() 
{ 
    super.onResume(); 
    setUpMapIfNeeded(); 

} 

private void setUpMapIfNeeded() 
{ 
    if (mMap == null) 
    { 
     mMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)) 
       .getMap(); 

     // Check if we were successful in obtaining the map. 
     if (mMap != null) 
     { 
      markerCoords.add(POINTA); 
      markerCoords.add(POINTB); 
      markerCoords.add(POINTC); 
      markerCoords.add(POINTD); 

      setUpMap(); 
     } 
    } 
} 
private void setUpMap() 
{ 
    // Set My Location blue dot 
    mMap.setMyLocationEnabled(true); 

    LocationManager locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE); 
    Criteria criteria = new Criteria(); 
    String provider = locationManager.getBestProvider(criteria, true); 
    Location myLocation = locationManager.getLastKnownLocation(provider); 

    if (myLocation != null) 
    { 
     double latitude = myLocation.getLatitude(); 
     double longitude = myLocation.getLongitude(); 
     currLocation = new LatLng(latitude, longitude); 
    } 

    for (int i = 0; i < POINTS; i++) 
    { 
     mMap.addMarker(new MarkerOptions() 
       .position(markerCoords.get(i)) 
       .icon(BitmapDescriptorFactory.fromResource(R.drawable.post_it_marker))); 
    } 
} 

map.xml

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 

    <fragment 
     xmlns:map="http://schemas.android.com/apk/res-auto" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:id="@+id/map" 
     android:name="com.google.android.gms.maps.SupportMapFragment" 
     map:cameraTargetLat="32.881416" 
     map:cameraTargetLng="-117.237428" 
     map:cameraZoom="15" 
     map:mapType="normal" /> 
</RelativeLayout> 

birisi bana doğru yönde işaret edebilir? Teşekkür

+0

Merhaba yapmalıdır? – Zack

cevap

8

Kısa cevap i basit bir yolla tüm konum değişiklikleri almak için, ek dinleyici eklemek tavsiye setupMap olarak location.distanceTo(anotherLocation)

.

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

Sonra bu dinleyicide, geçerli konum ile hedefleriniz arasındaki mesafeyi alırsınız. Metre olarak uzaklık. i aynı sorun bakan değilim olarak Tabii

@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! 
     } 
    } 
} 

, size bu sorunu çözmek için başardınız, etkinlik implements GoogleMap.OnMyLocationChangeListener

+0

"Bu" belirten bir hata alıyorum "setOnMyLocationChangeListener buna uygulanamaz" – Pangu

+0

@Pangu, android studio ile kolay sabitleme. Etkinliğinizin GoogleMap.OnMyLocationChangeListener uygulamasını gerçekleştirmesini sağlayın. Ben cevap –

+1

@pengrad güncellendi ... Ben özür dilerim ben android için yeni :(.... Ben bunu deneyeceğim ve çok yakında bildiririz! – Pangu

İlgili konular