Поиск, находится ли заданная позиция (широта, долгота) в пределах BoundingBox двух координат (route-me) - PullRequest
1 голос
/ 12 июля 2011

Я работаю над приложением для iPhone, используя проект Route-Me. Я использую метод с именем 'latitudeLongitudeBoundingBoxForScreen', который возвращает набор из двух cooördinates. Определение северо-восточных и юго-западных углов в широте / долготе экрана. Кажется, это работает нормально.

У меня вопрос, как я могу определить, находится ли данная точка (широта / долгота) в границах этих двух координат (северо-восток, юго-запад)?

Большое спасибо заранее за вашу помощь.

Ответы [ 2 ]

2 голосов
/ 19 июля 2011

Для общей точки в многоугольнике Проверка включения точки , кажется, работает в предположении тривиальной эквиктангулярной проекции (x = lon, y = lat).

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

Это сломается, если ограничительная рамка пересекает линию 180 лон. Простое решение заключается в том, что если поле, которое пересекает линию 180 лон, добавить 360 к отрицательной долготе. Это недопустимая точка навигации, но она делает математическую работу.

Это также не будет работать вокруг полюсов.

0 голосов
/ 26 июля 2018

Я знаю, что давно прошло, но, возможно, кто-то все еще заинтересован.

    Double lat_A, lat_B,lng_A, lng_B, curr_lat,curr_lng;
    LatLng nw_corner, sw_corner;
    Boolean lat_OK,lng_OK,all_OK;
    int t_segs, points;
    t_segs = segments.size()-1;
    curr_lat = curr_LatLng.latitude;
    curr_lng = curr_LatLng.longitude;
    lat_A = list_segm_points.get(0).latitude;
    lng_A = list_segm_points.get(0).longitude;
    lat_B = list_segm_points.get(t_segs).latitude;
    lng_B = list_segm_points.get(t_segs).longitude;

    if (lat_A > lat_B ) {
        lat_OK = curr_lat < lat_A && curr_lat > lat_B;
    } else {
        lat_OK = curr_lat > lat_A && curr_lat < lat_B;
    }
    if (lng_A > lng_B ) {
        lng_OK = curr_lng < lng_A && curr_lng > lng_B;
    } else {
        lng_OK = curr_lng > lng_A && curr_lng < lng_B;
    }
    all_OK = lat_OK && lng_OK;
    return all_OK;
...