How to constantly detect neighboring marker locations from current location in Google Maps android?

I am trying to display a TextView in the upper left corner of Google Maps that tell users if they are at a distance x from the specific locations of the marker points, i.e. "you are close to location A" but only display a TextView if within range. If they go out of range, the TextView will disappear.

I understand that the Google Places API shows you all the neighboring locations, but I want to show the neighboring marker locations that I have on the map if users are x close to them.

How can i achieve this? Should I use the Google Places API?

my .java class:

 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> 

Can someone point me in the right direction? Thanks

+7
source share
1 answer

Short answer location.distanceTo(anotherLocation)

In setupMap, I recommend adding an extra listener to get all location changes in a simple way.

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

Then in this listener, you simply occupy the distance between your current location and your goals. Distance in meters.

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

Of course you have to do your activity implements GoogleMap.OnMyLocationChangeListener

+10
source

All Articles