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此处使用比较,因为您无法保证实时位置的准确性。

处理此问题的最佳方法是确定点之间的距离,然后确定它是否足够接近,您可以考虑大致相同。

为此,我们使用distanceBetweendistanceTo

文档在这里这里

可以在此处找到示例。这是其中一个示例:

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 保留为 doubles 并比较数字。

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

您可以将动态 Latitute 和 Longitute 打印到 Logcat 并使用硬编码的 Latitute 和 Longitute 检查

于 2013-02-22T10:04:50.420 回答
0

纬度和经度是因点而异的变量,事实上它们在同一地点时不断变化,因为它不精确。

而不是比较字符串,取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 map api 传递 lat 和 long 值,您将获得格式化的地址。并且还通过动态 lat 和 lng 值相同的谷歌 api 你将得到格式化的地址。然后匹配两个格式化的地址,你会得到结果。我建议你可以试试这个

使用这个谷歌 api。http://maps.googleapis.com/maps/api/geocode/json?latlng=11.029494,76.954422&sensor=true

于 2013-02-22T10:11:59.167 回答
0

Reena,非常简单,查看下面的代码。您需要使用“equalsIgnoreCase()”而不是“equals”。

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 回答