现在的位置: 首页 > 综合 > 正文

规划路线

2017年12月15日 ⁄ 综合 ⁄ 共 6232字 ⁄ 字号 评论关闭

 

每一台电脑都要申请属于自己的android:apiKey,要是使用别人的android:apiKey,

则地图只显示方格,不会有实际的地图出现,并且在Android虚拟机重建或者重装电脑的操作系统的时候

也要重新申请android:apiKey,关于如何申请,我在“申请Google Map服务”中已说得很详细。

 

 

 

新建一个地图项目。

 

在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:clickable="true" android:enabled="true"

     android:layout_width="fill_parent"

     android:layout_height="fill_parent"

     android:apiKey="0Pm9QrsSh_mwtc6rMyqZMRu71qFpIB51UXVWHmg" />

</LinearLayout>

 

 

 

 

在MyOverlayImpl.java中:

 

package com.li.googlemapproject;

 

import java.util.ArrayList;

import java.util.List;

 

import android.app.AlertDialog;

import android.app.Dialog;

import android.content.Context;

import android.content.DialogInterface;

import android.graphics.drawable.Drawable;

 

import com.google.android.maps.ItemizedOverlay;

import com.google.android.maps.OverlayItem;

 

public class MyOverlayImpl extends ItemizedOverlay<OverlayItem> {

  private List<OverlayItem> allOverlayItems =
new
ArrayList<OverlayItem>();

  private Context context = null;

 

  public MyOverlayImpl(Drawable defaultMarker, Context context) {

     super(boundCenter(defaultMarker));

     this.context = context;

  }

 

  @Override

  protected OverlayItem createItem(int i) {

     return this.allOverlayItems.get(i);

  }

 

  @Override

  public int size() {

    return this.allOverlayItems.size();

  }

 

  @Override

  protected boolean onTap(int index) { // 单击标记图片之后的操作

     OverlayItem item = this.allOverlayItems.get(index); // 取得指定的点

     Dialog dialog = new AlertDialog.Builder(this.context)

         .setIcon(R.drawable.pic_m).setTitle(item.getTitle())

         .setMessage(item.getSnippet())

         .setPositiveButton("关闭", new DialogInterface.OnClickListener() {

 

           public void onClick(DialogInterface dialog,
int which) {

 

            }

         }).create();

     dialog.show();

     return true;

  }

 

  public void addOverlayItem(OverlayItem item) {

     this.allOverlayItems.add(item);

     super.populate();

  }

}

 

 

 

 

 

在PaintLineOverlay.java中:

 

package com.li.googlemapproject;

 

import android.graphics.Canvas;

import android.graphics.Color;

import android.graphics.Paint;

import android.graphics.Paint.Style;

import android.graphics.Point;

 

import com.google.android.maps.GeoPoint;

import com.google.android.maps.MapView;

import com.google.android.maps.Overlay;

import com.google.android.maps.Projection;

 

public class PaintLineOverlay extends Overlay {

  private GeoPoint beginGeoPoint = null;

  private GeoPoint endGeoPoint = null;

 

  public PaintLineOverlay(GeoPoint beginGeoPoint, GeoPoint endGeoPoint) {

     this.beginGeoPoint = beginGeoPoint;

     this.endGeoPoint = endGeoPoint;

  }

 

  @Override

  public void draw(Canvas canvas, MapView mapView, boolean shadow) {

     Paint paint = new Paint();

     paint.setStyle(Style.FILL_AND_STROKE);

     paint.setStrokeWidth(3);

     paint.setColor(Color.RED);

     Point beginPoint = new Point();

     Point endPoint = new Point();

     Projection projection = mapView.getProjection();

     projection.toPixels(this.beginGeoPoint, beginPoint);

     projection.toPixels(this.endGeoPoint, endPoint);

     canvas.drawLine(beginPoint.x, beginPoint.y, endPoint.x, endPoint.y,

         paint);

  }

 

}

 

 

 

 

在PaintPointOverlay.java中:

 

package com.li.googlemapproject;

 

import android.graphics.Canvas;

import android.graphics.Color;

import android.graphics.Paint;

import android.graphics.Point;

 

import com.google.android.maps.GeoPoint;

import com.google.android.maps.MapView;

import com.google.android.maps.Overlay;

import com.google.android.maps.Projection;

 

public class PaintPointOverlay extends Overlay {

  private GeoPoint geoPoint = null;

 

  public PaintPointOverlay(GeoPoint geoPoint) {

     this.geoPoint = geoPoint;

  }

 

  @Override

  public void draw(Canvas canvas, MapView mapView, boolean shadow) {

     Point point = new Point();

     Projection projection = mapView.getProjection();

     projection.toPixels(this.geoPoint, point); // 将地图上坐标的点设置为绘图屏幕的点

     Paint paint = new Paint();

     paint.setColor(Color.RED);

     canvas.drawCircle(point.x, point.y, 6, paint);

  }

 

}

 

 

 

 

 

在MyGoogleMapDemo.java中:

 

package com.li.googlemapproject;

 

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;

 

public class MyGoogleMapDemo extends MapActivity {

  private MapView mapView = null;

 

  @Override

  public void onCreate(Bundle savedInstanceState) {

     super.onCreate(savedInstanceState);

     super.setContentView(R.layout.main);

     this.mapView = (MapView) super.findViewById(R.id.mapview); // 取得地图视图

     this.mapView.setBuiltInZoomControls(true);

     // 给定一个坐标:天安门的坐标:116.3975060,39.9087110

     GeoPoint beginGeoPoint = new GeoPoint((int) (39.9087110 * 1E6),

         (int) (116.3975060 * 1E6));

     GeoPoint endGeoPoint = new GeoPoint((int) (39.9995740 * 1E6),

         (int) (116.2739010 * 1E6));

     this.mapView.getOverlays().add(new PaintPointOverlay(beginGeoPoint));

     this.mapView.getOverlays().add(new PaintPointOverlay(endGeoPoint));

     this.mapView.getOverlays().add(

         new PaintLineOverlay(beginGeoPoint, endGeoPoint));

     MapController mapController = this.mapView.getController() ;

     mapController.animateTo(beginGeoPoint); // 设置坐标的动画

     mapController.setZoom(12); // 最大的级别是12

  }

 

  @Override

  protected boolean isRouteDisplayed() {

     return false;

  }

}

 

 

 

在AndroidManifest.xml中修改权限:

 

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

    package="com.li.googlemapproject"

    android:versionCode="1"

    android:versionName="1.0" >

 

    <uses-sdk

        android:minSdkVersion="8"

        android:targetSdkVersion="15" />

    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

  <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

    <application

        android:icon="@drawable/ic_launcher"

        android:label="@string/app_name"

        android:theme="@style/AppTheme" >

        <activity

            android:name=".MyGoogleMapDemo"

            android:label="@string/title_activity_my_google_map_demo" >

            <intent-filter>

                <action android:name="android.intent.action.MAIN" />

 

                <category android:name="android.intent.category.LAUNCHER" />

            </intent-filter>

        </activity>

        <uses-library android:name="com.google.android.maps" />

    </application>

  <uses-permission android:name="android.permission.INTERNET"/>

</manifest>

 

【上篇】
【下篇】

抱歉!评论已关闭.