- 浏览: 1364018 次
- 性别:
- 来自: 陕西.西安
文章分类
最新评论
-
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 1133http://blog.csdn.net/kerenigma/ ... -
Android Framework系列之IMF(二)
2011-06-02 10:09 2143InputConnection是IMF里面一个重要的接口,他是 ... -
Android Frameworks系列之IMF(一)
2011-06-02 10:03 1840http://www.pin5i.com/showtopic- ... -
Android线程优先级设置方法
2011-05-28 14:15 3488http://blog.sina.com.cn/s/blog_ ... -
如何连接android数据库
2011-05-27 15:18 2199http://zhidao.baidu.com/questio ... -
ensureCapacity()方法提高ArrayList的初始化速度
2011-05-27 14:33 11491http://www.gznc.edu.cn/yxsz/jjg ... -
java的isAlive 和 join
2011-05-27 13:38 1554join()用于停止当前线程而运行别的线程。 isAli ... -
Linux系统下.ko文件是什么文件?.so文件是什么文件?
2011-05-25 18:55 5390.so 文件是动态链接库文件,相当于 win下的 .dll ... -
使用Geocoder
2011-05-11 10:46 61177.6 使用Geocoder 地理编 ... -
Gallery学习总结--Cache缓存及数据处理流程
2011-05-09 14:21 2150http://hi.baidu.com/%D6%C7%B4%E ... -
关注的网站
2011-04-06 14:37 987http://blog.sina.com.cn/s/blog_ ... -
gallery3d源码学习总结(二)
2011-04-01 10:40 3486http://www.j2megame.com/htm ... -
gallery3d源码学习总结(一)——绘制流程drawFocusItems
2011-04-01 10:14 4822eoe·Android开发者门户 标题: gallery3d ... -
Android 启动过程详解(学习1)
2011-03-31 09:27 2191Android 启动过程详解 http://blog.csd ... -
Android中的WatchDog (2)
2011-03-31 09:11 1037http://wenku.baidu.com/view/09c ... -
Android平台WindowManager运用
2011-03-30 10:00 1782Android平台WindowManager运用 我们A ... -
JPEG Rotation and EXIF Orientation
2011-03-17 14:26 3881http://blog.csdn.net/daisyhd/ar ... -
Android 的动作、广播、类别等标识大全
2011-03-11 10:19 1258Android 的动作、广播、类别等标识大全 Stri ... -
浅析Android MediaProvider之二
2011-03-08 08:27 2622http://www.poemcode.net/2010/01 ... -
Task和Activity相关
2011-02-28 09:21 1517Task和Activity相关 这段时间在做一个项目,发 ...
相关推荐
GPS的应用开发,里面都是详细的代码还有注释 有一下内容: 支持GPS的核心API 获取LocationProvider 获取可用的LocationProvider 通过名称获取指定LocationProvider 根据Criteria获得LocationProvider
DetachedCriteria Criteria 使用方法 非常详细外加练习
介绍了hibernate中 Criteria接口在实际开发过程中的常见使用方法及技巧
本文实例讲述了Android使用criteria选择合适的地理位置服务实现方法。分享给大家供大家参考,具体如下: /* LocationActivity.java * @author octobershiner * 2011 7 24 * SE.HIT * 利用Criteria选择最优的...
安卓GPS应用案例,LocationManager和locationProvider,Criteria
hibernate criteria的使用方法
初学者Android源码,获取Gps定位信息的Android源码实例,通过这个JAVA小项目,你可能学会GPS在Android手机中如何工作,定位和获取GPS等操作,代码中有注释,方便理解学习,部分代码注解: public int InfoType;//...
多种GPS定位方式和定位研究开发心得,提供了百度定位 和 谷歌定位两种方式,基站、wifi、net定位。 google定位代码 package com.javenwong.google_gps; import android.app.Activity;import android.content....
1.3 Android常用开发工具的用法 10 1.3.1 创建、删除和浏览AVD 10 1.3.2 使用Android模拟器 (Emulator) 14 1.3.3 使用DDMS进行调试 15 1.3.4 Android Debug Bridge(ADB) 的用法 16 1.3.5 使用DX...
criteria的相关知识及其介绍,便于java编程中使用criteria进行相关操作。
常用属性和方法 属性和方法 描述 GPS_PROVIDER 静态字符串常量,表明LocationProvider是GPS NETWORK_PROVIDER 静态字符串常量,表明LocationProvider是网络 addGpsStatusListener(GpsStatus.Listener listener) ...
最近在项目中使用 Spring 和 Hibernate 进行开发,有感于 Criteria 比较好用,在查询方法
1.3 Android常用开发工具的用法 10 1.3.1 创建、删除和浏览AVD 10 1.3.2 使用Android模拟器 (Emulator) 14 1.3.3 使用DDMS进行调试 15 1.3.4 Android Debug Bridge(ADB) 的用法 16 1.3.5 使用DX编译Android应用 ...
Hibernate中的Criteria连表查询,包括单表属性查询,多表内连,以及左外连接查询
1.3 Android常用开发工具的用法 10 1.3.1 创建、删除和浏览AVD 10 1.3.2 使用Android模拟器 (Emulator) 14 1.3.3 使用DDMS进行调试 15 1.3.4 Android Debug Bridge(ADB) 的用法 16 1.3.5 使用DX编译Android应用 ...
Android 获取经度 纬度 位置信息,在Android系统的手机上运行后,会显示出纬度和经度信息,具体的方法请参见以下代码: //方法:返回查询条件 public Criteria getCriteria(){ Criteria c = new Criteria(); ...
该代码简洁明了,能够实现获取LocationProvider的功能,且有相应的注释,易于读者理解。
gps定位,实测可用. 第一个是网络定位,第二个是GPS定位,第三个是直接取缓存。LocationManager本身提供了选择最好的provider的方法: // 获取最好的定位方式 String provider = locationManager....