地图应用定位,覆盖图层
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
相关的类:
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
相关文章推荐
- 地图应用定位,覆盖图层
- IOS之地图和定位应用开发
- IOS之地图和定位应用开发
- iOS.定位服务与地图应用.03.地理信息编码查询
- 纵谈地图应用中标识定位
- iOS.定位服务与地图应用.04.使用iOS苹果地图
- IOS使用内置地图,定位应用开发
- IOS之地图和定位应用开发
- IOS之地图和定位应用开发
- IOS之地图和定位应用开发
- IOS之地图和定位应用开发
- IOS之地图和定位应用开发
- iOS百度地图简单应用( iOS地图定位(定位、地理编码与反地理编码、mapView、大头针)
- ECharts地图应用定位
- iOS.定位服务与地图应用.05.跟踪用户位置变化
- IOS之地图和定位应用开发
- ECharts地图应用图片定位
- iOS.定位服务与地图应用.06.调用iOS苹果地图
- Android 百度地图 SDK v3.3.0 (二)--- 地图定位和图层展示
- IOS之地图和定位应用开发