google map的小知识点

1.Projection的作用
2.在Google Map上绘制直线的方法

绘制路线的步骤
1.确定路线的其实和终止的经纬度坐标;
2.在起点和终点上绘制图标;
3,将经纬度坐标换算成屏幕上的x轴/y轴
4,在起点和终点之间绘制路线;

Projection的作用
1.将地图上的经纬度坐标转化层层屏幕上的x轴和y轴的坐标
android.graphics.Point toPixels(GeoPoint in,android.graphics.Point out)
2.将x轴和y轴的坐标转换成地图上的经纬度坐标
GeoPoint fromPixels(int x,int y)

main.xml

<com.google.android.maps.MapView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:enabled="true"
android:id="@+id/mapViewId"
android:apiKey=""
/>


//在MapView之上创建一个图层,需要创建一个类,实现Overlay,并生成该类的对象,然后将该队形加到MapView。getOverlay()
//一个OverlayItem对象就代表了一个在地图上显示的标记
public class FirstOverlay extends ItemizedOverlay<OverlayItem>{
//创建一个List对象,用于持有该图层当中所有的标记对象
private ArrayList<OverlayItem> overlayItems = new ArrayList<OverlayItem>();
private Context context;

//第一个参数用于指定标记所使用的默认图片
public FirstOverlay(Drawable defaultMarker,Context context){
//必须调用父类的构造函数
supper(boundCenterBotton(defaultMarker));
this.context = context;
}

public FirstOverlay(Drawable defaultMarker){
supper(boundCenterBotton(defaultMarker));
}

//用于将生成好的OverlayItem对象添加到List当中
public void addOverlay(OverlayItem overlay){
overlayItems.add(overlay);
populate();
}

//用于创建一个overlayItem对象
@Override
protected OverlayItem createItem(int i){
return overlayItems.get(i);
}

//返回当前的overlay当中所报涵的overlayItem
@Override
public int size(){
return overlayItems.size();
}
//当用户点击标记时,所调用的函数
@Override
public boolean onTap(int index){
OverlayItem item = overlayItems.get(index);
AlterDialog.Builder builder = new AlterDialog.Builder(context);
builder.setTitle(item.getTitle());
builder.setMessage(item.getSnippet());
Dialog dialog = builder.create();
dialog.show();
return true;
}
}


public class MainActivity extends Activity {
/** Called when the activity is first created. */
private Projection projection;
private List<Overlay> overlays;
private MapController mapContrroller;
private GeoPoint beginGeoPoint;
private GeoPoint endGeoPoint;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

//指定起始和终止位置的经纬度
beginGeoPoint = new GeoPoint(19240000, -99120000);
endGeoPoint = new GeoPoint(19340000, -99220000);

MapView mapView = (MapView) findViewById(R.id.mapViewId);
mapView.setBuiltInZoomControls(true);

//mapContrroller对象只要用于对地图进项控制
mapContrroller = mapView.getController();
overlays = mapView.getOverlays();
projection = mapView.getProjection();

overlays.add(new PointOverlay(beginGeoPoint));
overlays.add(new PointOverlay(endGeoPoint));
overlays.add(new LineOverlay(beginGeoPoint, endGeoPoint));

//
mapContrroller.animateTo(beginGeoPoint);
mapContrroller.setZoom(12);
}


@Override
protected boolean isRouteDisplayed(){
return false;
}

//该类的对象用于在地图上绘制线条
class LineOverlay extends Overlay {
private GeoPoint begin;
private GeoPoint end;

public LineOverlay(){

}

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

public void draw(Canvas canvas,MapView mapv, boolean shadow){
super.draw(canvas, mapv, shadow);
Paint paint = new Paint();
paint.setColor(Color.BLUE);
paint.setStyle(Paint.Style.FILL_AND_STROKE);
paint.setStrokeWidth(2);
Point beginPoint = new Point();
Point endPoint = new Point();
Path path = new Path();
projection.toPixels(beginGeoPoint,beginPoint);
projection.toPixels(endGeoPoint,endPoint);
path.moveTo(endPoint.x, endPoint.y);
path.lineTo(beginPoint.x, beginPoint.y);
canvas.drawPath(path, paint);
}
}

//该类的对象的作用是在地图上绘制图标
class PointOverlay extends Overlay{
private GeoPoint geoPoint;
public PointOverlay(){

}

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

public void draw(Canvas canvas,MapView mapv, boolean shadow){
super.draw(canvas, mapv, shadow);
Point point = new Point();
projection.toPixels(geoPoint, point);
Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.icon);
Paint paint = new Paint();
canvas.drawBitmap(bmp, point.x, point.y-20, paint);
}
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值