Как сравнить значения широты и долготы в геозоне? - PullRequest
1 голос
/ 04 апреля 2019

Я написал код Geo-Fencing в открытых слоях.Гео-фехтование должно быть сделано на веб-сайте.Я могу создать геозону на сайте.Также я знаю широту и долготу центра геозоны.Но у меня нет широты и долготы других точек на этом круге.

Теперь у меня есть приложение для Android, которое пользователь.Всякий раз, когда приложение находится в гео-огражденной области, оно должно проверить и отобразить сообщение «Я в гео-огороженной области».Итак, как я должен сравнивать текущее местоположение пользователей с и с чем я должен сравнивать.Я использую базу данных PostgreSQL.Я ожидаю, что если пользователь находится в геозоне, он должен отобразить «Я в геозоне»

Ответы [ 2 ]

0 голосов
/ 04 апреля 2019

Пожалуйста, используйте некоторые алгоритмы, чтобы вычислить, находитесь ли вы внутри границы или нет.Граница может быть любой формы, например многоугольника.

Пожалуйста, проверьте алгоритмы, такие как точка-полигон (PIP), чтобы узнать, находитесь ли вы внутри геозоны или нет.

0 голосов
/ 04 апреля 2019

Изначально у вас будет две точки LatLng.сначала для геозоны, а затем для текущего местоположения пользователя.Прежде чем вы захотите проверить, находится ли пользователь в зоне геозоны или нет, вам нужно решить, сколько километров вы позволите из центра геозоны в радиусе определить, что пользователь попал в диапазон.

, затем сравните обаточки как:

public int CalculationByDistance(LatLng StartP, LatLng EndP) {
    int Radius = 6371;// radius of earth in Km
    double lat1 = StartP.latitude;
    double lat2 = EndP.latitude;
    double lon1 = StartP.longitude;
    double lon2 = EndP.longitude;
    double dLat = Math.toRadians(lat2 - lat1);
    double dLon = Math.toRadians(lon2 - lon1);
    double a = Math.sin(dLat / 2) * Math.sin(dLat / 2)
            + Math.cos(Math.toRadians(lat1))
            * Math.cos(Math.toRadians(lat2)) * Math.sin(dLon / 2)
            * Math.sin(dLon / 2);
    double c = 2 * Math.asin(Math.sqrt(a));
    double valueResult = Radius * c;
    double km = valueResult / 1;
    DecimalFormat newFormat = new DecimalFormat("####");
    int kmInDec = Integer.valueOf(newFormat.format(km));

    return kmInDec;
}

Предположим, если пользователь находится в пределах 1 км от Геозоны, вы позволите ему.Так что просто позвоните выше CalculationByDistance (-, -), и он скажет вам, что пользователь находится рядом с геозоной не.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...