2012-05-18 6 views
2

Мой мозг сейчас не работает. Мне нужно проверить, находится ли точка (lat, long) внутри прямоугольника на карте. Прямоугольник определяется его Север, Восток, Юг, & Западные границы. Икота состоит в том, что все точки или значения находятся в системе координат карты. Чтобы иметь дело с обводкой по дате, я предполагаю, что долгота всегда «между», если мы идем от левого к праву.Определите, находится ли точка в прямоугольнике, используя координаты карты.

bool PointInRectangle(Point pt, double North, double East, double South, double West) 
{ 
    // ???? 
} 
+0

Дублированный, я думаю. См. Http://stackoverflow.com/questions/10632457/ –

+0

@Jeppe Аналогичная проблема, но их требования немного разные (визуальная карта, не обязательно должна быть на 100% точнее). Я надеялся на небольшой фрагмент кода. – jklemmack

ответ

3

Предполагая, что на востоке и севере положительны:

bool PointInRectangle(Point pt, double North, double East, double South, double West) 
{ 
    // you may want to check that the point is a valid coordinate 
    if (West < East) 
    { 
     return pt.X < East && pt.X > West && pt.Y < North && pt.Y > South; 
    } 

    // it crosses the date line 
    return (pt.X < East || pt.X > West) && pt.Y < North && pt.Y > South;   
} 
+0

А - это простое ИЛИ то, что мне не хватало. – jklemmack

+0

Если я не понимаю вопрос, я не думаю, что ваше условие с датой работает. Предположим, что «Запад» - 170, а «Восток» - -170, тогда единственные действительные долготы - от 170 до 180 и от -180 до -170. Однако долгота 165 проходит условие «pt.X> Восток». Я не понимаю? – ean5533

+0

@ ean5533: Конечно, дух. Позвольте мне исправить это. –

 Смежные вопросы

  • Нет связанных вопросов^_^