2011-11-22 5 views
0

내가 가지고있는 핀이 내 화면에 있는지 계산하려고합니다. 나는이 기능을 가지고 있으며 나는 항상 거짓으로 돌아오고있다. 어떤 아이디어 :안드로이드지도 문제

public static boolean isInMap(final GeoPoint topLeftGeo, final GeoPoint bottmRightGeo, final GeoPoint point) 
{ 
 Log.d(TAG, ""+topLeftGeo.toString()); 
 Log.d(TAG, ""+point.toString()); 
 Log.d(TAG, ""+bottmRightGeo.toString()); 
  
 boolean isIn = false; 
  
 if((point.getLatitudeE6() >= topLeftGeo.getLatitudeE6() 
     && point.getLatitudeE6() <= bottmRightGeo.getLatitudeE6()) 
     && (point.getLongitudeE6() >= topLeftGeo.getLongitudeE6() 
     && point.getLongitudeE6() <= bottmRightGeo.getLongitudeE6())) 
    { 
    isIn = true; 
    } 

    return isIn; 
} 

답변

1

위도에 대한 논리가 틀립니다. 왼쪽 위 위도가 오른쪽 하단보다 큽니다. 포인트 위도는 < = 최고 위도 및> 위 아래 위도 여야합니다.

+0

나는 당신이 완전히 정확할 것 같아요. 지금 바로 확인하겠습니다. – Sotos

0

첫째, 단지 참고 사항 : 당신은 당신의 코드를 조금 단순화 할 수 있습니다

 public static boolean isInMap(final GeoPoint topLeftGeo, 
    final GeoPoint bottmRightGeo, final GeoPoint point) { 
      Log.d(TAG, ""+topLeftGeo.toString()); 
      Log.d(TAG, ""+point.toString()); 
      Log.d(TAG, ""+bottmRightGeo.toString());  

      if((point.getLatitudeE6() >= topLeftGeo.getLatitudeE6() && 
point.getLatitudeE6() <= bottmRightGeo.getLatitudeE6()) 
&& (point.getLongitudeE6() >= topLeftGeo.getLongitudeE6() && point.getLongitudeE6() <=    bottmRightGeo.getLongitudeE6())) 
      { 
      return true; 
      } else { 
      return false; 
      } 
     } 

지금까지가, 잘가 제한된에서 이야기하는 것은 매우 어려운 항상 false를 반환이야 왜 등 정보를 제공해 주었지만 분할 및 정복 방식을 권장합니다. 당신은 당신의 방법이 진실을 되 돌리는 데 만족해야하는 네 가지 조건을 if statement 있습니다. 다음과 같이 각 조건을 기록해보십시오.

Log.v("latE6 greater than topLeftGeo", String.valueOf((point.getLatitudeE6() >= topLeftGeo.getLatitudeE6())); 

그리고 어느 것이 거짓으로 표시되는지 확인한 다음 거기에서 확인하십시오.

+0

사실 나는 이미 조건 브레이크를 수행하고 여전히 반환을 false로 받고 있습니다. 나는 또한 정확한 숫자 (포인트)를 테스트하고있다. 이것은 이상한 ... – Sotos

관련 문제