Android check latlong между 2 местоположением [дубликат]

Вы можете использовать ack . Это похоже на grep для исходного кода.

Просто выполните:

ack 'text-to-find-here'

В корневом каталоге.

Вы также можете использовать regular выражения , укажите тип файла и т. д.


UPDATE

Я только что открыл Silver Searcher , который похож на ack, но 3 -5x быстрее, чем он, и даже игнорирует шаблоны из файла .gitignore.

14
задан Supriya 25 September 2014 в 05:53
поделиться

3 ответа

Просто попробовал алгоритм Ray Casting, который идентифицирует точку в многоугольнике. Это работает отлично.

Обратитесь к http://en.wikipedia.org/wiki/Point_in_polygon для диссертации о лучшем литье

private boolean isPointInPolygon(LatLng tap, ArrayList<LatLng> vertices) {
        int intersectCount = 0;
        for (int j = 0; j < vertices.size() - 1; j++) {
            if (rayCastIntersect(tap, vertices.get(j), vertices.get(j + 1))) {
                intersectCount++;
            }
        }

        return ((intersectCount % 2) == 1); // odd = inside, even = outside;
    }

    private boolean rayCastIntersect(LatLng tap, LatLng vertA, LatLng vertB) {

        double aY = vertA.latitude;
        double bY = vertB.latitude;
        double aX = vertA.longitude;
        double bX = vertB.longitude;
        double pY = tap.latitude;
        double pX = tap.longitude;

        if ((aY > pY && bY > pY) || (aY < pY && bY < pY)
                || (aX < pX && bX < pX)) {
            return false; // a and b can't both be above or below pt.y, and a or
                            // b must be east of pt.x
        }

        double m = (aY - bY) / (aX - bX); // Rise over run
        double bee = (-aX) * m + aY; // y = mx + b
        double x = (pY - bee) / m; // algebra is neat!

        return x > pX;
    }
20
ответ дан Supriya 22 August 2018 в 22:03
поделиться

См. эту ссылку

Обнаружение многоугольника Touch Map API V2

Его алгоритм RayCasting может помочь вам:)

Краткое описание алгоритма:

Горизонтальная линия выводится из вашей точки вправо, если она пересекает стороны многоугольника нечетным числом раз, тогда точка находится внутри другого многоугольника :)

Эти ссылки wiki дадут вам полную идею:

http://en.wikipedia.org/wiki/Point_in_polygon

http://rosettacode.org/wiki/Ray-casting_algorithm

2
ответ дан Community 22 August 2018 в 22:03
поделиться

Я нашел метод лучевого литья ненадежным, но в итоге я использовал PolyUtil из карт google.

Вам нужна зависимость compile 'com.google.maps.android:android-maps-utils:0.5'

. И тогда метод выглядит это

PolyUtil.containsLocation(userLocation, polyPointsList, false);

EDIT

Это описание этого метода найдено в исходном коде

Вычисляет, лежит ли данная точка внутри указанного многоугольника , Полигон всегда считается закрытым, независимо от того, равна ли последняя точка первой или нет. Внутри определяется как не содержащий Южный полюс - Южный полюс всегда снаружи. Многоугольник формируется из больших сегментов круга, если геодезическая истинна, а остальных - лаксодромных.

12
ответ дан DoruChidean 22 August 2018 в 22:03
поделиться
  • 1
    почему последний параметр false? что это за параметр? – Virat18 20 September 2017 в 07:53
  • 2
    Я добавил описание метода, поскольку нашел его в исходном коде – DoruChidean 20 September 2017 в 08:24
  • 3
    Благодаря! Удивительный ответ! – Virat18 20 September 2017 в 09:57
  • 4
    Оба они работали последовательно. Я добавил их обоих и включил прослушиватель касания карты в качестве вызова. Без вопросов. Но это, безусловно, более чистая реализация. – StarWind0 17 January 2018 в 05:41
Другие вопросы по тегам:

Похожие вопросы: