You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android徒步应用:如何基于MySQL数据库标记点绘制折线

如何在Google Maps Android上绘制标记点间的折线

嘿,你已经搞定了从MySQL拉取标记点并添加到地图的核心部分,这一步做得很棒!要把这些点连成折线其实很简单,只需要在现有代码基础上做几个小修改就行,我来给你一步步说明:

1. 先收集所有标记点的坐标

首先,你需要把从数据库获取到的每个LatLng都存到一个列表里——因为绘制折线需要一个完整的点集合。在你的onResponse方法里先创建一个列表,然后在循环中把每个坐标加进去。

2. 用PolylineOptions创建并添加折线

当所有点都收集完成后,使用PolylineOptions来定义折线的样式(比如颜色、宽度),然后把这个折线添加到地图上。另外要注意,如果只有1个或者0个点的话,没必要尝试绘制折线,避免出现异常。

修改后的完整代码

下面是整合了折线绘制逻辑的代码:

public void getCoordsId(final String id_trilho) {
    RequestQueue requestQueue = Volley.newRequestQueue(MapsActivity.this);
    StringRequest stringRequest = new StringRequest(Request.Method.POST, urlget, 
        new Response.Listener<String>() {
            // 先创建一个列表来存储所有路径点
            List<LatLng> pathPoints = new ArrayList<>();

            @Override
            public void onResponse(String response) {
                System.out.println(response);
                Toast.makeText(MapsActivity.this, "boa entrou", Toast.LENGTH_LONG).show();
                try {
                    JSONArray array = new JSONArray(response);
                    for (int i = 0; i < array.length(); i++) {
                        JSONObject jo = array.getJSONObject(i);
                        Double lat = Double.parseDouble(jo.getString("lat"));
                        Double lng = Double.parseDouble(jo.getString("lon"));
                        LatLng location = new LatLng(lat, lng);
                        // 把点添加到列表中
                        pathPoints.add(location);
                        // 继续添加标记点(如果你还需要显示标记的话)
                        MarkerOptions options = new MarkerOptions();
                        options.position(location);
                        mMap.addMarker(options);
                    }

                    // 当收集完所有点后,绘制折线
                    if (pathPoints.size() >= 2) {
                        PolylineOptions polylineOptions = new PolylineOptions()
                            .addAll(pathPoints) // 添加所有路径点
                            .color(Color.BLUE) // 设置折线颜色,你可以改成自己想要的
                            .width(5); // 设置折线宽度,单位是像素

                        // 把折线添加到地图上
                        mMap.addPolyline(polylineOptions);

                        // 可选:让地图自动缩放以显示整个路径
                        LatLngBounds.Builder builder = new LatLngBounds.Builder();
                        for (LatLng point : pathPoints) {
                            builder.include(point);
                        }
                        LatLngBounds bounds = builder.build();
                        mMap.moveCamera(CameraUpdateFactory.newLatLngBounds(bounds, 100)); // 100是边距
                    }

                } catch (JSONException e) {
                    e.printStackTrace();
                    Toast.makeText(MapsActivity.this, "解析数据出错", Toast.LENGTH_SHORT).show();
                }
            }
        }, 
        new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                // 别忘了处理请求失败的情况
                Toast.makeText(MapsActivity.this, "获取数据失败", Toast.LENGTH_SHORT).show();
                error.printStackTrace();
            }
        });
    requestQueue.add(stringRequest);
}

一些额外说明

  • PolylineOptions还有很多可配置的属性,比如geodesic(true)可以让折线沿着地球曲面绘制(适合长距离路径),或者zIndex(1)设置折线的层级(避免被其他元素遮挡)。
  • 我添加了一个可选的地图自动缩放逻辑,这样加载完路径后,地图会自动调整视角把整个路径都显示出来,提升用户体验。
  • 记得处理请求失败的情况,我补充了ErrorListener的实现,这样用户能知道哪里出问题了。

内容的提问来源于stack exchange,提问作者Sapo121

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:26:34