暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Android App开发超实用实例 | 在高德地图上查询驾车线路沿途的加油站

717

高德地图 Android SDK 是一套地图开发调用接口,开发者可以轻松地在自己的Android应用中加入高德地图相关的功能,包括:地图显示(含室内、室外地图)、与地图交互、在地图上绘制、兴趣点搜索、地理编码、离线地图等功能。

下面这个实例演示了在Android手机高德地图上查询驾车线路沿途的加油站


01

实例功能


此实例主要通过使用高德地图SDK的RoutePOISearchQuery和RoutePOISearch. RoutePOISearchType.TypeGasStation,实现根据指定的驾车线路搜索沿途的加油站。当实例运行之后,如果在“起点纬度经度值: ”输入框中输入重庆北站的纬度和经度值“29.60957,106.551201”,在“终点纬度经度值: ”输入框中输入重庆朝天门的纬度和经度值“29.563361,106.589421”,然后单击“获取最佳驾车线路”按钮,将用粗红线在高德地图上绘制重庆北站到重庆朝天门的驾车线路; 单击“搜索沿途加油站”按钮,将用气泡指示该驾车线路沿途的加油站; 单击气泡,显示该加油站的名称,如图1(a)所示。如果在“起点纬度经度值: ”输入框中输入重庆人和的纬度和经度值“29.619516,106.527946”,在“终点纬度经度值: ”输入框中输入重庆南坪的纬度和经度值“29.52599,106.569885”,然后单击“获取最佳驾车线路”按钮,将用粗红线在高德地图上绘制重庆人和到重庆南坪的驾车线路; 单击“搜索沿途加油站”按钮,将用气泡指示该驾车线路沿途的加油站; 单击气泡,显示该加油站的名称,如图1(b)所示。


■ 图1


02

实现代码



public void onClickButton1(View v) { //响应单击按钮“获取最佳驾车线路”
  EditText myFromLatlng=(EditText)findViewById(R.id.myFromLatlng);
  EditText myToLatlng=(EditText)findViewById(R.id.myToLatlng);
  String myFromPoint=myFromLatlng.getText().toString();
  String myToPoint=myToLatlng.getText().toString();
  double myFromLat=
          Double.parseDouble(myFromPoint.substring(0, myFromPoint.indexOf(",")));
  double myFromLng=
          Double.parseDouble(myFromPoint.substring(myFromPoint.indexOf(",")+1));
  double myToLat=
          Double.parseDouble(myToPoint.substring(0, myToPoint.indexOf(",")));
  double myToLng=
          Double.parseDouble(myToPoint.substring(myToPoint.indexOf(",")+1));
  myFromLatLonPoint = new LatLonPoint(myFromLat,myFromLng);
  myToLatLonPoint = new LatLonPoint(myToLat,myToLng);
  RouteSearch myRouteSearch =new RouteSearch(this);
  //添加线路规划搜索结果回调监听器
  myRouteSearch.setRouteSearchListener(
          new RouteSearch.OnRouteSearchListener(){
           @Override
           public void onBusRouteSearched(BusRouteResult busRouteResult, int i){ }
           @Override
           public void onDriveRouteSearched(DriveRouteResult driveRouteResult, int i){
            PolylineOptions myPolylineOptions=new PolylineOptions();
            //设置线路的颜色和宽度
            myPolylineOptions.color(Color.RED).width(16);
            //默认获取第一条驾车线路
            DrivePath myDrivePath=driveRouteResult.getPaths().get(0);
            //获取该条线路每一步信息
            List<DriveStep> myDriveSteps=myDrivePath.getSteps();
            for(int j=0;j<myDriveSteps.size();j++){
             DriveStep myDriveStep=myDriveSteps.get(j);
             //获取该段线路的关键点,并将其逐个绘制在高德地图上
             List<LatLonPoint> myLatLonPoints=myDriveStep.getPolyline();
             for(LatLonPoint stepPoint:myLatLonPoints){
              myPolylineOptions.add(new LatLng(stepPoint.getLatitude(),
                      stepPoint.getLongitude()));
             } }
            myAMap.addPolyline(myPolylineOptions); //将驾车线路绘制在高德地图上
           }
           @Override
           public void onWalkRouteSearched(WalkRouteResult walkRouteResult, int i){ }
           @Override
           public void onRideRouteSearched(RideRouteResult rideRouteResult, int i){ }
          });
  //使用RouteSearch.FromAndTo指定线路规划的起点和终点
  RouteSearch.FromAndTo myFromAndTo=
          new RouteSearch.FromAndTo(myFromLatLonPoint, myToLatLonPoint);
  //通过RouteSearch.DriveRouteQuery封装线路查询信息,并指定线路起点和终点、
  //线路优先使用策略、线路途经点、线路避让区域、线路避让道路等参数
  RouteSearch.DriveRouteQuery myDriveRouteQuery=
          new RouteSearch.DriveRouteQuery(myFromAndTo,
                  PathPlanningStrategy.DRIVING_DEFAULT,null,null,"");
  //开始搜索最佳驾车线路
  myRouteSearch.calculateDriveRouteAsyn(myDriveRouteQuery);
 }
 public void onClickButton2(View v) { //响应单击按钮“搜索沿途加油站”
  RoutePOISearchQuery myRoutePOISearchQuery = new RoutePOISearchQuery(
          myFromLatLonPoint, myToLatLonPoint,
          RouteSearch.DrivingDefault, //搜索模式是驾车模式
          RoutePOISearch.RoutePOISearchType.TypeGasStation,//搜索POI类型是加油站
          250);
  RoutePOISearch myRoutePOISearch =
          new RoutePOISearch(this, myRoutePOISearchQuery);
  myRoutePOISearch.setPoiSearchListener(
          new RoutePOISearch.OnRoutePOISearchListener() {
           @Override
           public void onRoutePoiSearched(
                   RoutePOISearchResult routePOISearchResult, int i)
 
{
            List<RoutePOIItem> myRoutePOIItems = routePOISearchResult.getRoutePois();
            for (RoutePOIItem item : myRoutePOIItems) {
             //使用LatLng封装经纬度
             LatLng myLatLng=new LatLng(item.getPoint().getLatitude(),
                     item.getPoint().getLongitude());
             //在高德地图上指定位置添加标记,并设置标记自定义备注
             myAMap.addMarker(new MarkerOptions()
                     .position(myLatLng).snippet(item.getTitle()));
            } }
          });
  myRoutePOISearch.searchRoutePOIAsyn();
 }
}



03

代码说明


上面这段代码在MyCode\MySampleI93\app\src\main\java\com\bin\luo\mysample\ MainActivity.java文件中。

此实例的完整代码在MyCode\MySampleI93文件夹中。


04

补充说明


在测试代码时,必须保持网络畅通。


05

源代码下载

关注微信公众号,后台回复关键词 “Android App开发超实用代码261” 即可获得完整源代码。


06

参考书籍


扫码优惠购书


《Android App开发超实用代码集锦——jQuery Mobile+OpenCV+O》

ISBN:9787302589358

作者:罗帅、罗斌

定价:99元



问题描述+解决方案+真实源码+效果截图

介绍jQuery Mobile、OpenCV、OpenGL等在Android平台运行的应用

300个实例,提供完整源代码,边看边做边学



文章转载自清华计算机学堂,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论