Показать местоположения рядом с местоположением пользователя - PullRequest
0 голосов
/ 14 мая 2019

Я занимаюсь разработкой приложения и пытаюсь внедрить средства перечисления магазинов рядом с текущим местоположением пользователя с помощью Android Mapbox SDK.Может кто-нибудь помочь, как я могу это реализовать?

Ответы [ 2 ]

3 голосов
/ 14 мая 2019

Вы можете использовать API Tilequery Mapbox для запроса Point s в слое меток POI стиля Mapbox Streets.Фильтруйте результаты по магазинам, а не по кафе, салонам и т. Д. Используйте LocationComponent getLastKnownLocation в качестве координаты запроса.

https://docs.mapbox.com/android/java/examples/tilequery

https://docs.mapbox.com/android/maps/examples/show-a-users-location

Если вы хотите прослушать изменения местоположения устройства: https://docs.mapbox.com/help/tutorials/android-location-listening/

Или вы можете запросить визуализацию Feature s на определенном слое:

https://docs.mapbox.com/android/maps/overview/query/

https://github.com/mapbox/mapbox-android-demo/search?utf8=%E2%9C%93&q=queryRenderedFeatures&type=

https://github.com/mapbox/mapbox-android-demo/blob/master/MapboxAndroidDemo/src/main/java/com/mapbox/mapboxandroiddemo/examples/styles/BasicSymbolLayerActivity.java

https://docs.mapbox.com/android/maps/examples/count-features-in-a-selected-area/

0 голосов
/ 14 мая 2019

Вы должны рассчитать расстояние между пользовательской позицией и позицией магазина, вы можете сделать это, используя этот метод:

private static double distance(double lat1, double lon1, double lat2, double lon2, String unit) {
    if ((lat1 == lat2) && (lon1 == lon2)) {
        return 0;
    }
    else {
        double theta = lon1 - lon2;
        double dist = Math.sin(Math.toRadians(lat1)) * Math.sin(Math.toRadians(lat2)) + Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2)) * Math.cos(Math.toRadians(theta));
        dist = Math.acos(dist);
        dist = Math.toDegrees(dist);
        dist = dist * 60 * 1.1515;
        if (unit == "K") {
            dist = dist * 1.609344;
        } else if (unit == "N") {
            dist = dist * 0.8684;
        }
        return (dist);
    }
}
...