Как искать рядом с местами от местоположения маркера?

Мое местоположение изменяется на основе намерения, предоставленного другой деятельностью, и это работает хорошо, что показывает, что место, которое я хочу от LatitudeDegreeи LongitudeDegree. Теперь я хочу показать его рядом с местами на выбор пользователя.например, если он вводит ATM, то рядом с ATM должен быть показан и т. д..

Это мой код, из которого я получил местоположение, и я пытался использовать place picker, но я не знаю, прав ли я и как я должен использовать.

public class MapsActivity extends FragmentActivity implements OnMapReadyCallback{

    private GoogleMap mMap;
    private String mAirportName;
    private int mLatitudeDegree;
    private int mLongitudeDegree;
    private int PLACE_PICKER_REQUEST = 1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_maps);
        // Obtain the SupportMapFragment and get notified when the map is ready to be used.
        SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
                .findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);
        Intent newIntent = getIntent();
        mAirportName = newIntent.getStringExtra("airportName");
        mLatitudeDegree = newIntent.getIntExtra("latDegree", 200);
        mLongitudeDegree = newIntent.getIntExtra("lngDegree", 201);

        /*PlacePicker.IntentBuilder builder = new PlacePicker.IntentBuilder();

        try {
            startActivityForResult(builder.build(this), PLACE_PICKER_REQUEST);
        } catch (GooglePlayServicesRepairableException e) {
            e.printStackTrace();
        } catch (GooglePlayServicesNotAvailableException e) {
            e.printStackTrace();
        }*/
    }


    @Override
    public void onMapReady(GoogleMap googleMap) {
        mMap = googleMap;

        // Add a marker and move the camera
        LatLng latLng = new LatLng(mLatitudeDegree, mLongitudeDegree);
        mMap.addMarker(new MarkerOptions().position(latLng).title(mAirportName));
        mMap.moveCamera(CameraUpdateFactory.newLatLng(latLng));
        mMap.animateCamera(CameraUpdateFactory.zoomTo(5));
    }


    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {

        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == PLACE_PICKER_REQUEST) {
            if (resultCode == RESULT_OK) {
                Place place = PlacePicker.getPlace(data, this);
                String toastMsg = String.format("Place: %s", place.getName());
                Toast.makeText(this, toastMsg, Toast.LENGTH_LONG).show();
            }
        }
    }
}

3 ответа

  1. Если у вас есть lat lang близлежащих элементов, то использовать маркер и пометить их. Если у вас нет, то вам нужно купить такие API или создать свою собственную базу данных или попытаться найти, если есть открытые API доступны.

  2. Если у вас есть другое место(например, магазин текстиля) местоположение долгота и широта, вы можете использовать этот метод, чтобы проверить расстояние между Пользователем и местоположением ;

     public double callDistanceToMethod(LatLng latLngStartPosition, LatLng latLngEndPosition) {
    
            Location endLocation = new Location("EndPosition");
            endLocation.setLatitude(latLngEndPosition.latitude);
            endLocation.setLongitude(latLngEndPosition.longitude);
    
            Location startLocation = new Location("StartPosition");
            startLocation.setLatitude(latLngStartPosition.latitude);
            startLocation.setLongitude(latLngStartPosition.longitude);
    
    
            double distance = startLocation.distanceTo(endLocation);
            System.out.println("Hello Distance**--->" + distance);
            return distance;
        }
    

    вызовите этот метод, как показано ниже (возвращается в метрах)

    Double distanceBetweenTwoLocations = callDistanceToMethod(startCoordinatesInLatLng, endCoordinatesInLatLng);
    

    Если вы хотите, теперь вы можете использовать условие if

    if(distanceBetweenTwoLocations <100){
    // ok user is almost there in 100 meter range
    // display an alert , send a push notification or anything 
    
    
    }
    
  3. В дополнение к вышесказанному ответ: если вы держите ваши ближайшие местыв списке или в базе данных, вы можете найти ближайшие места по следующему алгоритму:

    distancefaktor = ((currentlat-listitem_lat)*(currentlat-listitem_lat)+(currentlon-listitem_lon)*(currentlon*listitem_lon))
    

    затем отсортируйте список по distancefaktor и возьмите i.E. первые 10 пунктов.

    Я видел очень поздно, вы работаете на карте google. В этом случае вы должны использовать Google api, чтобы получить близлежащие места:

    https://developers.google.com/places/web-service/search?hl=de