выяснить, если длинный / лат в прямоугольнике - PullRequest
3 голосов
/ 31 марта 2011

Учитывая левый верхний лонг / лат и нижний правый лонг / лат, как я могу узнать, попадает ли данный лонг / лат в прямоугольник?

В идеале я бы посмотрел на что-то вроде

bool IsWithinArea(float topLeftLat,float topLeftLong,
   float bottomRightLat,float bottomRightLong,float testLat,float testLong)

Обновление

Единственная проблема состоит в том, что прямоугольник, созданный из long / lat, может быть из повернутой карты, поэтому нижний правый угол не всегда будет больше верхнего левого ... ... 1010 *

Ответы [ 4 ]

5 голосов
/ 31 марта 2011

Мы можем сделать это более интересным, чем тривиальные проверки:

return new Rect(topLeftLat, topLeftLong, bottomRightLat - topLeftLat, bottomRightLong - topLeftLong)
      .Contains(testLat, testLong);

PS: Метод Rect.Contains (...)

2 голосов
/ 31 марта 2011

Не уверен, что я думаю о простом

bool IsWithinArea(float topLeftLat, float topLeftLong, float bottomRightLat, float bottomRightLong, float testLat, float testLong)
{
    return (testLat >= topLeftLat && testLat <= bottomRightLat && testLong >= topLeftLong && testLong <= bottomRightLong);
}
1 голос
/ 31 марта 2011

Один из подходов состоит в том, чтобы нормализовать ваши пары long / lat в простые координаты x / y.Тогда это должен быть простой пример, чтобы определить, попадает ли точка в прямоугольник. Здесь можно найти преобразование

long / lat в x / y: Преобразовать координаты Lat / Longs в X / Y

1 голос
/ 31 марта 2011

Предполагая, что Lat - это координата x, а Long - координата y, а также предполагая, что система координат имеет свое начало слева вверху:

public bool IsWithinArea(float topLeftLat,float topLeftLong,
       float bottomRightLat,float bottomRightLong,float testLat,float testLong) {

          return (testLat >= topLeftLat && testLat <= bottomRightLat && testLong >= topLeftLong && testLong <= bottomRightLong);

    }
...