我有一个大约7000个位置的数组,每个位置都使用android上的位置管理器进行记录,当加载这些位置时,我过滤掉距离前一个1km的任何位置,或者使用这个位置精度高于50:< / p>
if (c.moveToFirst())
do {
lat = c.getString(0);
lng = c.getString(1);
ac = c.getString(2);
alt = c.getString(3);
if (l1 != null) {
l2 = new Location("MAP");
l2.setLatitude(Double.parseDouble(lat));
l2.setLongitude(Double.parseDouble(lng));
l2.setAltitude(Double.parseDouble(alt));
l2.setAccuracy(Float.parseFloat(ac));
if (l1.distanceTo(l2) < 1000
&& l2.getAccuracy() < 51) {
opts.add(new LatLng(Double.parseDouble(lat),
Double.parseDouble(lng)));
list.add(l2);
l1 = l2;
}
} else {
l1 = new Location("MAP");
l1.setLatitude(Double.parseDouble(lat));
l1.setLongitude(Double.parseDouble(lng));
l1.setAccuracy(Float.parseFloat(ac));
l1.setAltitude(Double.parseDouble(alt));
if (l1.getAccuracy() > 50)
l1 = null;
}
} while (c.moveToNext());
这样就可以消除这些随机线假设其正常工作的可能性。
当它正常工作时,它应该是这样的:
但是,当我放大一点或者四处移动时,我会得到这些随机的线条:
我添加这样的行:
Location[] locations = Arrays.copyOfRange(mLocations, a, b);
if (mStartLine != null)
mStartLine.remove();
if (mMiddleLine != null)
mMiddleLine.remove();
if (mEndLine != null)
mEndLine.remove();
if (mMarker != null) {
mMarker.remove();
mMarker = null;
}
PolylineOptions so = new PolylineOptions();
PolylineOptions mo = new PolylineOptions();
PolylineOptions eo = new PolylineOptions();
so.color(Color.GREEN);
eo.color(Color.GREEN);
mo.color(Color.BLACK);
if (locations.length < 2) {
if (locations.length == 0)
return;
// Add just a dot instead.
MarkerOptions m = new MarkerOptions();
m.position(new LatLng(locations[0].getLatitude(), locations[0]
.getLongitude()));
mMarker = mMap.addMarker(m);
return;
}
so.add(new LatLng(locations[0].getLatitude(), locations[0].getLongitude()));
so.add(new LatLng(locations[1].getLatitude(), locations[1].getLongitude()));
mStartLine = mMap.addPolyline(so);
for(int i = 1; i < (locations.length - 1); i++){
mo.add(new LatLng(locations[i].getLatitude(), locations[i].getLongitude()));
}
mMiddleLine = mMap.addPolyline(mo);
eo.add(new LatLng(locations[locations.length - 2].getLatitude(), locations[locations.length - 2].getLongitude()));
eo.add(new LatLng(locations[locations.length - 1].getLatitude(), locations[locations.length - 1].getLongitude()));
mEndLine = mMap.addPolyline(eo);
底部的栏是一个选择器,只显示该位置的范围(因为当你有7000个位置显示然后它变得非常疯狂,你得到StackOverflowError
)
答案 0 :(得分:3)
似乎有一个错误:https://code.google.com/p/gmaps-api-issues/issues/detail?id=5313
修改强>
如果您过滤距离小于1米的顶点,则会显示错误已解决。我将在今晚稍后编写一些代码来解决这个问题并将其放在这里。
<强>更新强>
此问题已在Google问题跟踪器中处理
https://issuetracker.google.com/issues/35821816
已在Google Play服务中修复 - 9.2.56
https://developers.google.com/maps/documentation/android-api/releases#june_27_2016
答案 1 :(得分:0)
这是一种为我们解决此问题的方法。不一定是理想的解决方案,但它确实有效。在某些缩放级别,您可能会看到折线延伸到应有的位置(如上图所示)。如果您不断更改缩放级别,扩展名将消失然后重新出现。每当两个坐标完全相同时,我们就会发生这种情况。 e.g。
假设您有3个坐标A,B,C。总线从A开始并转到B,然后总线转向并转到C.如果A和C是完全相同的坐标,您将看到此折线延伸问题。
经过几次尝试后,我们决定将C点的纬度偏离.00001。这解决了我们所有的问题。