我有一个Lat / Long List<LatLng> points = new ArrayList<>();
列表,当我点击地图(我正在使用谷歌地图v2)时,我使用points.add(latLng);
添加元素。我的目标是使用以下方法在点之间画线:
map.addPolyline(new PolylineOptions().add(new LatLng(x, y), new LatLng(x1, y1)).
width(5).color(Color.BLUE));
问题是我不知道如何将Lat / long列表转换为String[]
,这样我就可以将每个索引拆分为lat和long并遍历数组,使用上面的方法绘制线条。我如何实现这一目标?
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btnClose:
this.finish();
break;
case R.id.btnDeleteFile:
deleteFile();
break;
case R.id.btnDrawLines:
drawLines(latLng);
break;
}
}
@Override
public void onMapClick(LatLng latLng) {
drawLines(latLng);
drawIcons(latLng);
try {
savePositions(latLng);
} catch (IOException e) {
e.printStackTrace();
}
}
private void drawLines(LatLng latLng) {
List<LatLng> points = new ArrayList<>();
points.add(latLng);
}
答案 0 :(得分:1)
为什么不直接访问latlong的值?它们是public final doubles
,应该可以访问。
例如:
LatLng p = new LatLng(x, y); // if you have this point
// you can do this and get the values
String pLat = p.latitude.toString();
String pLong = p.longitude.toString();
// now you can store pLat and pLong in an array of lats and longs.
所以,如果你有一个分数的arraylist,一个lats的arraylist和一个longs的arraylist
for (LatLng p : points) {
// get values and store them
listOfLats.add(p.latitude.toString());
listOfLongs.add(p.latitude.toString());
}
现在您已经存储了(成对),您可以使用相同的索引i访问它们以获得不同的点。
虽然TBH,我不知道您当前的方法有什么问题 - 它似乎是一个受支持的方法,并且您不需要获取字符串值,因为函数本身实际上需要一个LatLng对象...
编辑:话虽如此,您可以尝试:
map.addPolyline(new PolylineOptions().addAll(points).width(5).color(Color.BLUE));
答案 1 :(得分:0)
不应该转换为String[]
。如果你想在两点之间画一条线,可以试试如下:
for (int i=0; i<points.size()-1; i++) {
LatLng currentPoint = points.get(i);
LatLng nextPoint = points.get(i+1);
map.addPolyline(new PolylineOptions().add(currentPoint, nextPoint)).
width(5).color(Color.BLUE);
}
或者查看PolyLineOptions文档,您似乎应该可以使用以下方式传递整个点列表:
new PolyLineOptions().addAll(points)
编辑:
在查看您的代码后,似乎您没有跟踪您的积分,考虑将您的积分列表移动为一个字段。
以下是一个基本示例,说明如何跟踪所有点并在地图上点击更多内容时继续绘制更多点:
public class YourClass {
List<LatLong> points;
public YourClass() {
points = new ArrayList<>();
}
private void drawLines(LatLng latLng) {
points.add(latLng);
map.addPolyline(new PolylineOptions().addAll(points).
width(5).color(Color.BLUE);
}
}
答案 2 :(得分:0)
没有理由将其转换为字符串,您只需将List转换为数组:
map.addPolyline(new PolylineOptions().add(points.toArray(new LatLng[points.size()])).width(5).color(Color.BLUE));