快速注意,我是编程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有关在没有气压计的情况下增加精确高程的任何提示吗?