如何在Google Map上画一条直线

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
     <com.google.android.maps.MapView
                 android:layout_width="fill_parent"
                 android:layout_height="fill_parent"
                 android:id="@+id/map_view2"
                 android:clickable="true"
                 android:apiKey="0zoMLU7jtw20HSV-bpo6p81D6rFEvGwMz2BJqiw"
                 />


</LinearLayout>



package com.example.googlemap;


import java.util.List;


import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import android.graphics.Path;
import android.graphics.Point;
import android.os.Bundle;


import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapController;
import com.google.android.maps.MapView;
import com.google.android.maps.Overlay;
import com.google.android.maps.Projection;


public class DrawLineinGoogleMap extends MapActivity {


//Projection的主要的功能就是进行屏幕坐标与地图坐标的转化
private Projection projection;
//获取地图所有的图层
private List<Overlay> overlays;
//获取地图的所有方法
private MapView mapview;
//控制地图
private MapController mapcontroller;
//地图上的起始地址
private GeoPoint geobegin;
//地图上的终止地址
private GeoPoint geoend;

@Override
protected void onCreate(Bundle arg0) {
super.onCreate(arg0);

//指定起止位置
geobegin=new GeoPoint(10, 20);
geoend=new GeoPoint(20,30);

setContentView(R.layout.drawlineingooglemap);
mapview=(MapView)findViewById(R.id.map_view2);
mapview.setBuiltInZoomControls(true);//显示缩放按钮

mapcontroller=mapview.getController();
overlays=mapview.getOverlays();
projection=mapview.getProjection();

overlays.add(new PointOverlay(geobegin));
overlays.add(new PointOverlay(geoend));
overlays.add(new LineOverlay(geobegin,geoend));

mapcontroller.setCenter(geobegin);
mapcontroller.setZoom(12);//设置缩放的最大值
}


/*
* 自定义坐标的图片图层
* */

class PointOverlay extends Overlay{


private GeoPoint geopoint;

public PointOverlay() {
}




public PointOverlay(GeoPoint geopoint) {
this.geopoint = geopoint;
}




@Override
public void draw(Canvas canvas, MapView mapv, boolean arg2) {
super.draw(canvas, mapv, arg2);
//创建屏幕上的坐标
Point point=new Point();
//将地图的坐标转换成屏幕的坐标
projection.toPixels(geopoint, point);
//创建位图
Bitmap bmp=BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);
//创建画笔
Paint paint=new Paint();
//在画布上用画笔话
canvas.drawBitmap(bmp, point.x, point.y-16, paint);
}

}


class LineOverlay extends Overlay{


private GeoPoint begin;
private GeoPoint end;

public LineOverlay() {
}




public LineOverlay(GeoPoint beginpoint,GeoPoint endpoint) {
this.begin=beginpoint;
this.end=endpoint;
}




@Override
public void draw(Canvas canvas, MapView mapv, boolean arg2) {
super.draw(canvas, mapv, arg2);
Paint paint=new Paint();
paint.setColor(Color.BLUE);
paint.setStyle(Style.FILL_AND_STROKE);
//创建屏幕上的坐标
Point startpoint=new Point();
Point endpoint=new Point();
//将地图的坐标转换成屏幕的坐标
projection.toPixels(begin, startpoint);
projection.toPixels(end, endpoint);

Path path=new Path();
path.moveTo(startpoint.x, startpoint.y);
path.lineTo(endpoint.x, endpoint.y);
canvas.drawPath(path, paint);

}

}

@Override
protected boolean isRouteDisplayed() {
// TODO Auto-generated method stub
return false;
}


}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值