GPS开发常用方法 和用Criteria确定android location providerGPS开发常用方法

2023-11-17

GPS常用方法总结

取得LocationProvider

Java代码
  1. public void getLocationProvider()  
  2. {  
  3. try  
  4. {  
  5. Criteria mCriteria01 = new Criteria();  
  6. mCriteria01.setAccuracy(Criteria.ACCURACY_FINE);  
  7. mCriteria01.setAltitudeRequired(false);  
  8. mCriteria01.setBearingRequired(false);  
  9. mCriteria01.setCostAllowed(true);  
  10. mCriteria01.setPowerRequirement(Criteria.POWER_LOW);  
  11. strLocationProvider =  
  12. mLocationManager01.getBestProvider(mCriteria01, true);  
  13.  
  14. mLocation01 = mLocationManager01.getLastKnownLocation  
  15. (strLocationProvider);  
  16. }  
  17. catch(Exception e)  
  18. {  
  19. mTextView01.setText(e.toString());  
  20. e.printStackTrace();  
  21. }  
  22. }
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对象
Java代码
  1. private GeoPoint getGeoByLocation(Location location) 
  2. GeoPoint gp = null
  3. try
  4. if (location != null
  5. double geoLatitude = location.getLatitude()*1E6; 
  6. double geoLongitude = location.getLongitude()*1E6; 
  7. gp = new GeoPoint((int) geoLatitude, (int) geoLongitude); 
  8. catch(Exception e) 
  9. e.printStackTrace(); 
  10. return gp; 
  11. }
private GeoPoint getGeoByLocation(Location location) { GeoPoint gp = null; try { 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; }

将经纬度转换成实际屏幕坐标
Java代码
  1. Point myScreenCoords = new Point(); 
  2. GeoPoint tmpGeoPoint = new GeoPoint((int)(mLocation.getLatitude()*1E6),(int)(mLocation.getLongitude()*1E6)); 
  3. 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任意一点获得坐标
Java代码
  1. @Override  
  2. public boolean onTouchEvent(MotionEvent ev) {  
  3. int actionType = ev.getAction();  
  4. switch (actionType) {  
  5. case MotionEvent.ACTION_UP:  
  6. Projection proj = mapView.getProjection();  
  7. GeoPoint loc = proj.fromPixels((int)arg0.getX(), (int)arg0.getY());  
  8. String sirina=Double.toString(loc.getLongitudeE6()/1000000);  
  9. String dolzina=Double.toString(loc.getLatitudeE6()/1000000);  
  10.  
  11. }  
  12.  
  13. return false
  14. }
@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; }



经纬度改变来刷新地图
Java代码
  1. public void refreshMapView()  
  2. {  
  3. GeoPoint p = new GeoPoint((int)(dLat* 1E6), (int)(dLng* 1E6));  
  4. mMapView01.displayZoomControls(true); 
  5. mMapController01.animateTo(p);  
  6. mMapController01.setZoom(intZoomLevel);  
  7. }
 public void refreshMapView() { GeoPoint p = new GeoPoint((int)(dLat* 1E6), (int)(dLng* 1E6)); mMapView01.displayZoomControls(true); mMapController01.animateTo(p); mMapController01.setZoom(intZoomLevel); }


根据当前的经纬度,获取相关的一些地址信息
Java代码
  1. //根据地理环境来确定编码
  2. //注意这个Locale是java.util.Locale包的类,获取当前系统设定的语言
  3. Geocoder gc = new Geocoder 
  4. (EX09_05.this, Locale.getDefault()); 
  5.  
  6. double geoLatitude = (int)gp.getLatitudeE6()/1E6; 
  7. double geoLongitude = (int)gp.getLongitudeE6()/1E6; 
  8.  
  9. List<Address> lstAddress =  
  10. gc.getFromLocation(geoLatitude, geoLongitude, 1); 
  11.  
  12. StringBuilder sb = new StringBuilder(); 
  13.  
  14. if (lstAddress.size() > 0
  15. Address adsLocation = lstAddress.get(0); 
  16. for(int i=0;i<adsLocation.getMaxAddressLineIndex();i++) 
  17. sb.append(adsLocation.getAddressLine(i)).append("\n"); 
  18. sb.append(adsLocation.getLocality()).append("\n"); 
  19. sb.append(adsLocation.getPostalCode()).append("\n"); 
  20. sb.append(adsLocation.getCountryName()); 
 //根据地理环境来确定编码 //注意这个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对象
Java代码
  1. private GeoPoint getGeoByAddress(String strSearchAddress)  
  2. {  
  3. GeoPoint gp = null;  
  4. try  
  5. {  
  6. if(strSearchAddress!="")  
  7. {  
  8. Geocoder mGeocoder01 = new Geocoder  
  9. (EX09_07.this, Locale.getDefault());  
  10.  
  11. List<Address> lstAddress = mGeocoder01.getFromLocationName 
  12. (strSearchAddress, 1); 
  13. if (!lstAddress.isEmpty())  
  14. {  
  15. Address adsLocation = lstAddress.get(0);  
  16. double geoLatitude = adsLocation.getLatitude()*1E6;  
  17. double geoLongitude = adsLocation.getLongitude()*1E6;  
  18. gp = new GeoPoint((int) geoLatitude, (int) geoLongitude);  
  19. }  
  20. }  
  21. }  
  22. catch (Exception e)  
  23. {  
  24. e.printStackTrace();  
  25. }  
  26. return gp;  
  27. }
 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; }


地图放大缩小按钮
Java代码
  1. mButton02 = (Button)findViewById(R.id.myButton2);  
  2. mButton02.setOnClickListener(new Button.OnClickListener()  
  3. {  
  4.  
  5. public void onClick(View v)  
  6. {  
  7. intZoomLevel++;  
  8. if(intZoomLevel>mMapView01.getMaxZoomLevel())  
  9. {  
  10. intZoomLevel = mMapView01.getMaxZoomLevel();  
  11. }  
  12. mMapController01.setZoom(intZoomLevel);  
  13. }  
  14. });  
  15.  
  16. mButton03 = (Button)findViewById(R.id.myButton3);  
  17. mButton03.setOnClickListener(new Button.OnClickListener()  
  18. {  
  19.  
  20. public void onClick(View v)  
  21. {  
  22. intZoomLevel--;  
  23. if(intZoomLevel<1)  
  24. {  
  25. intZoomLevel = 1;  
  26. }  
  27. mMapController01.setZoom(intZoomLevel);  
  28. }  
  29. });
 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); } }); 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。见
Java代码
  1. LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
  2. Criteria criteria = new Criteria(); 
  3. criteria.setAccuracy(Criteria.ACCURACY_FINE);// 设置为最大精度
  4. criteria.setAltitudeRequired(false);//不要求海拔信息
  5. criteria.setBearingRequired(false);// 不要求方位信息
  6. criteria.setCostAllowed(true);//是否允许付费
  7. criteria.setPowerRequirement(Criteria.POWER_LOW);// 对电量的要求
  8. location = locationManager 
  9. .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));

原来的写法很简单:
Java代码
  1. LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
  2. location=locationManager.getLastKnownLocation(LocationManager.NETWORK
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

GPS开发常用方法 和用Criteria确定android location providerGPS开发常用方法 的相关文章

随机推荐

  • 各种日志关系

    slf4j是日志的门面 也是会说是日志框架
  • 【Unity开发】Unity获取设备屏幕分辨率

    using UnityEngine using System Collections public class ExampleClass MonoBehaviour void Start Resolution resolutions Scr
  • Vscode ssh远程连接失败解决办法

    问题描述 Vscode 通过remote ssh连接远程ubuntu时出现 192 168 x x has fingerprint SHA256 如下图所示 按照提示选择 continue 然后输入正确密码却显示Permission Den
  • java md5 解密_“实用”的JAVA开发工具类库

    简介 Hutool是一个小而全的Java工具类库 通过静态方法封装 降低相关API的学习成本 提高工作效率 使Java拥有函数式语言般的优雅 让Java语言也可以 甜甜的 Hutool中的工具方法来自于每个用户的精雕细琢 它涵盖了Java开
  • 免费的 AI 代码辅助工具-codeium

    不是标题党 是真免费 几天之前 GitHub 发布了 GitHub Copilot X 这是一款基于 OpenAI 的 GPT 4 模型开发的 AI 代码辅助工具 看介绍应该是和 Microsoft 365 Copilot 很像的产物 属于
  • ChatGLM-6B部署笔记

    前言 本笔记基于ChatGLM 6B开源网站 https github com THUDM ChatGLM 6B 完成ChatGLM的本地部署 首先电脑已经安装python3 10 anaconda pycharm2022 3 如若使用本地
  • Application.targetFrameRate安卓apk上设置帧率问题

    一般游戏为了更好的适配各种机型 会对游戏进行锁帧 就会使用Application targetFrameRate这个方法设置帧率 pc上测试是没问题的 但是安卓机上面测试就会发现 设置的帧率只能在30和60帧两个数值来回跳动 参考了unit
  • 21-angular.merge

    通过从src对象 s 复制自己的可枚举属性到dst 深度扩展了目标对象的dst 您可以指定多个src对象 如果您想保留原始对象 那么可以通过将空对象作为目标来实现 var object angular merge object1 objec
  • 睿智的seq2seq模型1——利用seq2seq模型对数字进行排列

    睿智的seq2seq模型1 利用seq2seq模型对数字进行排列 学习前言 seq2seq简要介绍 利用seq2seq实现数组排序 实现方式 一 对输入格式输出格式进行定义 二 建立神经网络 1 神经网络的输入 2 语义编码c的处理 3 输
  • 【English】十大词性之感叹词(感叹句)

    感叹词 文章目录 感叹词 前言 一 十大高频感叹词 1 1 Oh 表示惊讶 指责 痛苦 称赞 懊恼等 可译为 哦 哎呀 噢 啊 呀 等 1 2 Ah 表示惊奇 高兴 讨厌 懊悔 藐视 威胁等 可译为 呀 啊 等 1 3 come 表示鼓励
  • 海量数据分类 liblinear使用总结

    liblinear使用总结 liblinear是libsvm的线性核的改进版本 专门适用于百万数据量的分类 正好适用于我这次数据挖掘的实验 liblinear用法和libsvm很相似 我是用的是 exe文件 利用python的subproc
  • Oracle安装详细教程

    一 安装教程 安装教程1 安装教程2 假设安装时弹出 microsoft net framework 3 5 提示你需要安装这个 你可以选择直接忽视 关掉弹窗 等待数据库复制 安装时 综合看两个教程 基本满足安装需求 二 安装测试 1 在电
  • Mac os Ventura 关闭 accent方言,长按不能连续输入问题

    Mac os Ventura 关闭 accent方言 长按不能连续输入问题 在之前的osx版本遇到长按开启方言输入 无法连续输入问题时 defaults write g ApplePressAndHoldEnabled bool false
  • Python逻辑判断顺序

    Python逻辑判断是有顺序的 如 while l1 is not None and l2 is not None and l1 val lt l2 val node1 next l1 node1 node1 next l1 l1 next
  • 从零开始,教你如何开发一款自己的 IDEA 插件!

    程序员的成长之路 互联网 程序员 技术 资料共享 关注 阅读本文大概需要 4 分钟 来自 blog csdn net smile 795 article details 125470136 idea插件介绍 作为一枚程序员 平时最常用的id
  • cdn服务器pnk_cdn服务器是什么

    对于cdn我们不陌生 你听过cdn服务器吗 CDN服务器是建立在网络上的内容分发网络 依托布置在各地的边缘服务器 用户可以经过中央渠道的负载平衡 内容分发 调度等功用模块获取附近所需的内容 然后减少网络拥塞 进步用户拜访响应速度和命中率 为
  • 数据结构与算法——线性表的顺序储存结构

    目录 前言 一 顺序储存的定义及储存方式 二 地址计算方法 三 顺序存储结构的插入和删除 3 1 获得元素操作 3 2 插入操作 3 3 删除操作 四 分析插入和删除操作的时间复杂度 五 线性表顺序存储结构的优缺点 前言 在介绍线性表的顺序
  • Windows安装程序遇到错误:0x80240037

    在安装微软的程序时遇到此错误 本例以安装PB的帮助文档为例 解决办法是 第一步 更改安装文件后缀 第二步 Win R执行 第一步 将msu后缀更改为cab 更改后变为 然后将其解压到一个新文件夹 比如cab 解压后的内容为 第二步 WIN
  • Linux与Windows下CMake的安装与编译

    一 背景介绍 CMake 这个名字是 Cross platform Make 的缩写 虽然名字中含有 make 但是CMake和Unix上常见的 make 系统是分开的 而且更为高端 它可与原生建置环境结合使用 例如 make 苹果的Xco
  • GPS开发常用方法 和用Criteria确定android location providerGPS开发常用方法

    GPS常用方法总结 取得LocationProvider Java代码 public void getLocationProvider try Criteria mCriteria01 new Criteria mCriteria01 se