2011-11-22 68 views
0

我想要计算一些针脚是否在屏幕内。我有这个功能,而且我总是被误认为是回报。任何想法:Android地图问题

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中有四个条件需要满足,以便您的方法永远返回true。尝试登录的每个条件,就像这样:

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

,看看哪一个是显示了假,然后再从那里。

+0

实际上,我已经做了如果条件刹车,仍然得到虚假的回报。我也有我正在测试的正确数字(点数)。这很奇怪... – Sotos