1

ハードコーディングされた緯度と経度を動的な緯度と経度に一致させようとしていますが、正しい出力が表示されません。誰かがこのエラーを整理するのを手伝ってくれますか?

私のコードは

            String Log = "-122.084095";
            String Lat = "37.422005";
            try {
                if ((Lat.equals(latitude)) && (Log.equals(longitude))) {
                    AudioManager audiM = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
                    audiM.setRingerMode(AudioManager.RINGER_MODE_SILENT);
                    Toast.makeText(getApplicationContext(),
                            "You are at home",
                            Toast.LENGTH_LONG).show();
                } else {
                    AudioManager auMa = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
                    auMa.setRingerMode(AudioManager.RINGER_MODE_NORMAL);

                    Toast.makeText(getApplicationContext(),
                            "You are at office ", Toast.LENGTH_LONG)
                            .show();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }

それは常に他の部分に行きます...

4

7 に答える 7

3

Stringリアルタイムの位置での精度のレベルを保証できないため、ここで比較を使用することは望ましくありません。

これを処理する最良の方法は、ポイント間の距離を決定してから、それがほぼ同じであると見なすのに十分近いかどうかを判断することです。

このために、distanceBetweenまたはを使用しますdistanceTo

ドキュメントはここここにあります

例はここにあります。これらの例の1つを次に示します。

Location locationA = new Location("point A");

locationA.setLatitude(pointA.getLatitudeE6() / 1E6);
locationA.setLongitude(pointA.getLongitudeE6() / 1E6);

Location locationB = new Location("point B");

locationB.setLatitude(pointB.getLatitudeE6() / 1E6);
locationB.setLongitude(pointB.getLongitudeE6() / 1E6);

double distance = locationA.distanceTo(locationB);
于 2013-02-22T10:02:28.270 に答える
0

あなたのマッチングは大丈夫ですが、おそらくこのようなgpsの場所をチェックするべきではありません。

その場所を、その場所の半径10mにいることを確認できる場所に変換する必要があります。

于 2013-02-22T10:02:05.773 に答える
0

より良い方法は、long / latをdoubleのままにして、数値を比較することです。

if(lat > HOME_LAT - 0.1 && lat < HOME_LAT + 0.1 && ...same for lon... ){}
于 2013-02-22T10:02:47.753 に答える
0

ダイナミクス緯度と経度をLogcatに出力し、ハードコードされた緯度と経度で確認できます

于 2013-02-22T10:04:50.420 に答える
0

緯度と経度は、場所ごとに異なる変数であり、正確ではないため、実際には同じ場所に立っている間は変化し続けます。

Strings を比較する代わりに、lat と long の丸められた値を( long または float で) 取得し、特定の範囲内でそれらの値を確認します。それは「ホーム」と「オフィス」のことであなたを助けます.

例:

  String Log = "22.084095";
    String Lat = "37.422005";

    double lng=Double.parseDouble(Log);
    double lat=Double.parseDouble(Lat);

    double upprLogHome=22.1;
    double lwrLogHome=21.9;
    double upprLatHome=37.5;
    double lwrLatHome=37.3;

//  double upprLogOfc=;
//  double lwrLogOfc=;
//  double upprLatOfc=;
//  double lwrLatOfc=;

    if(lng<upprLogHome && lng>lwrLogHome && lat<upprLatHome &&lat>lwrLatHome )
    {
        System.out.println("You are Home");
    }
  /*  else if(lng<upprLogOfc && lng>lwrLogOfc && lat<upprLatOfc &&lat>lwrLatOfc )
    {
        System.out.println("You are Home");
    }*/
    else
        System.out.println("You are neither Home nor Ofc");

しかし、負の緯度経度については、チェックのプロセスを逆にする必要があります。

于 2013-02-22T10:09:13.570 に答える
0

これを試して、

Google マップ API を使用して、書式設定された住所を取得する緯度と経度の値を渡します。また、動的な緯度と経度の値を同じ Google API に渡すと、フォーマットされたアドレスが取得されます。そして、結果を取得する 2 つのフォーマットされたアドレスを一致させます。私はあなたがこれを試すことができるこの方法をお勧めします

この Google API を使用します。http://maps.googleapis.com/maps/api/geocode/json?latlng=11.029494,76.954422&sensor=true

于 2013-02-22T10:11:59.167 に答える
0

Reena、とても簡単です。以下のコードをチェックしてください。「equals」の代わりに「equalsIgnoreCase()」を使用する必要があります。

if ((Lat.equalsIgnoreCase(latitude)) && (Log.equalsIgnoreCase(longitude))) {

以下の例で動作するはずです:

// Demonstrate equals() and equalsIgnoreCase(). 
class equalsDemo { 
public static void main(String args[]) { 
String s1 = "Hello"; 
String s2 = "Hello"; 
String s3 = "Good-bye"; 
String s4 = "HELLO"; 
System.out.println(s1 + " equals " + s2 + " -> " + 
s1.equals(s2)); 
System.out.println(s1 + " equals " + s3 + " -> " + 
s1.equals(s3)); 
System.out.println(s1 + " equals " + s4 + " -> " + 
s1.equals(s4)); 
System.out.println(s1 + " equalsIgnoreCase " + s4 + " -> " + 
s1.equalsIgnoreCase(s4)); 
} 

}

于 2013-02-22T10:23:08.530 に答える