地图路径规划
1, // 定义 Marker 点击事件监听
AMap.OnMarkerClickListener markerClickListener = new AMap.OnMarkerClickListener() {
// marker 对象被点击时回调的接口
// 返回 true 则表示接口已响应事件,否则返回false
@Override
public boolean onMarkerClick(Marker marker) {
lujingguihua(marker);
return true;
}
};
// 绑定 Marker 被点击事件
aMap.setOnMarkerClickListener(markerClickListener);
2, private void lujingguihua(Marker marker){
RouteSearch routeSearch = new RouteSearch(MainActivity.this);
routeSearch.setRouteSearchListener(listener);
//TODO 难点1
// fromAndTo包含路径规划的起点和终点,drivingMode表示驾车模式
// 第三个参数表示途经点(最多支持16个),第四个参数表示避让区域(最多支持32个),第五个参数表示避让道路
//获取自己的坐标系
Location myLocation = aMap.getMyLocation();
LatLonPoint startPoint = new LatLonPoint(myLocation.getLatitude(),myLocation.getLongitude());
//目的地坐标系
LatLng position = marker.getPosition();
LatLonPoint endPoint = new LatLonPoint(position.latitude,position.longitude);
RouteSearch.FromAndTo fat = new RouteSearch.FromAndTo(startPoint,endPoint);
RouteSearch.DriveRouteQuery query = new RouteSearch.DriveRouteQuery(fat, 0, null, null, "");
routeSearch.calculateDriveRouteAsyn(query);//发起请求
}
RouteSearch.OnRouteSearchListener listener = new RouteSearch.OnRouteSearchListener() {
@Override
public void onBusRouteSearched(BusRouteResult busRouteResult, int i) {
}
@Override
public void onDriveRouteSearched(DriveRouteResult result, int errorCode) {
//TODO 难点2
//展示算路的数据
aMap.clear();// 清理地图上的所有覆盖物
if (errorCode == AMapException.CODE_AMAP_SUCCESS) {
if (result != null && result.getPaths() != null) {
if (result.getPaths().size() > 0) {
final DrivePath drivePath = result.getPaths()
.get(0);
DrivingRouteOverlay drivingRouteOverlay = new DrivingRouteOverlay(
MainActivity.this, aMap, drivePath,
result.getStartPos(),
result.getTargetPos(), null);
drivingRouteOverlay.setNodeIconVisibility(false);//设置节点marker是否显示
drivingRouteOverlay.setIsColorfulline(true);//是否用颜色展示交通拥堵情况,默认true
drivingRouteOverlay.removeFromMap();
drivingRouteOverlay.addToMap();
drivingRouteOverlay.zoomToSpan();
}
}
}
}
@Override
public void onWalkRouteSearched(WalkRouteResult walkRouteResult, int i) {
}
@Override
public void onRideRouteSearched(RideRouteResult rideRouteResult, int i) {
}
};
1, // 定义 Marker 点击事件监听
AMap.OnMarkerClickListener markerClickListener = new AMap.OnMarkerClickListener() {
// marker 对象被点击时回调的接口
// 返回 true 则表示接口已响应事件,否则返回false
@Override
public boolean onMarkerClick(Marker marker) {
lujingguihua(marker);
return true;
}
};
// 绑定 Marker 被点击事件
aMap.setOnMarkerClickListener(markerClickListener);
2, private void lujingguihua(Marker marker){
RouteSearch routeSearch = new RouteSearch(MainActivity.this);
routeSearch.setRouteSearchListener(listener);
//TODO 难点1
// fromAndTo包含路径规划的起点和终点,drivingMode表示驾车模式
// 第三个参数表示途经点(最多支持16个),第四个参数表示避让区域(最多支持32个),第五个参数表示避让道路
//获取自己的坐标系
Location myLocation = aMap.getMyLocation();
LatLonPoint startPoint = new LatLonPoint(myLocation.getLatitude(),myLocation.getLongitude());
//目的地坐标系
LatLng position = marker.getPosition();
LatLonPoint endPoint = new LatLonPoint(position.latitude,position.longitude);
RouteSearch.FromAndTo fat = new RouteSearch.FromAndTo(startPoint,endPoint);
RouteSearch.DriveRouteQuery query = new RouteSearch.DriveRouteQuery(fat, 0, null, null, "");
routeSearch.calculateDriveRouteAsyn(query);//发起请求
}
RouteSearch.OnRouteSearchListener listener = new RouteSearch.OnRouteSearchListener() {
@Override
public void onBusRouteSearched(BusRouteResult busRouteResult, int i) {
}
@Override
public void onDriveRouteSearched(DriveRouteResult result, int errorCode) {
//TODO 难点2
//展示算路的数据
aMap.clear();// 清理地图上的所有覆盖物
if (errorCode == AMapException.CODE_AMAP_SUCCESS) {
if (result != null && result.getPaths() != null) {
if (result.getPaths().size() > 0) {
final DrivePath drivePath = result.getPaths()
.get(0);
DrivingRouteOverlay drivingRouteOverlay = new DrivingRouteOverlay(
MainActivity.this, aMap, drivePath,
result.getStartPos(),
result.getTargetPos(), null);
drivingRouteOverlay.setNodeIconVisibility(false);//设置节点marker是否显示
drivingRouteOverlay.setIsColorfulline(true);//是否用颜色展示交通拥堵情况,默认true
drivingRouteOverlay.removeFromMap();
drivingRouteOverlay.addToMap();
drivingRouteOverlay.zoomToSpan();
}
}
}
}
@Override
public void onWalkRouteSearched(WalkRouteResult walkRouteResult, int i) {
}
@Override
public void onRideRouteSearched(RideRouteResult rideRouteResult, int i) {
}
};
3,加入两个文件夹(overlay,drawable)
文件在第三方找到。
正地理编码获取经纬度:
GeocodeSearch("地址");
//发起正地理编码搜索 public void GeocodeSearch(String city) { //构造 GeocodeSearch 对象,并设置监听。 geocodeSearch = new GeocodeSearch(this); geocodeSearch.setOnGeocodeSearchListener(this); //通过GeocodeQuery设置查询参数,调用getFromLocationNameAsyn(GeocodeQuery geocodeQuery) 方法发起请求。 //address表示地址,第二个参数表示查询城市,中文或者中文全拼,citycode、adcode都ok GeocodeQuery query = new GeocodeQuery(city, city); geocodeSearch.getFromLocationNameAsyn(query); } @Override public void onRegeocodeSearched(RegeocodeResult regeocodeResult, int i) { } @Override public void onGeocodeSearched(GeocodeResult geocodeResult, int i) { if (i == AMapException.CODE_AMAP_SUCCESS) { if (geocodeResult != null && geocodeResult.getGeocodeAddressList() != null && geocodeResult.getGeocodeAddressList().size() > 0) { GeocodeAddress address = geocodeResult.getGeocodeAddressList().get(0); //获取到的经纬度 LatLonPoint latLongPoint = address.getLatLonPoint(); double latitude = latLongPoint.getLatitude(); double longitude = latLongPoint.getLongitude(); LatLng latLng = new LatLng(latitude,longitude); Marker marker = aMap.addMarker(new MarkerOptions().position(latLng).title(address.getFormatAddress()).snippet(""+address.getFormatAddress()+":"+latitude+", "+latLongPoint+"")); lujingguihua(marker); } } }