2012-05-18 1 views
2

오늘 내 뇌가 작동하지 않습니다. 점 (위도, 경도)이지도상의 사각형 안에 있는지 테스트해야합니다. 사각형은 North, East, South, & 서쪽 테두리로 정의됩니다. 모든 포인트 또는 값은 맵 좌표계에 있습니다. 데이트 라인 랩 어라운드를 다루기 위해 왼쪽에서 오른쪽으로 갈 경우 경도는 항상 "중간"이라고 가정합니다. 동쪽과 북쪽 가정지도 좌표를 사용하여 점이 사각형 내에 있는지 확인하십시오.

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

중복, 나는 생각한다. http://stackoverflow.com/questions/10632457/ –

+0

@Jeppe 유사한 문제가 발생하지만 요구 사항이 조금 다릅니다 (시각적 인지도가 100 % 정확할 필요는 없습니다). 나는 작은 코드 스 니핏 (snippit)을 원했다. – 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

아 - 그 단순한 OR은 제가 놓친 것입니다. – jklemmack

+0

질문을 오해하지 않는 한, 귀하의 데이트 라인 상태가 작동한다고 생각하지 않습니다. '서쪽'이 170이고 '동쪽'이 -170이라면, 유효한 경도는 170에서 180 사이이고 -180에서 -170 사이입니다. 그러나 경도 165는'pt.X> 동쪽 '조건을 통과합니다. 내가 오해하고 있니? – ean5533

+0

@ ean5533 : 물론이지. 내가 고칠 수있게 해줘. –