旧ブログ

sambaiz.net に引っ越しました

(Android) LocationListenerから取得した値でGeoPoint.equalsが成立しない?

以下のページを参考にして現在位置をandroid.location.LocationListener.onLocationChangedから取得

http://d.hatena.ne.jp/STAR_ZERO/20100725/1280060747

 

@Override

public void onLocationChanged(Location location) {
        // 現在地を取得
        GeoPoint gp = new GeoPoint( (int) (location.getLatitude()*1E6), (int)(location.getLongitude()*1E6));

GeoPoint gp2 = new GeoPoint( (int) (37.866941*1E6), (int)(138.94562*1E6));

 

Longitude : 138.94562

Latitude : 37.866941

を送信するも、

gp.equals(gp2)  -> false

 

実際に値を表示してみると、

 

f:id:sambaiz:20120701235021j:plain

 

emulator controlで送る値と実際に受け取る値が等しくない。

ともかく小数点以下4桁で十分なので、ここまでで比較しようと思う。

 

 GeoPoint gp = new GeoPoint( (int) ( (int) (location.getLatitude()*10000)/10000.0*1E6), (int)( (int)(location.getLongitude()*10000)/10000.0*1E6));

GeoPoint gp2 = new GeoPoint( (int) (37.8669*1E6), (int)(138.9436*1E6) );

gp.equals(gp2)  -> true

 

と、うまくいったように見えるが、Longitude : 138.9437を送信しても、

この結果はtrueになる。(gp2が138.9437なら、何を与えてもfalseになる)

そこで±0.0001の差については許容することにする。

 

boolean equals2(GeoPoint a,GeoPoint b){
     double longtitude = b.getLongitudeE6()/1E6;
     double latitude = b.getLatitudeE6()/1E6;
     for(int i=-1;i<=1;i++){
         for(int j=-1;j<=1;j++){
             if(new GeoPoint( (int) ( (latitude+0.0001*i)*1E6),(int)( (longtitude+0.0001*j)*1E6) ).equals(a)) return true;
         }   
     }
     return false;
 }