首页 文章 精选 留言 我的

精选列表

搜索[腾讯位置服务],共8127篇文章
优秀的个人博客,低调大师

腾讯位置服务GPS轨迹录制-安卓篇

前言 在地图的使用中,尤其在导航场景下,进行GPS轨迹录制是十分必要并且有用的,本文会对于安卓系统下的轨迹录制部分做一个分享。 系统架构 对于一个GPSRecordSystem(GPS轨迹录制系统)主要分成3个部分:开始录制,录制GPS定位,结束录制并存储,如上图右方所示。在实际应用中,以导航系统为例:(1)在开始导航时(start navi),进行录制工作的相关配置;(2)收到安卓系统的onLocationChanged的callback进行GPSLocation的记录;(3)结束导航(stop navi)时,停止记录并存入文件。 相关代码展示 用到的相关变量 private LocationManager mLocationManager; // 系统locationManager private LocationListener mLocationListener; // 系统locationListener private boolean mIsRecording = false; // 是否正在录制 private List<String> mGpsList; // 记录gps的list private String mRecordFileName; // gps文件名称 开始录制 开始录制一般是在整个系统工作之初,比如在导航场景下,当“开始导航”时,可以开始进行“startRecordLocation” 的配置 public void startRecordLocation(Context context, String fileName) { // 已经在录制中不进行录制 if (mIsRecording) { return; } Toast.makeText(context, "start record location...", Toast.LENGTH_SHORT).show(); // 初始化locationManager和locationListener mLocationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE); mLocationListener = new MyLocationListener(); try { // 添加listener mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, mLocationListener); } catch (SecurityException e) { Toast.makeText(context, "start record location error!!!", Toast.LENGTH_SHORT).show(); Log.e(TAG, "startRecordLocation Exception", e); e.printStackTrace(); } // 记录文件名称,笔者这里使用“realLocationRecord + routeID”形式进行记录 mRecordFileName = fileName; if (!mRecordFileName.endsWith(".gps")) { mRecordFileName += ".gps"; } mIsRecording = true; } 录制中记录轨迹 记录location一般是在获取安卓系统onLocationChanged回调时调用“recordGPSLocation” public void recordGPSLocation(Location location) { if (mIsRecording && location != null) { // 记录location to list mGpsList.add(locationToString(location)); } } locationToString工具方法 驱动导航工作的GPS轨迹点一般要包含以下几个要素,经度,纬度,精度,角度,速度,时间,海拔高度,所以在此记录下,为后期轨迹回放做准备。 private String locationToString(Location location) { StringBuilder sb = new StringBuilder(); long time = System.currentTimeMillis(); String timeStr = gpsDataFormatter.format(new Date(time)); sb.append(location.getLatitude()); sb.append(","); sb.append(location.getLongitude()); sb.append(","); sb.append(location.getAccuracy()); sb.append(","); sb.append(location.getBearing()); sb.append(","); sb.append(location.getSpeed()); sb.append(","); sb.append(timeStr); sb.append(","); sb.append(df.format((double) time / 1000.0)); // sb.append(df.format(System.currentTimeMillis()/1000.0)); // sb.append(df.format(location.getTime()/1000.0)); sb.append(","); sb.append(location.getAltitude()); sb.append("\n"); return sb.toString(); } 结束录制并保存gps文件 结束录制一般作用在整个系统的结尾,例如在导航场景下,“结束导航”时停止录制调用“stopRecordLocation” public void stopRecordLocation(Context context) { Toast.makeText(context, "stop record location, save to file...", Toast.LENGTH_SHORT).show(); // 移除listener mLocationManager.removeUpdates(mLocationListener); String storagePath = StorageUtil.getStoragePath(context); // 存储的路径 String filePath = storagePath + mRecordFileName; saveGPS(filePath); mIsRecording = false; } GPS轨迹存储工具方法 private void saveGPS(String path) { OutputStreamWriter writer = null; try { File outFile = new File(path); File parent = outFile.getParentFile(); if (parent != null && !parent.exists()) { parent.mkdirs(); } OutputStream out = new FileOutputStream(outFile); writer = new OutputStreamWriter(out); for (String line : mGpsList) { writer.write(line); } } catch (Exception e) { Log.e(TAG, "saveGPS Exception", e); e.printStackTrace(); } finally { if (writer != null) { try { writer.flush(); } catch (IOException e) { e.printStackTrace(); Log.e(TAG, "Failed to flush output stream", e); } try { writer.close(); } catch (IOException e) { e.printStackTrace(); Log.e(TAG, "Failed to close output stream", e); } } } } StorageUtil的getStoragePath工具方法 // 存储在跟路径下/TencentMapSDK/navigation private static final String NAVIGATION_PATH = "/tencentmapsdk/navigation"; // getStoragePath工具方法 public static String getStoragePath(Context context) { if (context == null) { return null; } String strFolder; boolean hasSdcard; try { hasSdcard = Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED); } catch (Exception e) { Log.e(TAG, "getStoragePath Exception", e); e.printStackTrace(); hasSdcard = false; } if (!hasSdcard) { strFolder = context.getFilesDir().getPath() + NAVIGATION_PATH; File file = new File(strFolder); if (!file.exists()) { file.mkdirs(); } } else { strFolder = Environment.getExternalStorageDirectory().getPath() + NAVIGATION_PATH; File file = new File(strFolder); if (!file.exists()) { // 目录不存在,创建目录 if (!file.mkdirs()) { strFolder = context.getFilesDir().getPath() + NAVIGATION_PATH; file = new File(strFolder); if (!file.exists()) { file.mkdirs(); } } } else { // 目录存在,创建文件测试是否有权限 try { String newFile = strFolder + "/.test"; File tmpFile = new File(newFile); if (tmpFile.createNewFile()) { tmpFile.delete(); } } catch (IOException e) { e.printStackTrace(); Log.e(TAG, "getStoragePath Exception", e); strFolder = context.getFilesDir().getPath() + NAVIGATION_PATH; file = new File(strFolder); if (!file.exists()) { file.mkdirs(); } } } } return strFolder; } 结果展示 最终存储在了手机目录下的navigation目录 后续工作 后续可以对于录制的gps文件讲解在导航场景下进行轨迹回放的分享

优秀的个人博客,低调大师

腾讯位置服务核心功能与应用场景解析

在出行、物流、零售、政务等行业的数字化进程中,基于位置的服务(LBS,即Location Based Services,指以地理空间数据为支撑、向应用提供定位与空间分析能力的技术体系)正从"辅助功能"演变为底层基础设施。无论是网约车的派单调度、外卖骑手的路径规划,还是城市网格化治理中的地址标准化,都离不开稳定、精准的位置能力。

优秀的个人博客,低调大师

换个角度看蓝牙,物联网时代位置服务的先行者

众所周知,蓝牙通讯技术被广泛的用于智能家居,手机,智能手表等可穿戴产品的通讯中。随着NB-IoT、LoRa及LTE相关技术的相继出现与快速发展,使得蓝牙通讯在物联网生态中的生存空间逐渐被挤压。而与此同时移动互联网生活方式逐步成为主流,各种移动终端应用的诞生,使得室内定位的需求大规模爆发,给蓝牙在内的室内定位技术创造了另一番广阔的天地。 上篇文章室内定位渐成刚需,多种技术已是百家争鸣中,我们简要介绍了随着物联网时代催生的室内不同应用场景的定位需求及相关的技术。接下来我们会逐一分析目前各种不同室内定位技术的工作原理与应用现状及相关企业的盈利模式,及规模化存在的难点。今天主要分析一下蓝牙定位技术。 蓝牙定位基于RSSI(Received Signal Strength Indication,信号场强指示)定位原理。根据定位端的不同,蓝牙定位方式分为终端侧定位和网络侧定位。 终端侧定位系统由终端设备(如嵌入SDK软件包的手机,音箱等终端设备)和beacon组成。其具体定位原理: 首先在区域内铺设蓝牙信标(一般常见的商场或者商圈中的室内导航定位,都是3-10米一个iBeacon硬件) beacon不断的向周围广播信号和数据包 当终端设备进入beacon信号覆盖的范围,测出其在不同基站下的RSSI值,然后再通过手机内置的定位算法测算出具体位置(一般是3点定位)。 网络侧定位系统由终端(手机等带低功耗蓝牙的终端)、蓝牙beacon节点,蓝牙网关,无线局域网及后端数据服务器构成。其具体定位过程是: 首先在区域内铺设beacon和蓝牙网关。 当终端进入beacon信号覆盖范围,终端就能感应到beacon的广播信号,然后测算出在某beacon下的RSSI值通过蓝牙网关经过wifi网络传送到后端数据服务器,通过服务器内置的定位算法测算出终端的具体位置。 终端侧定位一般用于室内定位导航,精准位置营销等用户终端,而网络侧定位主要用于人员跟踪定位,资产定位及客流分析等情境之中。蓝牙定位的优势在于实现简单,定位精度和蓝牙信标的铺设密度及发射功率有密切关系。并且非常省电,可通过深度睡眠、免连接、协议简单等方式达到省电目的。缺点是抗干扰性太差,信号不稳定。 各个公司在看到蓝牙定位的应用价值之后,纷纷推出各自的标准协议。目前主要有苹果最先提出的iBeacon,谷歌的Eddystone,三星Proximity 及高通的Gimbal。 苹果iBeacon iBeacon为苹果公司2013年9月发布的一种基于低功耗蓝牙的通信协议。ibeacon技术在国内又被称为beacon技术,信标技术,灯塔技术,是物联网万物互联中连接人与场景最重要的一个入口。 苹果的iBeacon具有对移动电子终端设备的定位功能和唤醒关联APP的功能。基于这两项功能,延伸出了ibeacon的在导航定位和营销信息推动中的各种各样的应用场景。 谷歌Eddystone 继iBeacon之后,谷歌推出了Eddystone标准协议。谷歌推出Eddystone在其功能上除了兼容ibeacon协议,还在其基础之上进行了诸多改进,优化用户体验。如 iBeacon 需要通过 APP 才能获得信息,而在 EddyStone中,H5开发者可以直接得到相关信息。在信号当中直接加入URL 信息,可以让用户在接触场景时直接访问某个网址或在触发通知和触发 URL 之间切换。此外,在设备安全上,它可实现信息加密和混淆,以实现每个设备的唯一不可仿冒。 PS:什么是H5?H5是目前HTML5应用最多的形式。主要在微信中,HTML5网页作为一种营销的形式被广泛应用,营销圈简称H5。 三星Proximity 三星2014年推出了基于BLE的信息推送服务Proximity。相比前两者,三星没有把对Beacon 的期待放在室内定位,而是侧重于信息的推送,具体来说就是广告的推送。有一个比较重要的限制在于,信息的推送仅限于三星手机,这在硬件通信上相比前两者有了更多的限制。 Radius Networks AltBeacon AltBeacon是Radius Networks 公司研发的信标标准。 高通Gimbal 2013年12月,高通发布Gimbal传感器作为高通情景感知平台主打产品,后从高通独立出去,是专门提供临近感应及地理围栏解决方案。高通的Gimbal与iBeacon的定位原理基本相同。Gimbal 采用Bluetooth Smart 蓝牙定位技术,定位精确度可达0.3米,能够让商家综合考虑顾客的位置、活动、时间等信息,构建营销系统。比如查看顾客入店轨迹、推送促销活动、折扣等。此外,高通还专门为开发者提供SDK 和管理平台,方便开发者利用gao开发短距追踪应用程序。 由于蓝牙各种定位技术的应用和商业模式具有相似性,今天我们以国内比较关注的ibeacon为例分析其应用和商业盈利模式。 iBeacon采用低功耗蓝牙工作机制,工作于2.4GHz免费频段,信号传输距离一般30m左右,ibeacon定位精度受节点的密度、布设位置、发射频率,环境的复杂程度以及定位算法等因素影响,目前一般精度为2-3米左右。一般ibeacon为无源,需要定期更换电池。易于安装,可随处布置,布设和应用起来相对容易。 iBeacon的主要应用场景 ibeacon基于定位和唤醒功能的不同,应用场景有所差异。主要用于导航导览以及营销信息的推送。 在定位功能中的主要应用: 首先,为特定场景提供导航导览等专项服务。如零售业,会展,酒店,展览馆,景区等应用场景。 其次,为企业提供数据整合服务。如在实体商业和服务业中通过ibeacon搜集线下访问行为的数据,实现数据的统计和分析,为企业后续精准营销改进产品等做准备。 在唤醒功能中的主要应用: 在服务业,实体商业给用户提供信息推送服务。如商场商品信息推送,医院挂号,就诊减少排队时间等。 在零售业,餐饮业,酒店,小微商家等应用场景中,通过自动唤醒设备功能,发送广告,红包,优惠券等多种营销信息。 iBeacon商业模式 在其应用价值点基础上,iBeacon服务可通过提供硬件,软件,营销解决方案盈利。未来,ibeacon服务商还可能通过挖掘大数据价值实现盈利。而iBeacon作为线下用户与线上商家连接的入口,也是目前互联网企业如微信,支付宝(已内测似乎还没开始投入商用)等争相抢占的流量资源地。那么,目前从事iBeacon的企业都有从哪些方面布局进行盈利呢? 硬件/方案输出盈利 提供面向企业的应用场景解决方案,管理系统以及面向个人用户的硬件,导航APP产品等。通过向他们直接销售基于iBeacon 的硬件产品和方案。如SENSORO,智石科技,Dropbeacon等可为不同应用场景设计定制全套的硬件和软件方案。 线下营销价值盈利 推出针对不同场景和第三方平台的个性化互动营销方案,通过线上手段实现线下用户引流,带来实际线下销售,获得盈利。如通过微信摇周边实现线下用户线上导流。 未来iBeacon的盈利模式:挖掘大数据价值 或许,布局iBeacon的企业其最终目的并不仅仅只局限于用户导航以及营销信息推送。通过iBeacon精准定位功能,采集整理用户访问行为及轨迹等数据,为商家优化店内配置和经营决策做出参考,向大数据方向发展。 规模化应用的痛点 虽然目前国内很多大型商场,会展及景区布设,但要全国性大规模推广,仍需时日。 用户习惯尚未养成。使用iBeacon需要用户打开蓝牙,但在一般客户的印象中,蓝牙比较耗电。并且需要下载APP,在推广上也是一个门槛。 应用成本高。虽然iBeacon的应用成本相对其他技术低很多,但总体的使用成本还是偏高。 PS:iBeacon的应用成本是每个50-200RMB(也有30-50RMB的,据最终定位效果选定),假如每25平米安装一个beacon基站,一个10万平米场地需要铺设4000个beacon基站,不包含绘图,软件和调试等费用,需要花费20-80万,其他技术实现需要花费百万以上。 商家推广困难。一方面流量太少,另一方面使用成本高。 信息安全性有待提高。iBeacon安全协议通过软件加密实现,硬件设备本身不包含安全加密方案,容易被攻击。同时呢,iBeacon协议本身的安全性也还有提高的空间。 本文转自d1net(转载)

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册