`
ze_nana
  • 浏览: 52289 次
社区版块
存档分类
最新评论

google map

 
阅读更多

com.google.android.maps包,其中包含了一系列用于在Google Map上显示、控制和层叠信息的功能类,以下是该包中最重要的几个类:

·MapActivity:这个类是用于显示Google Map的Activity类,它需要连接底层网络。MapActivity是一个抽象类,任何想要显示MapView的activity都需要派生自MapActivity,并且在其派生类的onCreate()中,都要创建一个MapView实例。

·MapView:MapView是用于显示地图的View组件。它派生自android.view.ViewGroup。它必须和MapActivity配合使用,而且只能被MapActivity创建,这是因为MapView需要通过后台的线程来连接网络或者文件系统,而这些线程要由MapActivity来管理。

·MapController:MapController用于控制地图的移动、缩放等。

·Overlay:这是一个可显示于地图之上的可绘制的对象。

·GeoPoint:这是一个包含经纬度位置的对象。

 

com.google.android.location包,其中包括以下几个重要的功能类:

·LocationManager:本类提供访问定位服务的功能,也提供获取最佳定位提供者的功能。另外,临近警报功能也可以借助该类来实现。

·LocationProvider:该类是定位提供者的抽象类。定位提供者具备周期性报告设备地理位置的功能。

·LocationListener:提供定位信息发生改变时的回调功能。必须事先在定位管理器中注册监听器对象。

·Criteria:该类使得应用能够通过在LocationProvider中设置的属性来选择合适的定位提供者。

·Geocoder:用于处理地理编码和反向地理编码的类。地理编码是指将地址或其他描述转变为经度和纬度,反向地理编码则是将经度和纬度转变为地址或描述语言,其中包含了两个构造函数,需要传入经度和纬度的坐标。getFromLocation方法可以得到一组关于地址的数组。

要使用地理定位,首先需要取得LocationManager的实例,在Android中,获得LocationManager的唯一方法是通过getSystemService()方法的调用。通过使用LocationManager,我们可以获得一个位置提供者的列表。在一个真实的手持设备中,这个列表包含了一些GPS服务。我们也可以选择更强大、更精确、不带有其他附加服务的GPS。

 

 

一:创建MapView

定位服务如何在地图上更好的为用户服务

1.Google Map

提供了一组API,方便在英语程序中提供了基于地图的功能,

Android将大部分的地图功能封装在MapView当中

MapView通过GoogleMaps服务取得数据并以地图方式显示出来

MapView提供了一组控件用于地图的控制(放大,缩小......)

 

2.获取Maps API Key

 

3.创建第一个Mapview

创建项目 选择google APIs:

创建模拟器:选择Target:Googel APIs

 

在AndroidManifest.xml文件中添加库及权限设置

<uses-permission android:name="android.permission.INTERNET" /> 根目录:manifest

<uses-library android:name="com.google.android.maps" />根目录:application

 

 

xml:

<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:layout_width="fill_parent"
    	android:layout_height="fill_parent"
    	android:enabled="true"
    	android:clickable="true"
    	android:apiKey="0pkT0EYxPi2VZ5beDaJ0g08aCtWGmKTFnOvj6iw"
    	/>
</LinearLayout>

 

继承MapActivity:

 

public class MainActivity extends MapActivity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }

	@Override
	protected boolean isRouteDisplayed() {
		// TODO Auto-generated method stub
		return false;
	}
   
}

 



 

 

 

二:在地图上进行标记

1.在地图上添加标记

1)在MapView之上创建一个单独的图层

2)创建标记对象

3)将标记显示在指定的图层的指定位置

4)处理点击事件的处理

 



 

 

2.Overlay的使用

一个overlay对象就代表了显示在mapview之上的图层,在一个overlay当中可以包含多个标记;

3.ItemizedOverlay的作用

1)ItemizedOverlay是Overlay的子类

2)在该类当中有一个或者多个OverlayItem

3)每一个OverlayItem代表一个标记

4.ItemizedOverlay的使用方法

 

<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/mapViewId"
    	android:layout_width="fill_parent"
    	android:layout_height="fill_parent"
    	android:enabled="true"
    	android:clickable="true"
    	android:apiKey="0na4gDfg_3L5BYZfFIsssUlzaxw1NkpuyDxsWsA"
    	/>
</LinearLayout>

 

MainActivity.java

public class MainActivity extends MapActivity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        MapView mapView = (MapView)findViewById(R.id.mapViewId);
        //设置mapView显示用于缩放的工具条
        mapView.setBuiltInZoomControls(true);
        
        Drawable drawable = getResources().getDrawable(R.drawable.index);//图标设置
        FirstOverlay firstOverlay = new FirstOverlay(drawable,this);//创建一个新的overlay
      //创建一个GeoPoint对象,用于通过经纬度指定地图上的一个点
        GeoPoint point = new GeoPoint(19240000,-99120000);
        //创建一个OverlayItem对象,代表图层上的一个标记
        OverlayItem overlayItem = new OverlayItem(point,"hola,mundo!","I'm in china!");
        //将创建好的overlayItem对象添加到创建好的FirstOverlay当中
        firstOverlay.addOverlay(overlayItem);
        //调用MapView对象的getOverlays(),得到所有的图层对象
        List<Overlay> mapOverlays = mapView.getOverlays();
        //将创建好的FirstOverlay对象添加到MapOverlay当中
        mapOverlays.add(firstOverlay);
    }

	@Override
	protected boolean isRouteDisplayed() {
		// TODO Auto-generated method stub
		return false;
	}
}

  

Firstoverlay.java

 

/**
 * 在MapView之上创建一个图层,需要创建一个类,实现Overlay,
 * 并生成该类的对象,然后将该对象添加到MapView.getOverlays()中;
 * 一个overlayItem对象就代表了一个在地图上显示的标记
 */
public class FirstOverlay extends ItemizedOverlay<OverlayItem>{
	//创建一个List对象,用于持有该图层当中所有的标记对象
	private ArrayList<OverlayItem> overlayItems = new ArrayList<OverlayItem>();
	private Context context;
	
	public FirstOverlay(Drawable defaultMaker) {
		super(boundCenter(defaultMaker));
	}
	
   // 指定标记所使用的默认图片
	public FirstOverlay(Drawable defaultMaker,Context context) {
		//boundCenter(defaultMaker):将要标记的经纬度点放在defaultMaker的正下方
		//必须调用弗雷的构造函数
		super(boundCenter(defaultMaker));
		this.context = context;
	}
	
	//用于将生成好的overlayItem对象添加到List当中
	public void addOverlay(OverlayItem overlayItem){
		overlayItems.add(overlayItem);
		//为新添加进来的overlayItem统一执行相关的操作,
		//有新的overlayItem进来时,在调用其他函数前要先调用populate()
		populate();
	}
	
	//用于创建一个OverlayItem对象
	@Override
	protected OverlayItem createItem(int i) {
		// TODO Auto-generated method stub
		return overlayItems.get(i);
	}

	//返回当前的Overlay当中所包含的overlayItem对象
	@Override
	public int size() {
		// TODO Auto-generated method stub
		return overlayItems.size();
	}
	
	//当用户点击标记执行的操作
	@Override
	public boolean onTap(int index) {//点击了index表示的标记
		OverlayItem item = overlayItems.get(index);
		AlertDialog.Builder builder = new AlertDialog.Builder(context);//新弹出框
		builder.setTitle(item.getTitle());
		builder.setMessage(item.getSnippet());
		Dialog dialog = builder.create();
		dialog.show();
		return true;
	}

}

 

三:在overlay上面绘制一条直线

 

1.project的作用

地理坐标<------->屏幕坐标
topixles()      经纬度---->屏幕坐标

frompixles()  屏幕坐标----->经纬度

2.在Google Map上绘制直线的方法

确定线路的起始位置的经纬度坐标

在起点终点绘制图标

经纬度坐标转换为屏幕的X,Y坐标

在起点和终点之间绘制路线

 

 

<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/mapViewId"
    	android:layout_width="fill_parent"
    	android:layout_height="fill_parent"
    	android:enabled="true"
    	android:clickable="true"
    	android:apiKey="0na4gDfg_3L5BYZfFIsssUlzaxw1NkpuyDxsWsA"
    	/>
</LinearLayout>

  

 

MainActivity.java

public class MainActivity extends MapActivity {
	private Projection projection;
	private List<Overlay> overlays;
	private MapController mapController;
	private GeoPoint beginGeoPoint;
	private GeoPoint endGeoPoint;
	
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        //创建起点和终点的GeoPoint对象
        beginGeoPoint = new GeoPoint(19240000,-99120000);
        endGeoPoint = new GeoPoint(19340000,-99220000);
        //得到mapView对象
        MapView mapView = (MapView)findViewById(R.id.mapViewId);
        mapView.setBuiltInZoomControls(true); //放大缩小工具条
        
        //mapController主要用于对地图进行控制
        mapController = mapView.getController();
        overlays = mapView.getOverlays();
        projection = mapView.getProjection();
        
        //把pointOverlay对象添加到List<overlay>中
        overlays.add(new PointOverlay(beginGeoPoint));
        //把pointOverlay对象添加到List<overlay>中
        overlays.add(new PointOverlay(endGeoPoint));
        //把lineOverlay添加到List<overlay>中
        overlays.add(new LineOverlay(beginGeoPoint,endGeoPoint));
        
        
        //将地图以动画的形式移动到指定的点
        mapController.animateTo(beginGeoPoint);
        //设置地图的放大级别
        mapController.setZoom(12);
    }
    

	@Override
	protected boolean isRouteDisplayed() 
	{
		// TODO Auto-generated method stub
		return false;
	}
	
	//内部类,该类的对象的作用是在地图上绘制图标
	class PointOverlay extends Overlay
	{
		private GeoPoint geoPoint;
		public PointOverlay(){	}
		public PointOverlay(GeoPoint geoPoint){
			this.geoPoint = geoPoint;
		}
		public void draw(Canvas canvas,MapView mapView,boolean shadow){
			super.draw(canvas, mapView, shadow);
			
			Point point = new Point();
			//将geoPoint转换为屏幕上的X、Y轴坐标
			projection.toPixels(geoPoint, point);
			//设置图标
			Bitmap bmp = BitmapFactory.decodeResource(getResources(),R.drawable.tool);
			Paint paint = new Paint();//新建一个画笔对象
			//Y轴-30是为了调整图片的显示位置(默认是讲图片的左上角对应到经纬度点)
			canvas.drawBitmap(bmp,point.x,point.y-30,paint);
		}
	}
	
	//内部类,在起点和终点间画路线层
	class LineOverlay extends Overlay
	{
		private GeoPoint begin;
		private GeoPoint end;
		public LineOverlay(){}
		public LineOverlay(GeoPoint begin,GeoPoint end){
			this.begin = begin;
			this.end = end;
		}
		public void draw(Canvas canvas,MapView mapView,boolean shadow)
		{
			super.draw(canvas, mapView, shadow);
			Paint paint = new Paint();
			paint.setColor(Color.BLUE);
			//设置线条的样式(填满的空心线)
			paint.setStyle(Paint.Style.FILL_AND_STROKE);
			paint.setStrokeWidth(2);
			Point beginPoint = new Point();
			Point endPoint = new Point();
			Path path = new Path();
			projection.toPixels(begin,beginPoint);
			projection.toPixels(end,endPoint);
			//指定划线的起始点
			path.moveTo(beginPoint.x,beginPoint.y);
			//指定划线的终点
			path.lineTo(endPoint.x,endPoint.y);
			canvas.drawPath(path,paint);
		}
	}
}

 

 

 

  • 大小: 549.4 KB
  • 大小: 16.7 KB
分享到:
评论

相关推荐

    googleMap根据经纬度获取地理位置

    首先,`googleMap根据经纬度获取地理位置`这个标题涉及到的核心技术是Google Maps Geocoding服务。Geocoding是将地址或坐标(经纬度)转换为地理坐标的过程,反之亦然。在Google Maps API中,我们可以使用Geocoding ...

    谷歌地图GoogleMap

    Google Map API(Application Programming Interface)则是谷歌为开发者提供的接口,允许他们将谷歌地图的功能集成到自己的网站或应用中,提供丰富的地图定制和交互能力。 一、Google Map API基础 Google Map API...

    GoogleMap谷歌地图demo

    在IT行业中,GoogleMap是一个广泛使用的地图服务,它提供了丰富的API接口,允许开发者在其应用程序中集成地图功能。本文将深入探讨GoogleMap谷歌地图API的使用,以及如何通过它实现一个全面的地图工具。 首先,让...

    google map应用实例

    在IT领域,Google Map是一款广泛使用的在线地图服务,它提供了丰富的功能,如定位、导航、路线规划、街景查看等。本应用实例将探讨如何利用Google Map API在离线环境中实现地图服务,这对于那些网络不稳定或者需要在...

    Ext Google Map 简易开发框架

    Ext Google Map简易开发框架是一种将流行的JavaScript库ExtJs与Google Maps API相结合的开发方式,用于构建功能丰富的地理信息系统。这个框架允许开发者轻松地在网页上展示地图,管理地图图层,控制图层的可见性,...

    Google Map API 使用示例

    Google Map API 是一款强大的工具,它允许开发者在自己的网站或应用程序中嵌入地图功能,提供定位、导航、地理编码、路线规划等多种服务。本示例将深入探讨如何使用 Google Map API,帮助你理解和掌握其核心概念及...

    谷歌地图Google Map API V3中文开发文档

    谷歌地图 Google Map API V3 中文开发文档 谷歌地图 Google Map API V3 中文开发文档是 Google 公司提供的一种基于 Web 的地图应用程序接口,允许开发者在自己的网站或应用程序中嵌入谷歌地图,以提供地图检索、...

    稻歌Google Map截获器V1.1版安装程序

    【标题】"稻歌Google Map截获器V1.1版安装程序"涉及的主要知识点是利用第三方工具获取和处理Google Map的卫星影像数据。这款软件主要用于帮助用户抓取并保存Google Maps上的卫星图像,以便离线查看或者进行特定分析...

    C++调用GOOGLEMAP代码

    标题 "C++调用GOOGLEMAP代码" 涉及到的是在C++程序中集成和使用Google Maps API的技术。Google Maps API是一个强大的工具,允许开发者在他们的应用程序中嵌入地图、路线规划、地理编码(地址转经纬度)等功能。在C++...

    Google Map MarkerCluster使用簡介

    Google Map MarkerCluster 使用簡介 Google Map MarkerCluster 是 Google Map API 中的一個功能強大且實用的工具,它可以幫助開發者快速實現地圖標記的聚合功能。下面是 MarkerCluster 的使用簡介: MarkerCluster...

    GoogleMap控件下载

    **GoogleMap控件详解** GoogleMap控件是一个用于集成谷歌地图功能到应用程序中的开源组件,尤其在Web开发中被广泛使用。它允许开发者在自己的应用界面中嵌入实时、交互式的地图服务,提供定位、导航、地理编码、...

    Google map 轨迹回放

    利用google map实现轨迹回放利用google map实现轨迹回放

    google map v2 Demo

    public void onMapReady(GoogleMap googleMap) { // 在这里,你可以对地图进行各种定制,如添加标记、路径等 GoogleMap map = googleMap; map.getUiSettings().setZoomControlsEnabled(true); map....

    最新版的稻歌,截取下载googlemap地图

    【标题】:“最新版的稻歌,截取下载googlemap地图” 这个标题提及的是一个名为“稻歌”的软件的新版本,特别设计用于截取并下载谷歌地图(Google Map)的内容。"稻歌"是一个工具,它允许用户捕获地图图像,并可能...

    vue2googlemap基于Vue2x和google地图组件

    Vue2googlemap是一个专门为Vue 2.x框架设计的插件,它允许开发者在Vue应用中无缝集成Google Maps API。这个插件将Google Maps的强大功能与Vue的声明式渲染相结合,为开发者提供了更方便的方式来创建交互式的地图应用...

    基于Google Map API的简单地图

    在IT行业中,Google Map API是一个强大的工具,它允许开发者集成地图功能到他们的应用程序中,提供丰富的地理定位服务。本文将详细解析如何利用Google Map API实现"基于Google Map API的简单地图"的功能,包括显示...

    googleMap_谷歌地图

    googleMap__谷歌___地图_.ppt

    Google map 离线调试

    在IT行业中,Google Map是一个广泛使用的在线地图服务,它提供了丰富的地理位置信息,包括路线规划、卫星图像、街景视图等功能。然而,在某些情况下,如网络环境不稳定或无网络连接时,离线调试Google Map就显得尤为...

    手机地图-GoogleMap(For S60第三版)

    《手机地图应用:GoogleMap(For S60第三版)深度解析》 手机地图作为现代生活中不可或缺的一部分,为我们的出行提供了极大的便利。GoogleMap作为全球知名的在线地图服务,其手机版在移动设备上同样表现出色,尤其...

    google map 谷歌地图joomla!插件

    内容中插入地图的短代码或标签,例如,在文章中插入`{googlemap}`,然后指定相关坐标,即可在文章中生成地图。 6. **兼容性**:此插件适用于Joomla! 1.0x和1.5+版本,这意味着它可能不兼容较新的Joomla!版本。随着...

Global site tag (gtag.js) - Google Analytics