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

时间:2014-07-14 15:14:54

标签: java android geolocation google-play-services

快速注意,我是编程Android应用程序的新手,所以我可以自由地说我是以完全错误的方式解决这个问题,甚至是向我解释一些事情,比如我是个白痴。

我的应用程序非常依赖于位置。我使用Google Play定位服务为用户提供当前位置。用户可以使用散列图在我们的设备中存储位置。为了使它更方便我试图使它成为用户只需要在该存储位置的范围内。我目前创建此范围的方法是使用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有关在没有气压计的情况下增加精确高程的任何提示吗?

0 个答案:

没有答案