您的位置:首页 > 其它

地图应用定位,覆盖图层

2011-02-17 13:36 211 查看
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"/>



本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/fuuckwtu/archive/2011/02/15/6186212.aspx
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: