我试图找出用户在谷歌地图上推送了哪条折线。但是我下面的代码没有返回我期望的内容:
String k999 = "lat/lng";
List Klick = polyline.getPoints();
System.out.println("The list contains one " + Klick.contains(k999));
System.out.println("The list contains two " + Klick.contains("52.3524921"));
System.out.println("The list contains three " + "[lat/lng:".contains("[lat/lng:"));
System.out.println("Str-Str: " + Klick.contains(Klick));
System.out.println("equals: " + Klick.equals(Klick));
System.out.println("List: " + Klick);
输出:
The list contains one false
The list contains two false
The list contains three true
Str-Str: false
equals: true
List: [lat/lng: (52.3524987,7.709607499999999), lat/lng: (52.3524921,7.7098328).........
为什么我的contains
代码不起作用?
您的 Klick List 对象实际上是 LatLng 对象的列表:https://developers.google.com/android/reference/com/google/android/gms/maps/model/Polyline.html#getPoints()
https://developers.google.com/android/reference/com/google/android/gms/maps/model/LatLng.html#toString()
当你System.out.println(Klick)时,你实际上是在每个LatLng对象上调用toString()方法。如果你看一下 LatLng 类,你可以看到 toString 方法看起来像这样:
public String toString() {
return "lat/lng: (" + this.latitude + "," + this.longitude + ")";
}
当您对列表执行 .contains() 操作时,每个对象都会调用其 .equals() 方法。对于LatLng来说,这种方法是:
public boolean equals(Object o) {
if(this == o) {
return true;
} else if(!(o instanceof LatLng)) {
return false;
} else {
LatLng var2 = (LatLng)o;
return Double.doubleToLongBits(this.latitude) == Double.doubleToLongBits(var2.latitude) && Double.doubleToLongBits(this.longitude) == Double.doubleToLongBits(var2.longitude);
}
}
所以,如果你想弄清楚你的折线有什么LatLng,你可以做这样的事情:
for(int i = 0, size = Klist.size(); i < size; i++) {
LatLng currentLatLng = (LatLng)Klist.get(i);
// do something with your LatLng
double latitude = currentLatLng.latitude;
double longitude = currentLatLng.longitude;
System.out.printf("Latitude is %f. Longitude is %f", latitude, longitude);
}
希望这有帮助!
是的,经过数小时的编码,它会运行;-)非常感谢你!
List Klick = polyline.getPoints();
for(int i = 0, size = Klick.size(); i < size; i++) {
LatLng currentLatLng = (LatLng) Klick.get(i);
String KL = Klick.toString();
// do something with your LatLng
double latitude1 = currentLatLng.latitude;
double longitude1 = currentLatLng.longitude;
System.out.printf("nLatitude: "+KL);
System.out.printf("ncontains: "+KL.contains("52.3524987"));
输出:
Latitude: [lat/lng: (52.3524987,7.709607499999999), lat/lng: (52.3524921,7.7098328), lat/lng: (52.3534915,7.710031300000001).......
contains: true