地图应用定位,覆盖图层

来源:互联网 发布:淘宝申诉代购资质无效 编辑:程序博客网 时间:2024/05/27 00:47

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"/>

 

 

原创粉丝点击