@芋头 发表于 2017-3-24 10:33:46

航拍编程计划:让你的航拍照片变地图(三分之一)

本帖最后由 @芋头 于 2017-3-24 10:36 编辑

路线检索:驾车+步行+公交换乘1、实现目的:广州市内,广工到广州塔的驾车路线
实现过程:
搜索:
1、初始化search:search.init(manager, listener);
2、设置驾车路线规划策略:
search.setDrivingPolicy(MKSearch.ECAR_DIS_FIRST);
3、设置驾车路线搜索:
search.drivingSearch(“广州”, start, “广州”, end);
处理结果
4、设置listener进行数据的处理:
a:实例化RouteOverlay的对象,然后对该对象设置数据
overlay.setData(result.getPlan(0).getRoute(0));获得第一个方案的第一个路线。
b:将overlay添加到overlays集合,然后刷新mapView。实现效果:


DrivingSearchDemo.Java1package huaxa.it.map;

import com.baidu.mapapi.map.RouteOverlay;
import com.baidu.mapapi.search.MKDrivingRouteResult;
import com.baidu.mapapi.search.MKPlanNode;
import com.baidu.mapapi.search.MKRoute;
import com.baidu.mapapi.search.MKRoutePlan;
import com.baidu.mapapi.search.MKSearch;

import android.os.Bundle;
import android.widget.Toast;

/**
* @项目名: BaiduMap
* @包名: huaxa.it.map
* @类名: DrivingSearchDemo
* @创建者: 黄夏莲
* @创建时间: 2016年12月3日 ,上午10:00:48
*
* @描述: TODO
*/
public class DrivingSearchDemo extends BaseActivity
{
    private MySearchListener    listener;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
      super.onCreate(savedInstanceState);
      search();
    }

    private void search()
    {
      listener = new MySearchListener();
      search.init(manager, listener);
      // ********驾车路线规划策略************
      // setDrivingPolicy
      // public int setDrivingPolicy(int policy)
      // 设置驾车路线规划策略. 参数为策略常量。对下次搜索有效
      // 参数:
      // policy - ECAR_TIME_FIRST:时间优先;ECAR_DIS_FIRST:距离最短;ECAR_FEE_FIRST:费用最少
      // 返回:
      // 成功返回0,否则返回-1
      search.setDrivingPolicy(MKSearch.ECAR_DIS_FIRST);
      // **********驾乘路线搜索***************
      // public int drivingSearch(String startCity,MKPlanNode start,String
      // endCity,MKPlanNode end)
      // 驾乘路线搜索.
      // 异步函数,返回结果在MKSearchListener里的onGetDrivingRouteResult方法通知
      // 参数:
      // startCity - 起点所在城市,起点为坐标时可不填
      // start - 搜索的起点,可以为坐标,名称任一种
      // endCity - 终点所在城市,终点为坐标时可不填
      // end - 搜索的终点,可以为坐标,名称任一种
      // 返回:
      // 成功返回0,否则返回-1
      // 补充:MKPlanNode的属性
      // 1、String name结点名称
      // 2、GeoPoint pt结点坐标
      MKPlanNode start = new MKPlanNode();
      start.pt = geoPoint;
      MKPlanNode end = new MKPlanNode();
      end.name = "广州塔";
      search.drivingSearch("广州", start, "广州", end);
    }

    private class MySearchListener extends BaseAdapter
    {
      @Override
      public void onGetDrivingRouteResult(MKDrivingRouteResult result,
                int iError)
      {

            // MKDrivingRouteResult() getAddrResult() 返回起点或终点的地址信息结果,
            // MKPlanNode getEnd() 获取路线终站,
            // int getNumPlan() 获取方案数目,
            // MKRoutePlan getPlan(int index) 获取第index个方案 ,
            // MKPlanNode getStart() 获取路线起点

            if (result != null && iError == 0)
            {
                // 结果处理
                RouteOverlay overlay = new RouteOverlay(DrivingSearchDemo.this,
                        mapView);
                // 获得路线信息
                if (result.getNumPlan() > 0)
                {
                  overlay.setData(result.getPlan(0).getRoute(0));
                  mapView.getOverlays().add(overlay);
                  mapView.refresh();
                }

            } else
            {
                Toast.makeText(getApplicationContext(), "没有搜索到结果",
                        Toast.LENGTH_LONG).show();
            }
            super.onGetDrivingRouteResult(result, iError);
      }
    }
}
[*]
2、实现目的:路线检索+设置途经点
修改代码:
实现效果:

途径中山大学。private void search()
    {
      listener = new MySearchListener();
      search.init(manager, listener);
      // ********驾车路线规划策略************
      // setDrivingPolicy
      // public int setDrivingPolicy(int policy)
      // 设置驾车路线规划策略. 参数为策略常量。对下次搜索有效
      // 参数:
      // policy - ECAR_TIME_FIRST:时间优先;ECAR_DIS_FIRST:距离最短;ECAR_FEE_FIRST:费用最少
      // 返回:
      // 成功返回0,否则返回-1
      search.setDrivingPolicy(MKSearch.ECAR_DIS_FIRST);
      // **********驾乘路线搜索***************
      // public int drivingSearch(String startCity,MKPlanNode start,String
      // endCity,MKPlanNode end)
      // 驾乘路线搜索.
      // 异步函数,返回结果在MKSearchListener里的onGetDrivingRouteResult方法通知
      // 参数:
      // startCity - 起点所在城市,起点为坐标时可不填
      // start - 搜索的起点,可以为坐标,名称任一种
      // endCity - 终点所在城市,终点为坐标时可不填
      // end - 搜索的终点,可以为坐标,名称任一种
      // 返回:
      // 成功返回0,否则返回-1
      // 补充:MKPlanNode的属性
      // 1、String name结点名称
      // 2、GeoPoint pt结点坐标
      MKPlanNode start = new MKPlanNode();
      start.pt = geoPoint;
      MKPlanNode end = new MKPlanNode();
      end.name = "广州塔";
//      search.drivingSearch("广州", start, "广州", end);

      // public int drivingSearch(String startCity,
      // MKPlanNode start,
      // String endCity,
      // MKPlanNode end,
      // ArrayList<MKWpNode> wpNodes)
      // 驾车路线搜索,可设置途经点
      // 异步函数,返回结果在MKSearchListener里的onGetDrivingRouteResult方法通知
      //
      // 参数:
      // startCity - 起点所在城市,起点为坐标时可不填
      // start - 搜索的起点,可以为坐标,名称任一种
      // endCity - 终点所在城市,终点为坐标时可不填
      // end - 搜索的终点,可以为坐标,名称任一种
      // wpNodes - 途经点数据
      // 返回:
      // 成功返回0,否则返回-1
      ArrayList<MKWpNode> wpNodes = new ArrayList<MKWpNode>();
      MKWpNode node = new MKWpNode();
      node.city = "广州";
      node.name = "中山大学";
      wpNodes.add(node);
      search.drivingSearch("广州", start, "广州", end, wpNodes);

    }

3、实现目的:广州市内,广工到广州塔的步行路线
实现过程:同上
实现效果:

WalkingSearchDemo.javapackage huaxa.it.map;


import android.os.Bundle;
import android.widget.Toast;

import com.baidu.mapapi.map.RouteOverlay;
import com.baidu.mapapi.search.MKDrivingRouteResult;
import com.baidu.mapapi.search.MKPlanNode;
import com.baidu.mapapi.search.MKSearch;
import com.baidu.mapapi.search.MKWalkingRouteResult;

/**
* @项目名: BaiduMap
* @包名: huaxa.it.map
* @类名: WalkingSearchDemo
* @创建者: 黄夏莲
* @创建时间: 2016年12月3日 ,下午2:20:29
*
* @描述: TODO
*/

public class WalkingSearchDemo extends BaseActivity
{
    private MySearchListener    listener;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
      super.onCreate(savedInstanceState);
      search();
    }

    private void search()
    {
      listener = new MySearchListener();
      search.init(manager, listener);
      // **********驾乘路线搜索***************
      // public int walkingSearch(String startCity,
      // MKPlanNode start,
      // String endCity,
      // MKPlanNode end)
      // 步行路线搜索.
      // 异步函数,返回结果在MKSearchListener里的onGetWalkingRouteResult方法通知
      //
      // 参数:
      // startCity - 起点所在城市,起点为坐标时可不填
      // start - 搜索的起点,可以为坐标,名称任一种
      // endCity - 终点所在城市,终点为坐标时可不填
      // end - 搜索的终点,可以为坐标,名称任一种
      // 返回:
      // 成功返回0,否则返回-1
      MKPlanNode start = new MKPlanNode();
      start.pt = geoPoint;
      MKPlanNode end = new MKPlanNode();
      end.name = "广州塔";
      search.walkingSearch("广州", start, "广州", end);
    }

    private class MySearchListener extends BaseAdapter
    {
      @Override
      public void onGetWalkingRouteResult(MKWalkingRouteResult result,
                int iError)
      {
            // TODO Auto-generated method stub
            if (result != null && iError == 0)
            {
                // 结果处理
                RouteOverlay overlay = new RouteOverlay(WalkingSearchDemo.this,
                        mapView);
                // 获得路线信息
                if (result.getNumPlan() > 0)
                {
                  overlay.setData(result.getPlan(0).getRoute(0));
                  mapView.getOverlays().add(overlay);
                  mapView.refresh();
                }

            } else
            {
                Toast.makeText(getApplicationContext(), "没有搜索到结果",
                        Toast.LENGTH_LONG).show();
            }



            super.onGetWalkingRouteResult(result, iError);
      }
    }
}
4、实现目的:广州市内,广工到广州塔的公交车路线
TransitSearchDemo.java
实现效果:

package huaxa.it.map;


import android.os.Bundle;
import android.widget.Toast;

import com.baidu.mapapi.map.RouteOverlay;
import com.baidu.mapapi.map.TransitOverlay;
import com.baidu.mapapi.search.MKDrivingRouteResult;
import com.baidu.mapapi.search.MKPlanNode;
import com.baidu.mapapi.search.MKSearch;
import com.baidu.mapapi.search.MKTransitRouteResult;

/**
* @项目名: BaiduMap
* @包名: huaxa.it.map
* @类名: TransitSearchDemo
* @创建者: 黄夏莲
* @创建时间: 2016年12月3日 ,下午2:20:29
*
* @描述: TODO
*/

public class TransitSearchDemo extends BaseActivity
{
    private MySearchListener    listener;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
      super.onCreate(savedInstanceState);
      search();
    }

    private void search()
    {
      listener = new MySearchListener();
      search.init(manager, listener);
      // ********公车路线规划策略************
      // public int setTransitPolicy(int policy)
      // 设置路线规划策略.
      // 参数为策略常量。对下次搜索有效
      //
      // 参数:
      // policy -
      // EBUS_TIME_FIRST:时间优先;EBUS_TRANSFER_FIRST:少换乘;EBUS_WALK_FIRST:少步行;EBUS_NO_SUBWAY:
      // 非地铁
      // 返回:
      // 成功返回0,否则返回-1
      search.setTransitPolicy(MKSearch.EBUS_TRANSFER_FIRST);
      // **********驾乘路线搜索***************
      //public int transitSearch(String city,
      // MKPlanNode start,
      // MKPlanNode end)
      // 公交路线搜索.
      // 异步函数,返回结果在MKSearchListener里的onGetTransitRouteResult方法通知
      //
      // 参数:
      // city - 城市名,用于在哪个城市内进行检索(必须填写)
      // start - 检索的起点,可通过关键字,坐标,两种方式指定
      // end - 检索的终点,可通过关键字,坐标,两种方式指定
      // 返回:
      // 成功返回0,否则返回-1
      MKPlanNode start = new MKPlanNode();
      start.pt = geoPoint;
      MKPlanNode end = new MKPlanNode();
      end.name = "广州塔";
      search.transitSearch("广州", start, end);
    }

    private class MySearchListener extends BaseAdapter
    {
      @Override
      public void onGetTransitRouteResult(MKTransitRouteResult result,
                int iError)
      {
            if (result != null && iError == 0)
            {
                // 结果处理
                TransitOverlay overlay = new TransitOverlay(TransitSearchDemo.this, mapView);
                if (result.getNumPlan() > 0)
                {
                  overlay.setData(result.getPlan(0));
                  mapView.getOverlays().add(overlay);
                  mapView.refresh();
                }

            } else
            {
                Toast.makeText(getApplicationContext(), "没有搜索到结果",
                        Toast.LENGTH_LONG).show();
            }
            super.onGetTransitRouteResult(result, iError);
      }
    }
}



贝克悟空 发表于 2017-3-24 11:53:28

没看懂

质的飞跃 发表于 2017-3-24 12:44:20

楼主,你是广工的吗?

质的飞跃 发表于 2017-3-24 12:44:28

虽然我没看懂你想表达什么意思?

@芋头 发表于 2017-3-24 13:17:16

质的飞跃 发表于 2017-3-24 12:44
虽然我没看懂你想表达什么意思?

利用无人机航测图片替代百度地图实现便民服务

tjcdq 发表于 2017-3-26 23:17:45

貌高大上啊!
页: [1]
查看完整版本: 航拍编程计划:让你的航拍照片变地图(三分之一)