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
相关产品推荐
相关产品推荐

