- 浏览: 1382346 次
- 性别:
- 来自: 陕西.西安
文章分类
最新评论
-
dare_:
经过试验 设置之后反而更慢没有调用ensureCapacity ...
ensureCapacity()方法提高ArrayList的初始化速度 -
wangchao9053:
[flash=200,200][url][img][list] ...
Only the original thread that created a view hierarchy can touch its views的相关 -
cyb504:
考虑将rb文件代码隐藏:我先使用命令jrubyc将所有rb文件 ...
Ruby学习十 JRuby中调用java代码 -
4562xse3460:
大哥,您这个写反了,差点误导我,我觉得看着就不对。百度第一条就 ...
portrait表示纵向,landscape表示横向 -
yin138:
portrait是肖像画,即竖屏,landscape是风景画, ...
portrait表示纵向,landscape表示横向
GPS开发常用方法 和用Criteria确定android location providerGPS开发常用方法
取得LocationProvider
- public void getLocationProvider()
- {
- try
- {
- Criteria mCriteria01 = new Criteria();
- mCriteria01.setAccuracy(Criteria.ACCURACY_FINE);
- mCriteria01.setAltitudeRequired(false);
- mCriteria01.setBearingRequired(false);
- mCriteria01.setCostAllowed(true);
- mCriteria01.setPowerRequirement(Criteria.POWER_LOW);
- strLocationProvider =
- mLocationManager01.getBestProvider(mCriteria01, true);
- mLocation01 = mLocationManager01.getLastKnownLocation
- (strLocationProvider);
- }
- catch(Exception e)
- {
- mTextView01.setText(e.toString());
- e.printStackTrace();
- }
- }
public void getLocationProvider() { try { Criteria mCriteria01 = new Criteria(); mCriteria01.setAccuracy(Criteria.ACCURACY_FINE); mCriteria01.setAltitudeRequired(false); mCriteria01.setBearingRequired(false); mCriteria01.setCostAllowed(true); mCriteria01.setPowerRequirement(Criteria.POWER_LOW); strLocationProvider = mLocationManager01.getBestProvider(mCriteria01, true); mLocation01 = mLocationManager01.getLastKnownLocation (strLocationProvider); } catch(Exception e) { mTextView01.setText(e.toString()); e.printStackTrace(); } }
获取经纬度,并返回GeoPoint对象
- private GeoPoint getGeoByLocation(Location location)
- {
- GeoPoint gp = null;
- try
- {
- /* 当Location存在 */
- if (location != null)
- {
- double geoLatitude = location.getLatitude()*1E6;
- double geoLongitude = location.getLongitude()*1E6;
- gp = new GeoPoint((int) geoLatitude, (int) geoLongitude);
- }
- }
- catch(Exception e)
- {
- e.printStackTrace();
- }
- return gp;
- }
private GeoPoint getGeoByLocation(Location location) { GeoPoint gp = null; try { /* 当Location存在 */ if (location != null) { double geoLatitude = location.getLatitude()*1E6; double geoLongitude = location.getLongitude()*1E6; gp = new GeoPoint((int) geoLatitude, (int) geoLongitude); } } catch(Exception e) { e.printStackTrace(); } return gp; }
将经纬度转换成实际屏幕坐标
- Point myScreenCoords = new Point();
- GeoPoint tmpGeoPoint = new GeoPoint((int)(mLocation.getLatitude()*1E6),(int)(mLocation.getLongitude()*1E6));
- mapView.getProjection().toPixels(tmpGeoPoint, myScreenCoords);
Point myScreenCoords = new Point(); GeoPoint tmpGeoPoint = new GeoPoint((int)(mLocation.getLatitude()*1E6),(int)(mLocation.getLongitude()*1E6)); mapView.getProjection().toPixels(tmpGeoPoint, myScreenCoords);
点击MapView任意一点获得坐标
- @Override
- public boolean onTouchEvent(MotionEvent ev) {
- int actionType = ev.getAction();
- switch (actionType) {
- case MotionEvent.ACTION_UP:
- Projection proj = mapView.getProjection();
- GeoPoint loc = proj.fromPixels((int)arg0.getX(), (int)arg0.getY());
- String sirina=Double.toString(loc.getLongitudeE6()/1000000);
- String dolzina=Double.toString(loc.getLatitudeE6()/1000000);
- }
- return false;
- }
@Override public boolean onTouchEvent(MotionEvent ev) { int actionType = ev.getAction(); switch (actionType) { case MotionEvent.ACTION_UP: Projection proj = mapView.getProjection(); GeoPoint loc = proj.fromPixels((int)arg0.getX(), (int)arg0.getY()); String sirina=Double.toString(loc.getLongitudeE6()/1000000); String dolzina=Double.toString(loc.getLatitudeE6()/1000000); } return false; }
经纬度改变来刷新地图
- public void refreshMapView()
- {
- GeoPoint p = new GeoPoint((int)(dLat* 1E6), (int)(dLng* 1E6));
- mMapView01.displayZoomControls(true);
- /* 将Map的中点移至GeoPoint */
- mMapController01.animateTo(p);
- mMapController01.setZoom(intZoomLevel);
- }
public void refreshMapView() { GeoPoint p = new GeoPoint((int)(dLat* 1E6), (int)(dLng* 1E6)); mMapView01.displayZoomControls(true); /* 将Map的中点移至GeoPoint */ mMapController01.animateTo(p); mMapController01.setZoom(intZoomLevel); }
根据当前的经纬度,获取相关的一些地址信息
- /* 创建Geocoder对象 */
- //根据地理环境来确定编码
- //注意这个Locale是java.util.Locale包的类,获取当前系统设定的语言
- Geocoder gc = new Geocoder
- (EX09_05.this, Locale.getDefault());
- /* 取出地理坐标经纬度 */
- double geoLatitude = (int)gp.getLatitudeE6()/1E6;
- double geoLongitude = (int)gp.getLongitudeE6()/1E6;
- /* 自经纬度取得地址(可能有多行地址) */
- List<Address> lstAddress =
- gc.getFromLocation(geoLatitude, geoLongitude, 1);
- StringBuilder sb = new StringBuilder();
- /* 判断地址是否为多行 */
- if (lstAddress.size() > 0)
- {
- Address adsLocation = lstAddress.get(0);
- for(int i=0;i<adsLocation.getMaxAddressLineIndex();i++)
- {
- sb.append(adsLocation.getAddressLine(i)).append("\n");
- }
- sb.append(adsLocation.getLocality()).append("\n");
- sb.append(adsLocation.getPostalCode()).append("\n");
- sb.append(adsLocation.getCountryName());
- }
/* 创建Geocoder对象 */ //根据地理环境来确定编码 //注意这个Locale是java.util.Locale包的类,获取当前系统设定的语言 Geocoder gc = new Geocoder (EX09_05.this, Locale.getDefault()); /* 取出地理坐标经纬度 */ double geoLatitude = (int)gp.getLatitudeE6()/1E6; double geoLongitude = (int)gp.getLongitudeE6()/1E6; /* 自经纬度取得地址(可能有多行地址) */ List<Address> lstAddress = gc.getFromLocation(geoLatitude, geoLongitude, 1); StringBuilder sb = new StringBuilder(); /* 判断地址是否为多行 */ if (lstAddress.size() > 0) { Address adsLocation = lstAddress.get(0); for(int i=0;i<adsLocation.getMaxAddressLineIndex();i++) { sb.append(adsLocation.getAddressLine(i)).append("\n"); } sb.append(adsLocation.getLocality()).append("\n"); sb.append(adsLocation.getPostalCode()).append("\n"); sb.append(adsLocation.getCountryName()); }
根据输入地址,取得其GeoPoint对象
- private GeoPoint getGeoByAddress(String strSearchAddress)
- {
- GeoPoint gp = null;
- try
- {
- if(strSearchAddress!="")
- {
- Geocoder mGeocoder01 = new Geocoder
- (EX09_07.this, Locale.getDefault());
- List<Address> lstAddress = mGeocoder01.getFromLocationName
- (strSearchAddress, 1);
- if (!lstAddress.isEmpty())
- {
- Address adsLocation = lstAddress.get(0);
- double geoLatitude = adsLocation.getLatitude()*1E6;
- double geoLongitude = adsLocation.getLongitude()*1E6;
- gp = new GeoPoint((int) geoLatitude, (int) geoLongitude);
- }
- }
- }
- catch (Exception e)
- {
- e.printStackTrace();
- }
- return gp;
- }
private GeoPoint getGeoByAddress(String strSearchAddress) { GeoPoint gp = null; try { if(strSearchAddress!="") { Geocoder mGeocoder01 = new Geocoder (EX09_07.this, Locale.getDefault()); List<Address> lstAddress = mGeocoder01.getFromLocationName (strSearchAddress, 1); if (!lstAddress.isEmpty()) { Address adsLocation = lstAddress.get(0); double geoLatitude = adsLocation.getLatitude()*1E6; double geoLongitude = adsLocation.getLongitude()*1E6; gp = new GeoPoint((int) geoLatitude, (int) geoLongitude); } } } catch (Exception e) { e.printStackTrace(); } return gp; }
地图放大缩小按钮
- /* 放大Map的Button */
- mButton02 = (Button)findViewById(R.id.myButton2);
- mButton02.setOnClickListener(new Button.OnClickListener()
- {
- public void onClick(View v)
- {
- intZoomLevel++;
- if(intZoomLevel>mMapView01.getMaxZoomLevel())
- {
- intZoomLevel = mMapView01.getMaxZoomLevel();
- }
- mMapController01.setZoom(intZoomLevel);
- }
- });
- /* 缩小Map的Button */
- mButton03 = (Button)findViewById(R.id.myButton3);
- mButton03.setOnClickListener(new Button.OnClickListener()
- {
- public void onClick(View v)
- {
- intZoomLevel--;
- if(intZoomLevel<1)
- {
- intZoomLevel = 1;
- }
- mMapController01.setZoom(intZoomLevel);
- }
- });
/* 放大Map的Button */ mButton02 = (Button)findViewById(R.id.myButton2); mButton02.setOnClickListener(new Button.OnClickListener() { public void onClick(View v) { intZoomLevel++; if(intZoomLevel>mMapView01.getMaxZoomLevel()) { intZoomLevel = mMapView01.getMaxZoomLevel(); } mMapController01.setZoom(intZoomLevel); } }); /* 缩小Map的Button */ mButton03 = (Button)findViewById(R.id.myButton3); mButton03.setOnClickListener(new Button.OnClickListener() { public void onClick(View v) { intZoomLevel--; if(intZoomLevel<1) { intZoomLevel = 1; } mMapController01.setZoom(intZoomLevel); } });
以下文章转载:http://marshal.easymorse.com/archives/2528
android location provider有两个:
* LocationManager.GPS_PROVIDER:GPS,精度比较高,但是慢而且消耗电力,而且可能因为天气原因或者障碍物而无法获取卫星信息,另外设备可能没有GPS模块;
* LocationManager.NETWORK_PROVIDER:通过网络获取定位信息,精度低,耗电少,获取信息速度较快,不依赖GPS模块。
为了程序的通用性,希望动态选择location provider。对android通过Location API显示地址信息做了个别改动,可以看到使用了gps定位,精度较高:
这里使用到了Criteria,可根据当前设备情况自动选择哪种location provider。见
- LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
- Criteria criteria = new Criteria();
- criteria.setAccuracy(Criteria.ACCURACY_FINE);// 设置为最大精度
- criteria.setAltitudeRequired(false);//不要求海拔信息
- criteria.setBearingRequired(false);// 不要求方位信息
- criteria.setCostAllowed(true);//是否允许付费
- criteria.setPowerRequirement(Criteria.POWER_LOW);// 对电量的要求
- location = locationManager
- .getLastKnownLocation(locationManager.getBestProvider(criteria, true));
LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); Criteria criteria = new Criteria(); criteria.setAccuracy(Criteria.ACCURACY_FINE);// 设置为最大精度 criteria.setAltitudeRequired(false);//不要求海拔信息 criteria.setBearingRequired(false);// 不要求方位信息 criteria.setCostAllowed(true);//是否允许付费 criteria.setPowerRequirement(Criteria.POWER_LOW);// 对电量的要求 location = locationManager .getLastKnownLocation(locationManager.getBestProvider(criteria, true));
原来的写法很简单:
- LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
- location=locationManager.getLastKnownLocation(LocationManager.NETWORK
LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); location=locationManager.getLastKnownLocation(LocationManager.NETWORK)
http://qq361119908.iteye.com/blog/665074
发表评论
-
Android检查是否已经连接到网络
2012-05-14 15:40 1234http://blog.csdn.net/kerenigma/ ... -
Android Framework系列之IMF(二)
2011-06-02 10:09 2194InputConnection是IMF里面一个重要的接口,他是 ... -
Android Frameworks系列之IMF(一)
2011-06-02 10:03 1877http://www.pin5i.com/showtopic- ... -
Android线程优先级设置方法
2011-05-28 14:15 3540http://blog.sina.com.cn/s/blog_ ... -
如何连接android数据库
2011-05-27 15:18 2290http://zhidao.baidu.com/questio ... -
ensureCapacity()方法提高ArrayList的初始化速度
2011-05-27 14:33 11555http://www.gznc.edu.cn/yxsz/jjg ... -
java的isAlive 和 join
2011-05-27 13:38 1592join()用于停止当前线程而运行别的线程。 isAli ... -
Linux系统下.ko文件是什么文件?.so文件是什么文件?
2011-05-25 18:55 5564.so 文件是动态链接库文件,相当于 win下的 .dll ... -
使用Geocoder
2011-05-11 10:46 61937.6 使用Geocoder 地理编 ... -
Gallery学习总结--Cache缓存及数据处理流程
2011-05-09 14:21 2195http://hi.baidu.com/%D6%C7%B4%E ... -
关注的网站
2011-04-06 14:37 1047http://blog.sina.com.cn/s/blog_ ... -
gallery3d源码学习总结(二)
2011-04-01 10:40 3531http://www.j2megame.com/htm ... -
gallery3d源码学习总结(一)——绘制流程drawFocusItems
2011-04-01 10:14 4927eoe·Android开发者门户 标题: gallery3d ... -
Android 启动过程详解(学习1)
2011-03-31 09:27 2237Android 启动过程详解 http://blog.csd ... -
Android中的WatchDog (2)
2011-03-31 09:11 1083http://wenku.baidu.com/view/09c ... -
Android平台WindowManager运用
2011-03-30 10:00 1812Android平台WindowManager运用 我们A ... -
JPEG Rotation and EXIF Orientation
2011-03-17 14:26 3917http://blog.csdn.net/daisyhd/ar ... -
Android 的动作、广播、类别等标识大全
2011-03-11 10:19 1317Android 的动作、广播、类别等标识大全 Stri ... -
浅析Android MediaProvider之二
2011-03-08 08:27 2674http://www.poemcode.net/2010/01 ... -
Task和Activity相关
2011-02-28 09:21 1561Task和Activity相关 这段时间在做一个项目,发 ...
相关推荐
本论文研究了基于Android平台的GPS开发,介绍了Android平台提供的与GPS开发相关的类和接口,分析了GPS相关程序开发的基本步骤,对同类的研究有一定的参考意义。 一、GPS原理 GPS技术起源于美国军方,其英文全称为...
在Android开发中,实现GPS定位服务是移动应用中常见的需求,尤其对于地理位置相关的应用来说至关重要。本篇文章将探讨如何在Android环境下实现这一功能,并提供必要的步骤和代码示例。 首先,要启用GPS定位服务,...
Android GPS 定位的实现需要添加权限、判断 GPS 模块是否存在或者是开启、获取位置信息和显示位置信息四个步骤。通过使用 Google 地图,Android 平台可以实现 GPS 定位服务,满足各种定位需求。
Android系统提供了多种LocationProvider,如GPS(全球定位系统)和Network Provider(网络定位),它们分别通过卫星信号和移动网络来获取位置信息。 Criteria类是Android API提供的一种方式,用于定义我们对定位...
GPS的应用开发,里面都是详细的代码还有注释 有一下内容: 支持GPS的核心API 获取LocationProvider 获取可用的LocationProvider 通过名称获取指定LocationProvider 根据Criteria获得LocationProvider
首先,要使用Android的GPS服务,必须在应用的`AndroidManifest.xml`文件中声明相应的权限。这是通过添加以下代码行来实现的: ```xml <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"> `...
开发Android GPS应用时,理解如何有效地利用`LocationManager`、`locationProvider`和`Criteria`是至关重要的。这不仅涉及到获取和处理位置数据,还包括优化用户体验,如平衡位置更新的频率和精度与电池寿命之间的...
在安卓开发中,GPS定位是实现移动应用地理位置功能的关键技术。Android系统提供了丰富的API来支持开发者获取设备的精确位置信息,这些API主要集中在`android.location`包中。本教程将深入探讨如何在Android应用程序...
以下将详细介绍在Android地图开发中常用的几个关键类: 1. **MapController类** MapController是控制地图行为的核心类,它可以移动、缩放地图,并设置地图的中心点。例如,`animateTo(GeoPoint point)`方法可以使...
在Android开发中,GPS定位是移动应用中常用的功能,用于获取用户的精确位置信息。以下是对Android GPS定位实现的详细解释: 1. **权限设置**: 在Android应用中使用GPS定位服务前,必须在`AndroidManifest.xml`...
在Android平台上,获取地理位置信息是移动应用开发中的常见需求。为了选择最佳的地理位置服务,Android提供了`Criteria`类,帮助开发者根据特定需求筛选最合适的定位服务。本篇将深入讲解如何利用`Criteria`来实现这...
【Android手机GPS定位开发】 Android系统为开发者提供了强大的地理定位服务API,允许应用程序获取设备的实时地理位置信息。这一服务不仅可以实现连续的定位更新,还可以通过Intent接收器在设备进入或离开特定地理...
要实现GPS定位,需要使用Android的Location API,主要涉及到`LocationManager`和`LocationListener`。`LocationManager`服务负责管理各种位置提供者(如GPS和网络定位),`LocationListener`接口则用于监听位置更新...
在Android平台上,GPS(全球定位系统)的使用是开发者实现位置服务的重要手段。本文将深入探讨如何在Android应用中实现GPS定位功能,并提供一个实际的代码示例。 首先,我们需要理解Android系统的定位框架。Android...