zoukankan      html  css  js  c++  java
  • android百度地图多点绘制路线

    现需要实现这样的功能:将给定的多个定位点进行连接,让其形成一条路线;点击每个定位点出现该点的基本信息。百度地图有现成的路线覆盖物,但现有的路线(公交、驾车、步行)都只是起点到终点,不能经过多点。只需要继承ItemizedOverlay类,实现其draw、ontap方法:

    @Override
     public void draw(Canvas canvas, MapView mapView, boolean shadow) {
      super.draw(canvas, mapView, shadow);
      // Projection接口用于屏幕像素点坐标系统和地球表面经纬度点坐标系统之间的变换
      Projection projection = mapView.getProjection();
    
      // 遍历所有的OverlayItem
      for (int index = this.size() - 1; index >0; index--) {
       // 得到给定索引及后一个的item
       OverlayItem overLayItemstart = getItem(index);
       OverlayItem overLayItemstop = getItem(index-1);
       // 把经纬度变换到相对于MapView左上角的屏幕像素坐标
       Point pointfrom = projection.toPixels(overLayItemstart.getPoint(), null);
       Point pointto = projection.toPixels(overLayItemstop.getPoint(), null);
       Paint paintLine=new Paint();
       paintLine.setColor(Color.BLUE);
       paintLine.setStrokeWidth(5);
       canvas.drawLine(pointfrom.x, pointfrom.y, pointto.x, pointto.y, paintLine);//两点之间画直线
      }
      Paint paintText = new Paint();
      paintText.setColor(Color.BLUE);
      paintText.setTextSize(15);
      Point pointFirst = projection.toPixels(getItem(0).getPoint(), null);//路线的起点
      Point pointLast = projection.toPixels(getItem(this.size() - 1).getPoint(), null);//路线的终点
      canvas.drawText("起点", pointFirst.x, pointFirst.y, paintText);//添加起点终点标记
      canvas.drawText("终点", pointLast.x, pointLast.y, paintText);
     }

    另外,实现onTab方法,实现定位点的点击操作,

    @Override
     protected boolean onTap(int i) {
      // 处理当点击事件
      setFocus(mGeoList.get(i));
      GeoPoint pt = mGeoList.get(i).getPoint();
      baiduMap.updateViewLayout(popView,
        new MapView.LayoutParams(LayoutParams.WRAP_CONTENT,
          LayoutParams.WRAP_CONTENT, pt,
          MapView.LayoutParams.BOTTOM_CENTER));
      mContext.popView.setVisibility(View.VISIBLE);
      TextView TITLE = (TextView) findViewById(R.id.text_title);
      TITLE.setText("这是第"+i+"个定位点");
      // 关闭信息
      ImageView imageView = (ImageView) findViewById(R.id.ima_close);
      imageView.setOnClickListener(new View.OnClickListener() {
       public void onClick(View v) {
        popView.setVisibility(View.GONE);
       }
      });
      return true;
     }

    注:baiduMap是MapView控件,popView是点击后弹出信息的布局页面;popView布局代码如下:

    http://schemas.android.com/apk/res/android"
     android:background="@drawable/info_bubble"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:paddingLeft="20px"
     android:paddingTop="10px"
     android:paddingRight="20px"
     android:paddingBottom="30px"   
       >
       
           android:ellipsize="marquee"
           android:layout_width="120px"
           android:layout_height="wrap_content"
           android:singleLine="true"   />
       
        android:background="@drawable/close"
        android:layout_width="30px"
        android:layout_toRightOf="@id/text_title"
           android:layout_height="wrap_content" />

    效果如下图:

  • 相关阅读:
    PHP 计算页面执行时间
    PHP 实现多服务器共享 SESSION 数据
    你不了解PHP的10件事情
    智能的PHP缩图类
    php配置文件php.ini 中文版
    PclZip:强大的PHP压缩与解压缩zip类
    https 加载问题
    docker 安装sentry
    requests ssl 报错
    解决长时间计划任务rsync同步进程数过多
  • 原文地址:https://www.cnblogs.com/xuewater/p/2891371.html
Copyright © 2011-2022 走看看