6

Próbuję wyświetlić TextView w lewym górnym rogu Map Google, które informują użytkowników, czy są to x odległości od określonych miejsc oznaczania znaczników, tj. "Jesteś blisko miejsca A", ale wyświetlają tylko TextView, jeśli znajdują się w zasięgu. Jeśli wyjdą poza zasięg, TextView zniknie.Jak stale wykrywać pobliskie lokalizacje znaczników z bieżącej lokalizacji w Google Maps na Androida?

Rozumiem, że interfejs API Miejsc Google pokazuje wszystkie pobliskie lokalizacje, ale chcę pokazywać lokalizacje w pobliżu znaczników, które mam na mapie, jeśli użytkownicy znajdują się w odległości x blisko nich.

Jak mogę to osiągnąć? Czy nadal będę musiał używać interfejsu Google Places API?

moja klasa .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> 

Czy ktoś może wskazać mi w dobrym kierunku? Dzięki

+0

Witam, udało Ci się rozwiązać ten problem jak jestem w obliczu tego samego problemu? – Zack

Odpowiedz

8

Krótka odpowiedź location.distanceTo(anotherLocation)

W setupMap polecam dodanie dodatkowego słuchacza, aby wszystkie zmiany lokalizacji w prosty sposób.

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

Następnie w tym słuchaczu po prostu odejście od aktualnej lokalizacji i celów. Odległość w metrach.

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

Oczywiście, należy dokonać aktywność implements GoogleMap.OnMyLocationChangeListener

+0

Otrzymuję komunikat o błędzie z odniesieniem do "this" z informacją, że "setOnMyLocationChangeListener nie może być zastosowany do tego" – Pangu

+0

@Pangu, dalej, to łatwa instalacja z Androidem. po prostu spraw, aby Twoja aktywność implementowała GoogleMap.OnMyLocationChangeListener. zaktualizowałem moją odpowiedź –

+1

@pengrad ... Przepraszam Jestem nowy dla Androida :(.... Spróbuję tego i dam ci znać bardzo szybko! – Pangu

Powiązane problemy