Android 在map上画出路线
Android 在map上画出路线
最近在搞在地图上画出路线图,经过一段时间的摸索,终于搞明白了,其实也挺简单的,写个类继承Overlay,并重写draw方法,在draw方法中画出path即可。对于Overaly,在地图上标记某个点或者画线之类的就要使用overlay,overlay相当于一个覆盖物,覆盖在地图上,这个覆盖物要自己实现所以要继承Overlay。本例自定义了要画的点,如何得到两地之间的众多点的坐标(经纬度)可参加
Android在google map上画出导航路线图
具体代码:
- package net.blogjava.mobile.map;
- import java.util.List;
- import android.app.AlertDialog;
- import android.graphics.Bitmap;
- import android.graphics.BitmapFactory;
- import android.graphics.Canvas;
- import android.graphics.Color;
- import android.graphics.Paint;
- import android.graphics.Path;
- import android.graphics.Point;
- import android.location.Address;
- import android.location.Geocoder;
- import android.os.Bundle;
- import android.view.Menu;
- 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 Main extends MapActivity {
- private GeoPoint gpoint1, gpoint2, gpoint3;// 连线的点
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- MapView mapView = (MapView) findViewById(R.id.mapview);
- mapView.setClickable(true);
- mapView.setBuiltInZoomControls(true);
- MapController mapController = mapView.getController();
- mapView.setTraffic(true);// 交通图
- // mapView.setSatellite(true);//卫星图
- // mapView.setStreetView(true);//街景
- MyOverlay myOverlay = new MyOverlay();
- mapView.getOverlays().add(myOverlay);
- mapController.setZoom(15);// 初始放大倍数
- gpoint1 = new GeoPoint((int) (24.477384 * 1000000),
- (int) (118.158216 * 1000000));
- gpoint2 = new GeoPoint((int) (24.488967 * 1000000),
- (int) (118.144277 * 1000000));
- gpoint3 = new GeoPoint((int) (24.491091 * 1000000),
- (int) (118.136781 * 1000000));
- mapController.animateTo(gpoint1);
- }
- @Override
- protected boolean isRouteDisplayed() {
- // TODO Auto-generated method stub
- return false;
- }
- class MyOverlay extends Overlay {
- @Override
- public void draw(Canvas canvas, MapView mapView, boolean shadow) {
- // TODO Auto-generated method stub
- super.draw(canvas, mapView, shadow);
- // 画笔
- Paint paint = new Paint();
- paint.setColor(Color.RED);
- paint.setDither(true);
- paint.setStyle(Paint.Style.STROKE);
- paint.setStrokeJoin(Paint.Join.ROUND);
- paint.setStrokeCap(Paint.Cap.ROUND);
- paint.setStrokeWidth(2);
- Projection projection = mapView.getProjection();
- Point p1 = new Point();
- Point p2 = new Point();
- Point p3 = new Point();
- projection.toPixels(gpoint1, p1);
- projection.toPixels(gpoint2, p2);
- projection.toPixels(gpoint3, p3);
- Path path = new Path();
- path.moveTo(p1.x, p1.y);
- path.lineTo(p2.x, p2.y);
- path.lineTo(p3.x, p3.y);
- canvas.drawPath(path, paint);// 画出路径
- }
- }
- }
main.xml:
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical" android:layout_width="fill_parent"
- android:layout_height="fill_parent">
- <com.google.android.maps.MapView
- android:id="@+id/mapview" android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:apiKey="0IB7Kn70qp1LT216Hhb-jmHJ8GLTie4p63O77KQ" />
- </LinearLayout>
最后别忘了加权限 :<uses-permission android:name="android.permission.INTERNET"/>
在<applacation></applacation>之间加<uses-library android:name="com.google.android.maps" />
|
评论暂时关闭