Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 扫描附近位置的最佳方法是什么?_Java_Android_Geolocation_Google Play Services - Fatal编程技术网

Java 扫描附近位置的最佳方法是什么?

Java 扫描附近位置的最佳方法是什么?,java,android,geolocation,google-play-services,Java,Android,Geolocation,Google Play Services,请注意,我对Android应用程序的编程还不熟悉,所以请随意说我完全错了,甚至像个白痴一样向我解释 我的应用程序非常依赖于位置。我正在使用Google Play定位服务为用户提供当前位置。用户可以在他们的设备中存储我使用hashmap存储的位置。为了使它更方便,我试图使它,所以用户只需要在一个范围内的存储位置。我目前创建这个范围的方法基本上是使用for循环来扫描用户的当前位置,看看它是否在hashmap中 public String scan(Location local) { Str

请注意,我对Android应用程序的编程还不熟悉,所以请随意说我完全错了,甚至像个白痴一样向我解释

我的应用程序非常依赖于位置。我正在使用Google Play定位服务为用户提供当前位置。用户可以在他们的设备中存储我使用hashmap存储的位置。为了使它更方便,我试图使它,所以用户只需要在一个范围内的存储位置。我目前创建这个范围的方法基本上是使用for循环来扫描用户的当前位置,看看它是否在hashmap中

 public String scan(Location local) {
    String fLoc = "";
    List<String> pLoc = new ArrayList<String>();
    String loc = "";
    double lat = local.getLatitude();
    double lon = local.getLongitude();
    lat = (double) Math.round(lat * decimal) / decimal;
    lon = (double) Math.round(lon * decimal) / decimal;
    for (double x = -8; x < 9; x++) {
        double tlat = lat;
        double tlon = lon;
        tlat = tlat + (x / decimal);
        tlat = (double) Math.round(tlat * decimal) / decimal;
        for (double y = -8; y < 9; y++) {
            tlon = lon;
            tlon = tlon + (y / decimal);
            tlon = (double) Math.round(tlon * decimal) / decimal;
            loc = ("Latitude: " + tlat + "   Longitude: " + tlon);
            if (locMap.containsKey(loc)) {
                pLoc.add(loc);
            }

        }
    }
    if (pLoc.isEmpty()) {
        lat = local.getLatitude();
        lon = local.getLongitude();
        lat = (double) Math.round(lat * decimal) / decimal;
        lon = (double) Math.round(lon * decimal) / decimal;
        loc = ("Latitude: " + lat + "   Longitude: " + lon);
        fLoc = loc;
    } else if (pLoc.size() == 1) {
        fLoc = (String) pLoc.toArray()[0];
    } else {
        Double diff = 0.0;
        Double tdiff = 10.0;
        for (String l : pLoc) {
            diff = 10.0;
            String[] parts = l.split(" ");
            double dlat = Double.parseDouble(parts[1]) - lat;
            if (dlat < 0) {
                dlat = dlat * -1;
            }
            double dlon = Double.parseDouble(parts[5]) - lon;
            if (dlon < 0) {
                dlon = dlon * -1;
            }
            diff = dlon + dlat;

            if (diff < tdiff) {
                tdiff = diff;
                fLoc = l;
            }
        }

    }
    return fLoc;
}
如果没有位置接近,则返回用户的当前位置。我觉得这是一种粗糙的方法,是浪费。找到附近位置的更好方法是什么?可能会对保存的位置进行for循环,以查看它与附近位置之间的差异是否足够小,但当用户开始保存大量位置时,这可能会付出高昂的代价

有什么建议吗

PS:在没有气压计的情况下增加准确的高度有什么建议吗