Android地图开发使用的是Google的地图开发接口。
相关的类:
MapActivity:编写的地图类必须继承它
MapView:地图显示控件,可以设置成是否可以点击,交通模式,卫星模式,街道模式
MapController:设置地图缩放等级,地图显示中点
GeoPoint:地理坐标
ItemizedOverlay:覆盖层
使用GOOGLE地图开发必须使用密钥。
具体申请密钥过程这里不讲了。
源代码:
package com.mobimtech.message;
import java.util.ArrayList;
import android.content.Context;import android.content.Intent;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.drawable.Drawable;import android.os.Bundle;import android.widget.TextView;
import com.google.android.maps.GeoPoint;import com.google.android.maps.ItemizedOverlay;import com.google.android.maps.MapActivity;import com.google.android.maps.MapController;import com.google.android.maps.MapView;import com.google.android.maps.OverlayItem;import com.google.android.maps.Projection;
public class MapInfo extends MapActivity {
private Intent mIntent; private TextView mTv; private String mName; private String info[]; private MapView mMapView; private MapController mMapControl; private Drawable mMarker; private ArrayList<String>mList; private WaitDialog mDialog; @Override protected void onCreate(Bundle arg0) { // TODO Auto-generated method stub super.onCreate(arg0); setContentView(R.layout.map); mIntent=getIntent(); mName=mIntent.getStringExtra("key");// mTv=(TextView)findViewById(R.id.map_info); for(int i=0;i<Storage.mFriend.size();i++){// 好友姓名+经度+纬度+性别+年龄+家乡+个性签名 info=Storage.mFriend.get(i).split("@"); if(info[0].equals(mName)){// mTv.setText("姓名:"+info[0]+"经度:"+info[1]+"纬度:"+info[2]); setTitle("姓名:"+info[0]+"经度:"+info[1]+"纬度:"+info[2]); } } mMapView=(MapView)findViewById(R.id.mapview); mMapView.setClickable(true); mMapView.setBuiltInZoomControls(true); mMapView.setEnabled(true); mMapView.setTraffic(true); mMapControl=mMapView.getController(); mMapControl.setZoom(11); mMarker=getResources().getDrawable(R.drawable.mark); mMarker.setBounds(0, 0, mMarker.getIntrinsicWidth(),mMarker.getIntrinsicHeight()); mMarker.setAlpha(180); mMapView.getOverlays().add(new OverItem(mMarker,this)); } class OverItem extends ItemizedOverlay<OverlayItem>{
private Drawable marker; private double latitude; private double longititude; private Context context; private ArrayList <OverlayItem> geoList=new ArrayList<OverlayItem>(); public OverItem(Drawable defaultMarker) { super(defaultMarker); // TODO Auto-generated constructor stub } public OverItem(Drawable marker,Context context){ super(boundCenterBottom(marker)); this.context=context; this.marker=marker; String title=info[0]; String body=""; latitude=Double.parseDouble(info[2]); longititude=Double.parseDouble(info[1]);// 用给定的经纬度生成的三个参数是:Item的位置,标题,文本字段 GeoPoint gp=new GeoPoint((int)(latitude*1E6),(int)(longititude*1E6)); mMapControl.animateTo(gp); geoList.add(new OverlayItem(gp,title,body)); populate(); }
@Override public void draw(Canvas canvas, MapView mapView, boolean shadow) { // TODO Auto-generated method stub super.draw(canvas, mapView, shadow); 该方法用于在覆盖层上画图,比如说:画文字,矩形等// Projection接口用于手机屏幕坐标系统和地球表面坐标系统的转变 Projection projection=mapView.getProjection(); for(int i=size()-1;i>=0;i--){ OverlayItem overlayItem=getItem(i); String title=overlayItem.getTitle(); String info=overlayItem.getSnippet(); // 把经纬度转换成屏幕左上角像素坐标 android.graphics.Point point=projection.toPixels(overlayItem.getPoint(),null); Paint paint=new Paint(); paint.setColor(Color.RED); paint.setTextSize(15); canvas.drawText(title, point.x, point.y-20, paint); } } @Override protected OverlayItem createItem(int i) { // TODO Auto-generated method stub return geoList.get(i); }
@Override public int size() { // TODO Auto-generated method stub return geoList.size(); } } @Override protected boolean isRouteDisplayed() { // TODO Auto-generated method stub return false; } }
配置文件:
<?xml version="1.0" encoding="UTF-8"?><FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent">
<view android:id="@+id/mapview" class="com.google.android.maps.MapView" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1" android:apiKey="0tAU5QeoJKd2s65zZI_-OXbmBtMVdhs6DgUWdzg"
密钥 />
</FrameLayout>
清单文件:
必须添加:
<uses-library android:name="com.google.android.maps"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>