如何将Lat / Long列表转换为String数组?

时间:2015-04-07 18:42:52

标签: java android arrays google-maps

我有一个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);
}

3 个答案:

答案 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));