// 途经点信息 LatLng p1 = new LatLng(39.993266, 116.473193);//首开广场 LatLng p2 = new LatLng(39.917337, 116.397056);//故宫博物院 LatLng p3 = new LatLng(39.904556, 116.427231);//北京站 poiList.add(new NaviPoi("首开广场", p1, "")); poiList.add(new NaviPoi("故宫博物院", p2, "")); poiList.add(new NaviPoi("北京站", p3, "")); int strategy = mAMapNavi.strategyConvert(congestion, avoidhightspeed, cost, hightspeed, true); mAMapNavi.calculateDriveRoute(start, end, poiList, strategy); 以上是添加途经点与路线规划,现在点击删除途经点,怎么把poiList中对应的途经点也删除掉? aMap.setOnMarkerClickListener(new AMap.OnMarkerClickListener() { @Override public boolean onMarkerClick(Marker marker) { if (!marker.isRemoved()) { //删除途经点 marker.remove(); int strategy = mAMapNavi.strategyConvert(congestion, avoidhightspeed, cost, hightspeed, true); //重新规划路线 mAMapNavi.calculateDriveRoute(start, end, poiList, strategy); Log.e("TAG", "点击途经点:" + marker.getPosition()); } return true; } });
要删除poiList中对应的途经点,可以使用以下代码:
//定义一个变量用于记录需要删除的途经点的位置 int deletePosition = -1; for (int i = 0; i < poiList.size(); i++) { if (poiList.get(i).getLatLng().equals(marker.getPosition())) { //找到需要删除的途经点,记录位置 deletePosition = i; break; } } if (deletePosition != -1) { //从poiList中删除对应的途经点 poiList.remove(deletePosition); int strategy = mAMapNavi.strategyConvert(congestion, avoidhightspeed, cost, hightspeed, true); //重新规划路线 mAMapNavi.calculateDriveRoute(start, end, poiList, strategy); } else { Log.e("TAG", "未找到对应的途经点"); }
以上代码会遍历poiList中的每个途经点,检查其经纬度是否与被点击的marker的经纬度相同,如果相同则记录需要删除的途经点的位置,然后从poiList中删除该途经点,并重新规划路线。如果未找到对应的途经点,则打印错误日志。
if (mAMapNavi != null) { mAMapNavi.setCarInfo(carInfo); // 起点信息 NaviPoi start = new NaviPoi("龙城花园", null, "B000A8UF3J"); // 终点信息 NaviPoi end = new NaviPoi("北京大学", null, "B000A816R6"); // 途经点信息 List<NaviPoi> poiList = new ArrayList(); LatLng p1 = new LatLng(39.993266, 116.473193);//首开广场 LatLng p2 = new LatLng(39.917337, 116.397056);//故宫博物院 LatLng p3 = new LatLng(39.904556, 116.427231);//北京站 poiList.add(new NaviPoi("首开广场", p1, "")); poiList.add(new NaviPoi("故宫博物院", p2, "")); poiList.add(new NaviPoi("北京站", p3, "")); int strategy = mAMapNavi.strategyConvert(congestion, avoidhightspeed, cost, hightspeed, true); marker = aMap.addMarker(new MarkerOptions() .position(p1) .icon(BitmapDescriptorFactory.fromResource(R.drawable.start)) .anchor(1.5f, 1.5f)); // 自定义途经点的Marker样式 wayPoints.add(marker); mAMapNavi.calculateDriveRoute(start, end, poiList, strategy); Toast.makeText(getApplicationContext(), "策略:" + strategyFlag, Toast.LENGTH_LONG).show(); } 以上代码是高德导航路线规划添加途经点,帮我优化一下代码
可以考虑将以下代码:
marker = aMap.addMarker(new MarkerOptions()
.position(p1)
.icon(BitmapDescriptorFactory.fromResource(R.drawable.start))
.anchor(1.5f, 1.5f));
// 自定义途经点的Marker样式
wayPoints.add(marker);
改为:
wayPoints.add(new NaviPoi("首开广场", p1, ""));
这样可以直接将途经点信息添加到 poiList
中,避免了创建 Marker 和添加到地图上的操作。同时,也可以减少冗余代码,让代码更加简洁清晰。
这样写报错center: new qq.maps.LatLng(39.908491, 116.374328)
您提供的代码片段似乎是在使用Google Maps API而不是QQ地图API(qq.mapsLatLng),因为QQ地图有自己的坐标系统和API。如果您想在JavaScript中设置中心点位置,如果是腾讯地图(Tencent Map API),应该使用new tencent.maps.Point(latitude, longitude)
,例如:
var center = new tencent.maps.Point(39.908491, 116.374328);
如果您的目的是使用百度地图API(Baidu Map API),那么应该是new BMap.Locatie()
,格式类似:
var center = new BMap.Locatie(39.908491, 116.374328);
对于错误提示"center: new qq.maps.LatLng(39.908491, 116.374328)",可能是API名称拼写错误或者直接引用了QQ地图的 LatLng 对象,但该API并非百度、腾讯这类常见的中国地图服务提供商所使用的。