6

Ich versuche, eine TextView in der oberen linken Ecke von Google Maps anzuzeigen, die Benutzer informieren, wenn sie x Entfernungen von bestimmten Marker Punkt Standorten sind, d. H. "Sie sind in der Nähe von Standort A", aber nur die TextView angezeigt, wenn innerhalb der Reichweite. Wenn sie sich außerhalb des Bereichs bewegen, wird TextView nicht mehr angezeigt.Wie können Sie in der Nähe befindliche Markerpositionen vom aktuellen Standort in Google Maps Android aus ständig erkennen?

Ich habe gehört, dass das Google Places-API alle Standorte in der Nähe anzeigt. Ich möchte jedoch nur Orte in der Nähe der Markierungen anzeigen, die sich auf der Karte befinden, wenn x Entfernungen in der Nähe liegen.

Wie kann ich das erreichen? Muss ich weiterhin die Google Places-API verwenden?

meiner Klasse .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> 

jemand mich in die richtige Richtung zeigen kann? Dank

+0

Hallo machen, haben Sie es geschafft, dieses Problem zu lösen, wie ich die gleiche Herausforderung bin? – Zack

Antwort

8

Kurze Antwort location.distanceTo(anotherLocation)

In setupMap i empfehlen zusätzliche Hörer an, alle Standortänderungen auf einfache Art und Weise zu erhalten.

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

Dann nehmen Sie in diesem Listener nur die Entfernung zwischen dem aktuellen Standort und Ihren Zielen. Entfernung in Metern.

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

Natürlich sollten Sie Ihre Aktivität implements GoogleMap.OnMyLocationChangeListener

+0

Ich bekomme einen Fehler mit Bezug auf 'this' besagt" setOnMyLocationChangeListener kann nicht auf diese angewendet werden " – Pangu

+0

@Pangu komm schon, es ist einfach mit Android Studio zu beheben. Machen Sie einfach Ihre Aktivitäten implementiert GoogleMap.OnMyLocationChangeListener. Ich aktualisierte meine Antwort –

+1

@pengrad ... Ich entschuldige mich, ich bin neu auf Android :(.... Ich werde dies versuchen und Sie sehr bald wissen lassen! – Pangu

Verwandte Themen