- 浏览: 52289 次
最新评论
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); } } }
发表评论
-
anddroid 程序发布
2012-10-07 11:15 728右击项目文件,选择Export 选择保存密钥 ... -
Map操作总结
2012-10-04 12:30 738设置mapView显示用于缩放的工具条 ... -
定位(5):代替Geocoder
2012-09-29 19:41 1288https://developers.google.com/m ... -
HttpClient工具类
2012-10-01 12:08 727在Android开发中我们经常会用到网络连接功能与服务器进行数 ... -
定位(4)
2012-09-29 22:12 6901.Geocoding介绍 是google的所提供的一项服务 ... -
定位(3:)追踪用户的位置
2012-09-27 21:01 513追踪用户的位置:得到用户移动的轨迹 注册权限: &l ... -
定位(2):选择最好的provider
2012-09-27 20:43 12161.获取最佳的Location Provider GPS ... -
定位(1):获取位置
2012-09-27 17:21 6191.User Location能做什么? 获取用户的位置;3 ... -
错误总结
2012-09-26 21:22 735重启adb: 使用ADB工具,运行CMD,敲入如下命令 ... -
(九)菜单
2012-09-26 20:11 827menu键触发 三种形式:普通的option menu;上下 ... -
(八)按钮控件
2012-09-25 22:26 1051监听器: 监听器 方法 内容 OnCli ... -
(七)常用控件:TextView EditView
2012-09-25 19:50 1002TextView 布局: <TextView ... -
(六)界面优化
2012-09-24 20:22 479<merge/><include/><viewstub/> -
(五)层级管理器
2012-09-24 20:18 704android-sdk-windows\tools 目录下打 ... -
(四)布局
2012-09-24 17:46 704padding:描述控件里面的内容与控件的关机,内边距;有四个 ... -
(三)Activity生命周期
2012-09-24 17:04 807新的activity启动后,前一个activity ... -
(二)程序调试
2012-09-24 15:26 697一:LOG 的用法: package com.ex ... -
(一)开发环境搭建
2012-09-16 20:31 611最近半个月时间看得头都疼了,不喜欢天天对着电脑,但是肿么办呢, ... -
安卓SDK无法下载Package
2012-09-16 18:55 814打开目录: 用记事本打开:hosts ...
相关推荐
首先,`googleMap根据经纬度获取地理位置`这个标题涉及到的核心技术是Google Maps Geocoding服务。Geocoding是将地址或坐标(经纬度)转换为地理坐标的过程,反之亦然。在Google Maps API中,我们可以使用Geocoding ...
Google Map API(Application Programming Interface)则是谷歌为开发者提供的接口,允许他们将谷歌地图的功能集成到自己的网站或应用中,提供丰富的地图定制和交互能力。 一、Google Map API基础 Google Map API...
在IT行业中,GoogleMap是一个广泛使用的地图服务,它提供了丰富的API接口,允许开发者在其应用程序中集成地图功能。本文将深入探讨GoogleMap谷歌地图API的使用,以及如何通过它实现一个全面的地图工具。 首先,让...
在IT领域,Google Map是一款广泛使用的在线地图服务,它提供了丰富的功能,如定位、导航、路线规划、街景查看等。本应用实例将探讨如何利用Google Map API在离线环境中实现地图服务,这对于那些网络不稳定或者需要在...
Ext Google Map简易开发框架是一种将流行的JavaScript库ExtJs与Google Maps API相结合的开发方式,用于构建功能丰富的地理信息系统。这个框架允许开发者轻松地在网页上展示地图,管理地图图层,控制图层的可见性,...
Google Map API 是一款强大的工具,它允许开发者在自己的网站或应用程序中嵌入地图功能,提供定位、导航、地理编码、路线规划等多种服务。本示例将深入探讨如何使用 Google Map API,帮助你理解和掌握其核心概念及...
谷歌地图 Google Map API V3 中文开发文档 谷歌地图 Google Map API V3 中文开发文档是 Google 公司提供的一种基于 Web 的地图应用程序接口,允许开发者在自己的网站或应用程序中嵌入谷歌地图,以提供地图检索、...
【标题】"稻歌Google Map截获器V1.1版安装程序"涉及的主要知识点是利用第三方工具获取和处理Google Map的卫星影像数据。这款软件主要用于帮助用户抓取并保存Google Maps上的卫星图像,以便离线查看或者进行特定分析...
标题 "C++调用GOOGLEMAP代码" 涉及到的是在C++程序中集成和使用Google Maps API的技术。Google Maps API是一个强大的工具,允许开发者在他们的应用程序中嵌入地图、路线规划、地理编码(地址转经纬度)等功能。在C++...
Google Map MarkerCluster 使用簡介 Google Map MarkerCluster 是 Google Map API 中的一個功能強大且實用的工具,它可以幫助開發者快速實現地圖標記的聚合功能。下面是 MarkerCluster 的使用簡介: MarkerCluster...
**GoogleMap控件详解** GoogleMap控件是一个用于集成谷歌地图功能到应用程序中的开源组件,尤其在Web开发中被广泛使用。它允许开发者在自己的应用界面中嵌入实时、交互式的地图服务,提供定位、导航、地理编码、...
利用google map实现轨迹回放利用google map实现轨迹回放
public void onMapReady(GoogleMap googleMap) { // 在这里,你可以对地图进行各种定制,如添加标记、路径等 GoogleMap map = googleMap; map.getUiSettings().setZoomControlsEnabled(true); map....
【标题】:“最新版的稻歌,截取下载googlemap地图” 这个标题提及的是一个名为“稻歌”的软件的新版本,特别设计用于截取并下载谷歌地图(Google Map)的内容。"稻歌"是一个工具,它允许用户捕获地图图像,并可能...
Vue2googlemap是一个专门为Vue 2.x框架设计的插件,它允许开发者在Vue应用中无缝集成Google Maps API。这个插件将Google Maps的强大功能与Vue的声明式渲染相结合,为开发者提供了更方便的方式来创建交互式的地图应用...
在IT行业中,Google Map API是一个强大的工具,它允许开发者集成地图功能到他们的应用程序中,提供丰富的地理定位服务。本文将详细解析如何利用Google Map API实现"基于Google Map API的简单地图"的功能,包括显示...
googleMap__谷歌___地图_.ppt
在IT行业中,Google Map是一个广泛使用的在线地图服务,它提供了丰富的地理位置信息,包括路线规划、卫星图像、街景视图等功能。然而,在某些情况下,如网络环境不稳定或无网络连接时,离线调试Google Map就显得尤为...
《手机地图应用:GoogleMap(For S60第三版)深度解析》 手机地图作为现代生活中不可或缺的一部分,为我们的出行提供了极大的便利。GoogleMap作为全球知名的在线地图服务,其手机版在移动设备上同样表现出色,尤其...
内容中插入地图的短代码或标签,例如,在文章中插入`{googlemap}`,然后指定相关坐标,即可在文章中生成地图。 6. **兼容性**:此插件适用于Joomla! 1.0x和1.5+版本,这意味着它可能不兼容较新的Joomla!版本。随着...