百度地图绘制图形

现需要实现这样的功能:将给定的多个定位点进行连接,让其形成一条路线;点击每个定位点出现该点的基本信息。百度地图有现成的路线覆盖物,但现有的路线(公交、驾车、步行)都只是起点到终点,不能经过多点。只需要继承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
   OverlayItemoverLayItemstart = getItem(index);
   OverlayItemoverLayItemstop = getItem(index-1);
   //把经纬度变换到相对于MapView左上角的屏幕像素坐标
   Pointpointfrom = projection.toPixels(overLayItemstart.getPoint(),null);
   Point pointto= projection.toPixels(overLayItemstop.getPoint(), null);
   PaintpaintLine=new Paint();
   paintLine.setColor(Color.BLUE);
   paintLine.setStrokeWidth(5);
   canvas.drawLine(pointfrom.x,pointfrom.y, pointto.x, pointto.y, paintLine);//两点之间画直线
  }
  Paint paintText = newPaint();
  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,
    newMapView.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(newView.OnClickListener() {
   public voidonClick(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" />

效果如下图:

android百度地图多点绘制路线

最后,虽然不是很好看,但是是我要的功能就行了
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值