精华内容
下载资源
问答
  • 范勇 蔡键摘要:LBS隐私的泄露问题不仅包含用户提交的位置和查询数据,更是包含了其中隐藏的...LBS隐私保护中图分类号:TP393 文献标识码:A文章编号:1009-3044(2020)10-0020-021基于位置服务(LBS)基于位置服务...

    范勇 蔡键

    11615e4a7305e4a565317382658af96f.png

    11fe0d3e90f09c54e3726a6fb2554155.png

    0de2eeae5bc411ce2d22b036bb0ea535.png

    摘要:LBS隐私的泄露问题不仅包含用户提交的位置和查询数据,更是包含了其中隐藏的用户身份、兴趣爱好、社会习惯、行为模式等。文章重点介绍了位置服务的几种应用场景,并且对LBS隐私保护体系结构和保护技术进行整理归纳。

    关键词:位置服务;隐私;LBS隐私保护

    中图分类号:TP393 文献标识码:A

    文章编号:1009-3044(2020)10-0020-02

    1基于位置的服务(LBS)

    基于位置的服务(Location Based Service,LBS)是基于地理信息技术将物理位置在电子地图上定位,并以此为基础而提供的空间信息服务。用户能够确定自己的位置,可以看到与用户位置在空间上相关的信息,从而能够根据相应的位置信息或内容动态或者双向地互动:提供服务或者接受服务。

    1.1基于位置信息的各种服务

    1)日常出行中,GPS(全球定位系统)和Automatic Navigation(导航技术)是LSB的典型应用。推荐人们需要查询周边所需的饭店、旅馆、景点、停车场、加油站等一系列服务的应用。

    2)在国内外旅游、查看天气、呼叫出租车等各种移动应用中,LBS都起着着重要的作用,微信中更是提供了位置实时共享用于朋友们的联系和交流。

    1.2基于位置服务(LBS)的组成

    LBS服务器、室内外定位系统、信息和计算机通信网络系统和各种手机、定位传感器等移动设备构成了基于位置的服务。

    手机或者定位的传感器是使用者获得位置服务的终端,同时也是使用者位置的提供者。定位系统是LBS为用户或终端提供位置的地理信息系统。只有获得了位置信息,才能讨论基于位置的高质量服务。信息和计算机通信网络是使用者向LBS服务提供者发送服务请求以及LBS服务提供者向使用者返回结果的传输介质。包含使用者位置信息的查询服务请求通过移动终端提供给位置服务提供者建立的服务器,服务器根据请求的服务内容,查找相应服务器上的数据表/数据库;将找到的结果通过信息和计算机通信网络返回给使用者。LBS给社会和整个接受服务的群体带来了方便和效率,但相应的问题也出现了:使用者的隐私在有意无意中泄露出去了。

    2LBS隐私

    2.1LBS隐私的定义

    隐私是指不愿被外人知晓的个人信息,比如个人的兴趣爱好,宗教信仰等被外人。LBS隐私信息包含了用户身份、时间、用户的位置隐私以及用户的查询隐私。位置隐私与使用者当前的地点信息相关或者是其曾经到过的地方的地理数据有关;而查询隐私则与位置服务使用者的请求内容相关。

    2.2 LBS隐私遭遇的挑战

    基于位置服务主要的挑战有:

    1)确定手机或者定位的传感器所处的位置。手机或者定位的传感器地理位置数据发送给服务提供者从而获得对应位置服务,而位置信息中位置服务使用者的地理信息有可能就被直接披露出去。

    2)固定或者特定时间段内的地理位置数据极大可能包含位置服务使用者个人敏感信息,通过上下文分析,其家庭门牌号、日常生活的路线图等可能被得到。

    3)位置服务使用者的服务请求有相当私人的信息片段,据此大概率推断出其嗜好、需求等。在“距离我最近的传染病医院”这一查询中,“传染病医院”则是私人信息片段。好事者可能会认为位置服务使用者可能已经得病。

    3LBS隐私保护系统结构

    LBS隐私保护系统结构一般分为三种:中心服务器结构、点对点分布式结构和混合式结构。

    3.1中心服务器结构

    该结构由手机用户或者定位传感器使用者(移动终端)、可信任匿名服务器、LBS服务器组成,如图1所示。

    位置服务使用者通过手机实时地向LBS服务器发送具体的服务请求,LBS服务器给出对应的请求结果。(假定)匿名中心服务器是可信任的,其主要的作用是模糊化处理位置服务使用者的地理位置数据,另外将服务请求的结果利用其已知的服务请求者的准确信息,进行去伪去除噪声处理,然后返回给服务请求者。中心服务器有可能成为唯一被攻击目标,大量实时的服务请求数据会导致其成为性能瓶颈。

    3.2点对点分布式结构

    该结构由手机用户或者定位传感器使用者(移动终端)和LBS服务器组成,如图2所示。

    手机用户或者定位传感器之间使用者通过点对点的协议,使用对等计算搜索匿名算法自我组织形成一个匿名网络,将当前位置服务使用者的位置模糊化,将其转发给LBS服务器。LBS服务器返回对应的请求结果,当前位置服务使用者通过与自组网络内其他手机用户的相互协作,获得服务请求的结果,整个过程中同时保护了自己的隐私。点对点分布式结构在位置服务请求者的数量相对不足时,自组织网络难以形成,匿名过程就不能完成。

    3.3混合式结构

    该结构由手机用戶或者定位传感器使用者、可信匿名中心服务器、LBS服务器组成,如图3所示。

    手机用户或者定位传感器使用者可向可信任的匿名中心服务器提出为之服务的请求,也可以从响应时间、服务质量以及隐私保护的强弱程度使用点对点协议完成隐私保护。混合式结构结合了中心服务器结构、点对点分布式结构的优点,使手机端和可信匿名服务器之间的负载得到较好的分配和平衡。该混合式结构部署和实施往往比较复杂,在具体应用中其实际可操作性不高。

    4LBS隐私保护技术

    LBS隐私保护技术一般有基于数据加密的,基于数据失真和基于限制发布三种。下面主要对基于数据失真LBS保护技术进行阐述。

    4.1假名

    假名技术采用了中心服务器结构。假名技术是一种位置服务使用者标识进行保护的方法。假名使用一个虚假的位置服务使用者的身份与LBS服务提供者交换数据,隐藏了位置服务使用者的真实身份信息。

    4.2随机化

    随机化是指在LBS用户查询中加入随机噪声:可以是随机位置、位置区域或者公开的兴趣点。并将噪声的查询和真正的用户查询一起发送给LBS服务商。随机噪声的选择和添加是很重要的,需要让随机的噪声和真实的用户查询在潜在的别有用心的人来看,二者几乎没有分别。随机化采用点对点分布式结构。

    4.3模糊化

    模糊化是指对LBS用户查询中的时间和位置进行扩大化和有目的的混淆。让别有用心的人无法识别查询用户及其准确位置。扩大化是指在可以接受服务质量一定的损失的情况下降低查询中时间和位置的精度,常常用一个位置区域或时间段来代替真正的位置和时间。混淆的方式是指在查询用户的实时位置中以某种策略注入给定比例的错误,根据模糊化后的数据进行位置服务的请求。

    利用数据扰动、模糊化,让其失真的LBS隐私保护技术容易实现,简单有效;比较好的平衡了隐私保护和位置服务质量之间的关系。LBS隐私保护度较高,服务质量比较高。

    5结论

    综上所述,文章从LBS服务基本概念、应用场景到LBS的系统结构,对比三种系统结构各自的优缺点。对现有隐私保护的匿名和模糊技术进行分类。

    展开全文
  • 从传统意义上来说移动用户是基于位置服务的消费者,但是越来越多的社会应用显示,移动用户还是位置数据的产生者.人们在请求位置服务时,需要将自己的位置信息发送给位置服务提供者,而这往往会导致用户隐私信息的泄露....

    摘要:

    由于带有定位功能的智能手机的普及,以及车载移动计算的发展,基于位置的服务已逐渐进入人们的生活范围,为人们的生活带来便利.从传统意义上来说移动用户是基于位置服务的消费者,但是越来越多的社会应用显示,移动用户还是位置数据的产生者.人们在请求位置服务时,需要将自己的位置信息发送给位置服务提供者,而这往往会导致用户隐私信息的泄露.用户隐私受到威胁主要是由于LBS(location-based services)服务提供商需要依靠用户提供的具体位置,只有得到用户的具体位置才能提供良好的位置服务,也就是说,用户在不知不觉中用他们的隐私信息交换了位置服务.如果用户想要他们的隐私信息不泄露,就必须关闭位置感知设备或者暂时退订基于位置的服务.由于位置服务器具有不可信性,当用户订阅基于位置的服务时隐私也会受到威胁.在现实生活中,经常发生攻击者滥用GPS设备追踪个人位置的现象,导致移动用户在使用LBS时,担心自己的位置隐私受到威胁.例如,当用户在自己家使用假身份查询距离他最近的餐厅时,就会暴露他自己的真实身份,因为查询者作为房子的主人,可以很容易的知道是谁发起了查询.最简单的方法是使用假身份代替自己的真实信息,但这种传统方法并不能阻止位置服务中隐私的泄露,因为可以由个人的位置信息直接推导出他的真实身份.目前基于位置的隐私保护已经取得了部分研究成果,为了更深入地解决位置隐私保护中许多仍待解决的疑难问题,使用户在请求位置服务时享受到更好的服务而又不泄露自己的隐私信息,本文拟从以下几个方面开展研究工作:首先,为保护用户的位置隐私提出一种基于PR四叉树搜索的时空隐匿模型,并设计算法予以实现.首先根据隐匿的需要提出一种适用于时空匿名的位置隐私保护体系结构,详细论述采用该体系结构的原因,以及采用该体系结构的优缺点;其次,根据PR四叉树结构的特点,设计一种应用于隐匿服务器端的算法,并详细考虑了移动客户与隐匿服务器,以及隐私服务器与位置服务器之间的数据交换格式和交换内容.为保证提出服务请求的用户享受到满意的服务,本章结合位置隐私保护度k和匿名化区域面积Amin,探讨了用户所在区域的敏感性以及处理方式;最后,设计详细的实验以验证模型和算法的有效性.其次,由于采用隐匿方法不但隐匿了用户的个人信息,还隐匿了用户所在的位置.但是在有些情况下用户的身份可以泄露,而其位置是一个隐私,这是就需要研究其他匿名化方法.另外,每个人对于自己的隐私位置要求不同,如果所有人使用相同的模糊位置范围对隐私保护要求较低的用户可能不能满足位置服务精度要求,而对隐私保护需求较高的人则可能泄露隐私.为解决基于模糊位置的个性化隐私保护需求,针对个性化隐私需求给出适合的模糊位置范围,因此提出模糊求精的个性化隐私保护模型.首先对用户所在的城市区域划分为单元网格,对于每个网格检查其周围的网格是否是相同的敏感区域类型,若是,则合并网格,否则判断是否满足隐私度要求,满足则放弃合并,不满足则继续合并,以此来模糊化用户的位置.其次,使用随机产生的角和约束距离对用户的模糊化区域进行转化.采用随机角度保证攻击者不能推导出模糊区域的偏移方向,而约束距离保证攻击者不能推导出移动用户是否在偏移的模糊区域范围内.最后实验验证算法的有效性并对实验结果做出详细的理论分析.再次,用户请求基于位置的服务时,需要向位置服务器提供自己的真实位置,通过对用户位置进行匿名化处理,可以阻止用户隐私信息的泄露,然而位置隐匿方法的缺点也非常明显,位置服务器得到是一个隐匿的区域,这加重了位置服务器的负担,且服务的精度不能保证.因此,为保护用户的隐私,提供更好地服务质量,提出基于哑元(Dummies)的P2P环境用户位置隐私保护方法.首先,用户根据自己的位置生成两个哑元以构成三角形,以三角形的重心作为保护区域的中心,以生成其余哑元;其次,设计了客户端哑元生成和服务器的响应算法;最后,使用实验对算法进行验证并理论分析了实验结果.最后,传统的基于位置服务隐私保护模型假设用户处于欧几里德空间中,且运动方向是任意的,然而现实中用户总是沿着一定的道路轨迹运动.已有的基于公路网络的隐私保护模型以路段数作为用户之间的距离,而道路空间的路段长度不一,以路段数作为用户之间的距离会产生较大误差,且已有的公路网络隐私保护方案没有考虑路段长度和用户的密度.为解决该问题,提出一种基于欧几里德距离的公路网络(k,l,δ)-匿名化隐私保护模型.首先,对于公路网络环境中处于同一路段的用户,以它们相对于路段的投影距离作为它们之间的实际距离长度,对于处于不同路段的用户,以相对于路段的长度之和作为它们之间的相对距离;其次,结合传统匿名化模型和公路网络的特点,根据路段上用户的密度不同设定路段关联性,在此基础上提出公路网络(k,l,δ)-匿名化隐私保护模型,并设计算法予以实现;最后,采用理论分析及实验验证算法的正确性及有效性.

    展开

    展开全文
  • 基于 Mapnik 的地图服务器

    千次阅读 2021-11-30 09:34:36
    PostGIS 扩展三、下载地图样式表和上传地图数据四、将地图数据导入 PostgresSQL五、生成 Mapnik Stylesheet六、安装 mapnik七、地图生成1、安装 Express 框架2、创建地图前端页面3、启动地图4、nodejs 服务后台持续...

    一、简介

    该地图服务器是基于优麒麟系统的安装部署!!!

    优麒麟设置 root 密码:

    sudo passwd root
    

    升级系统

    sudo apt update
    sudo apt upgrade
    

    二、安装 PostgreSQL 数据库和 PostGIS 扩展

    sudo apt install postgresql
    sudo apt install postgresql-contrib
    sudo apt install postgis postgresql-postgis
    

    安装语言

    export LANGUAGE="en_US.UTF-8"
    export LANG="en_US.UTF-8"
    export LC_ALL="en_US.UTF-8"
    sudo locale-gen en_US.UTF-8
    sudo dpkg-reconfigure locales
    

    ubuntu 下 postgres 用户并登录 PostgreSQL 服务器

    sudo -u postgres -i
    

    执行 psql 命令,并设置 postgres 用户登录密码

    psql postgres
    postgres=# \password
    Enter new password: 
    Enter it again: 
    postgres=#\q
    

    创建用户 osm

    createuser osm
    

    然后创建一个名为 gis 的数据库,同时将 osm 作为数据库的所有者,-E UTF8 指定要在数据库中使用的字符编码方案是 UTF8

    createdb -E UTF8 -O osm gis
    

    接下来,为 gis 数据库创建 postgis 和 hstore 扩展

    psql -c "CREATE EXTENSION postgis;" -d gis
    psql -c "CREATE EXTENSION hstore;" -d gis
    

    将 osm 设置为表所有者

    psql -c "ALTER TABLE spatial_ref_sys OWNER TO osm;" -d gis
    

    退出 postgres 用户

    exit
    

    创建 ubuntu 的 osm 用户便后续使用

    sudo adduser osm
    

    三、下载地图样式表和上传地图数据

    切换 osm 用户

    su - osm
    

    将最新的 CartoCSS 地图样式表下载到 osm 用户的主目录

    wget https://github.com/gravitystorm/openstreetmap-carto/archive/v4.20.0.tar.gz
    tar -zxvf v4.20.0.tar.gz
    

    上面下载可能会连接不上,网盘下载地址:https://pan.baidu.com/s/1hXcGhUM9tL3kQpiZgSnmKQ

    提取码:ovac

    上传地图数据到 osm 用户的目录,osm 地图数据下载地址

    http://download.geofabrik.de/asia.html
    

    退出 osm 用户

    exit
    

    四、将地图数据导入 PostgresSQL

    需安装工具:osm2pgsql

    sudo apt install osm2pgsql
    

    运行以下命令以将地图样式表和地图数据加载到 gis 数据库中,用你自己的地图数据文件替换,最后,需要指定地图数据文件的位置。

    su - osm
    
    osm2pgsql --slim -d gis --hstore --multi-geometry --number-processes 8 --tag-transform-script /home/osm/openstreetmap-carto-4.20.0/openstreetmap-carto.lua --style /home/osm/openstreetmap-carto-4.20.0/openstreetmap-carto.style /home/osm/china-latest.osm.pbf
    

    退出osm用户

    exit
    

    相关说明:

    参数说明
    -username指定数据库用户
    -slim以苗条模式而不是普通模式运行,如果要在将来使用OSM更改文件(OSC)更新地图数据,则需要此选项
    -d选择数据库
    -hstore将不带列的标记添加到PostgreSQL表的其他hstore(键/值)列
    -multi-geometry在postgresql表中生成多几何特征
    -style指定样式文件的位置
    –number-processes服务器上的CPU核心数
    -C选项以兆字节为单位指定缓存大小,较大的缓存大小导致更快的导入速度,但你需要有足够的RAM来使用缓存

    添加中文支持

    sudo apt-get -y install fonts-wqy-zenhei 
    sudo apt-get -y install unifont
    sudo apt-get -y install ttf-unifont
    

    五、生成 Mapnik Stylesheet

    安装必要软件

    sudo apt install -y curl
    sudo apt install -y gdal-bin
    sudo apt install -y mapnik-utils
    sudo apt install -y npm
    

    切换至osm用户,在 openstreetmap-carto-4.20.0 目录下创建 data 文件夹用于存放下载的边界文件

    边界文件下载:https://pan.baidu.com/s/1nAqH9g1CHEUV0YwwjYZDVw

    提取码:wosp

    su - osm
    cd openstreetmap-carto-4.20.0
    mkdir data
    
    #上传如下边界文件到data目录下并解压
    antarctica-icesheet-outlines-3857.zip
    antarctica-icesheet-polygons-3857.zip
    land-polygons-split-3857.zip
    ne_110m_admin_0_boundary_lines_land.zip
    simplified-land-polygons-complete-3857.zip
    world_boundaries-spherical.tgz
    

    构建 style.xml 样式文件

    carto project.mml > style.xml
    

    六、安装 mapnik

    安装 mapnik 、TileStrata 及其插件

    apt install -y npm
    npm install -y carto
    npm install -y mapnik
    npm install -y tilestrata
    npm install -y tilestrata-disk
    npm install -y tilestrata-mapnik
    

    七、地图生成

    1、安装 Express 框架

    Express 框架可以使用国内的 npm 镜像安装,速度会非常快

    npm install express --registry=https://registry.npm.taobao.org
    

    创建项目结构:创建 atlas 项目文件夹,并在项目文件夹中创建子文件夹 public 、server

    #在项目中创建package.json:
    npm init --yes
    mkdir -p /home/osm/atlas/public/css
    mkdir -p /home/osm/atlas/public/js
    mkdir -p /home/osm/atlas/server
    

    2、创建地图前端页面

    将 OpenLayers 的 js 和 css 文件上传到对应的文件夹下

    js、css 下载地址:https://pan.baidu.com/s/1mZkBbYZmSB1w1yxIqsXkoA

    提取码:ijbh

    /home/osm/atlas/public 目录下创建 index.html 文件

    <!Doctype html>
    <html xmlns=http://www.w3.org/1999/xhtml>
      <head>                  
          <meta http-equiv=Content-Type content="text/html;charset=utf-8">
          <meta http-equiv=X-UA-Compatible content="IE=edge,chrome=1">
          <meta content=always name=referrer>
          <title>离线地图</title>
          <link href="/css/ol.css" rel="stylesheet" type="text/css" />
          <script type="text/javascript" src="/js/ol.js" charset="utf-8"></script>
      </head>
      <body>
          <div id="map" style="width: 100%"></div>
          <script>
            
            var tileStrataMapLayer = new ol.layer.Tile({
              source: new ol.source.XYZ({
                url: 'http://192.168.138.226:8080/t/map/{z}/{x}/{y}/tile.png'
              })
            });
            
            new ol.Map({
                  layers: [
                    tileStrataMapLayer
                  ],
                  view: new ol.View({
                    center: [104.06, 30.67],   
                    projection: 'EPSG:4326',
                    zoom: 14            
                  }),
                  target: 'map'    
              });
          </script>
      </body>
    </html>
    

    /home/osm/atlas/server 目录下创建 server.js

    var tilestrata = require('tilestrata');
    var disk = require('tilestrata-disk');
    var mapnik = require('tilestrata-mapnik');
    var express = require('express');
    
    var strata = tilestrata();
    var router = express.Router();
    
    //layer名称不能为空
    strata.layer('map')
      .route('tile.png')    //route方法中不能使用正则表达式
      .use(disk.cache({dir: './tilecache'}))    //设置瓦片缓存在当前目录的tilecache之目录中
      .use(mapnik({
        pathname: '/home/osm/openstreetmap-carto-4.20.0/style.xml'
      }));
    
    router.use(tilestrata.middleware({
      server: strata
    }));
    
    module.exports = router;
    

    在项目根目录 /home/osm/atlas 下创建 map.js

    var express = require('express');
    var path = require('path');
    var server = require('./server/server.js');
    var app = express();
    app.use(express.static(path.join(__dirname, 'public')));
    app.use('/t', server);
    app.get('/', function(req, res){
      res.sendfile('./public/index.html');
    });
    
    app.listen(8080);
    

    3、启动地图

    在浏览器中访问服务 http://localhost:port

    node map.js
    

    地图样式如下
    在这里插入图片描述

    4、nodejs 服务后台持续运行三种方法

    (1)nodejs 自带 node.js 自带服务 nohub,不需要安装别的包

    • 缺点:存在无法查询日志等问题,关闭终端后服务也就关闭了
    nohup node map.js &
    

    (2)使用 pm2 工具

    pm2 是一个进程管理工具,可以用它来管理你的 node 进程,并查看 node 进程的状态

    npm install -g pm2			// -g 全局安装
    pm2 start map.js        	// 启动
    pm2 stop map.js         	// 停止
    pm2 stop all            	// 停止所有
    pm2 restart map.js      	// 重启
    pm2 restart all         	// 重启所有
    pm2 delete  map.js      	// 关闭
    pm2 start map.js -i max 	//启动 使用所有CPU核心的集群
    

    (3)使用 forever 工具

    forever 是一个 nodejs 守护进程,完全由命令行操控。forever 会监控 nodejs 服务,并在服务挂掉后进行重启。

    1、安装 forever
    npm install -g forever
    2、启动服务
    service forever start
    3、使用 forever 启动 js 文件
    forever start map.js
    4、停止 js 文件
    forever stop map.js
    5、启动js文件并输出日志文件
    forever start -l forever.log -o out.log -e err.log map.js
    6、重启js文件
    forever restart map.js
    7、查看正在运行的进程
    forever list
    
    展开全文
  • Android 基于百度地图SDK的位置服务

    千次阅读 2021-11-30 21:36:12
    位置服务(Location Based Services,LBS),又称定位服务,是指通过GPS卫星或者网络,获取各种终端的位置坐标,在电子地图平台的支持下,为用户提供基于位置导航、查询的一种信息服务。 开发环境:Android Studio ...

    位置服务(Location Based Services,LBS),又称定位服务,是指通过GPS卫星或者网络,获取各种终端的位置坐标,在电子地图平台的支持下,为用户提供基于位置导航、查询的一种信息服务。

    开发环境:Android Studio

    步骤:

    1. 点击进入百度地图开放平台
      在这里插入图片描述
    2. 开发者登陆后,点击进入主界面右上角的“控制台”
      在这里插入图片描述
    3. 点击“创建应用”,应用名称随便取,应用类型选择Android SDK,应用服务至少选择如下图片中的两项。
      在这里插入图片描述
    4. 打开Android Studio,选择或新建即将加载地图服务的项目,打开AndroidManifest.xml文件,找到如下图位置的package标签,将其内容输入到“创建目录”界面的PackageName框之中。
      在这里插入图片描述在这里插入图片描述
    5. 在AndroidStudio的界面中,点击左上角File>>Project Structure>>SDK Location中查找到JDK的位置
      在这里插入图片描述
    6. 在cmd中打开JDK下的bin目录,运行命令如下:
    keytool -list -v -keystore /*本机keystore路径*/ -alias /*命名*/
    
    示例:
    keytool -list -v -keystore C:\Users\cwj_2\.android\debug.keystore -alias androiddebugkey
    

    会提示“输入密钥库口令:”,口令默认是“android”
    在这里插入图片描述
    结果如图:
    在这里插入图片描述

    1. 得到SHA1,填入“创建目录”界面的发布版SHA1框之中
      在这里插入图片描述
    2. 应用创建完成后,可以在百度地图开放平台>>应用管理>>我的应用中找到应用的key值
      在这里插入图片描述
    3. AndroidStudio配置步骤:见官方文档。首先在官网下载SDK

    在这里插入图片描述
    点击下载开发包:在这里插入图片描述

    1. 在AndroidStudio中切换到Project下,将下载的包解压到如图位置,打开libs,在jar包位置点击右键>>Add to library
      在这里插入图片描述

    2. 在app目录下的build.gradle文件中android块中配置sourceSets标签
      在这里插入图片描述

    3. 在AndroidManifest.xml文件中的<application>中加入如下代码配置开发密钥(AK)

    <application>  
        <meta-data  
            android:name="com.baidu.lbsapi.API_KEY"  
            android:value="开发者 key" />  
    </application>
    

    在这里插入图片描述

    1. <application/>外部添加如下权限声明:
    <!-- 访问网络,进行地图相关业务数据请求,包括地图数据,路线规划,POI检索等 -->
    <uses-permission android:name="android.permission.INTERNET" />
    <!-- 获取网络状态,根据网络状态切换进行数据请求网络转换 -->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
        
    <!-- 读取外置存储。如果开发者使用了so动态加载功能并且把so文件放在了外置存储区域,则需要申请该权限,否则不需要 -->
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <!-- 写外置存储。如果开发者使用了离线地图,并且数据写在外置存储区域,则需要申请该权限 -->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
    

    在这里插入图片描述

    1. 在布局文件中添加地图容器,地图初始化
    <com.baidu.mapapi.map.MapView  
        android:id="@+id/bmapView"  
        android:layout_width="match_parent"  
        android:layout_height="match_parent"  
        android:clickable="true" />
    

    在这里插入图片描述

    public class DemoApplication extends Application {
        @Override
        public void onCreate() {
            super.onCreate();
            //在使用SDK各组件之前初始化context信息,传入ApplicationContext   
            SDKInitializer.initialize(this);
            //自4.3.0起,百度地图SDK所有接口均支持百度坐标和国测局坐标,用此方法设置您使用的坐标类型.
            //包括BD09LL和GCJ02两种坐标,默认是BD09LL坐标。
            SDKInitializer.setCoordType(CoordType.BD09LL);
        }
    }
    

    在这里插入图片描述

    1. 创建地图Activity,管理MapView生命周期
    public class MainActivity extends Activity {  
        private MapView mMapView = null;  
        @Override  
        protected void onCreate(Bundle savedInstanceState) {  
            super.onCreate(savedInstanceState);    
            setContentView(R.layout.activity_main);  
            //获取地图控件引用  
            mMapView = (MapView) findViewById(R.id.bmapView);  
        }  
        @Override  
        protected void onResume() {  
           super.onResume();  
           //在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理  
           mMapView.onResume();  
        }  
        @Override  
        protected void onPause() {  
          super.onPause();  
          //在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理  
          mMapView.onPause();  
        } 
        @Override  
        protected void onDestroy() {  
          super.onDestroy();  
          //在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理  
          mMapView.onDestroy();  
        }  
    }
    

    在这里插入图片描述

    1. 运行得到结果如图:
      在这里插入图片描述
    2. 配置AndroidManifest.xml文件:加入权限使用声明,在Application标签中声明定位的service组件。
    <!-- 这个权限用于进行网络定位 -->
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <!-- 这个权限用于访问GPS定位 -->
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    

    在这里插入图片描述

    1. 开启地图的定位图层
      在这里插入图片描述

    2. 通过继承抽象类BDAbstractListener并重写其onReceieveLocation方法来获取定位数据,并将其传给MapView。
      在这里插入图片描述

    3. 通过LocationClient发起定位
      在这里插入图片描述

    4. 将自己的位置显示在地图中间
      在这里插入图片描述
      以下是MainActivity的源码

    package com.example.mapapplication;
    
    import android.app.Activity;
    import android.os.Bundle;
    
    import com.baidu.location.BDAbstractLocationListener;
    import com.baidu.location.BDLocation;
    import com.baidu.location.LocationClient;
    import com.baidu.location.LocationClientOption;
    import com.baidu.mapapi.map.BaiduMap;
    import com.baidu.mapapi.map.MapStatusUpdate;
    import com.baidu.mapapi.map.MapStatusUpdateFactory;
    import com.baidu.mapapi.map.MapView;
    import com.baidu.mapapi.map.MyLocationData;
    import com.baidu.mapapi.model.LatLng;
    
    public class MainActivity extends Activity {
        private MapView mMapView = null;
        private BaiduMap mBaiduMap;
        private LocationClient mLocationClient;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            mMapView = (MapView) findViewById(R.id.bmapView);
            mBaiduMap = mMapView.getMap();
    
            mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);
    
            mLocationClient = new LocationClient(this);
    
            //通过LocationClientOption设置LocationClient相关参数
            LocationClientOption option = new LocationClientOption();
            option.setOpenGps(true); // 打开gps
            option.setCoorType("bd09ll"); // 设置坐标类型
            option.setScanSpan(1000);
    
            //设置locationClientOption
            mLocationClient.setLocOption(option);
    
            //注册LocationListener监听器
            MyLocationListener myLocationListener = new MyLocationListener();
            mLocationClient.registerLocationListener(myLocationListener);
            //开启地图定位图层
            mLocationClient.start();
            mBaiduMap.setMyLocationEnabled(true);
    
        }
        @Override
        protected void onResume() {
            super.onResume();
            //在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理
            mMapView.onResume();
        }
        @Override
        protected void onPause() {
            super.onPause();
            //在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理
            mMapView.onPause();
        }
        @Override
        protected void onDestroy() {
            mLocationClient.stop();
            mBaiduMap.setMyLocationEnabled(false);
            mMapView.onDestroy();
            mMapView = null;
            super.onDestroy();
        }
    
        public class MyLocationListener extends BDAbstractLocationListener {
            @Override
            public void onReceiveLocation(BDLocation location) {
                //mapView 销毁后不在处理新接收的位置
                if (location == null || mMapView == null){
                    return;
                }
                MyLocationData locData = new MyLocationData.Builder()
                        .accuracy(location.getRadius())
                        // 此处设置开发者获取到的方向信息,顺时针0-360
                        .direction(location.getDirection()).latitude(location.getLatitude())
                        .longitude(location.getLongitude()).build();
                mBaiduMap.setMyLocationData(locData);
                LatLng ll = new LatLng(location.getLatitude(),location.getLongitude());
                MapStatusUpdate status = MapStatusUpdateFactory.newLatLng(ll);
                mBaiduMap.animateMapStatus(status);
            }
        }
    }
    
    1. 运行得到结果如图:
      在这里插入图片描述
      最后寄语,想要理解代码,还需自敲。不要图快,一昧地复制粘贴。
    展开全文
  • 10.4 项目四:虚拟主机配置 10.4.1 虚拟主机简介 10.4.2 基于域名的虚拟主机配置 10.4.3 基于IP地址的虚拟 主机配置 10.5 项目五:Nginx服务器的安装与 配置 10.5.1 Nginx服务器简介 10.5.2 安装Nginx...
  • 10.1.3 Apache软件包安装位置 10.2 项目二:发布Web站点 10.2.1 Apache服务器配置 文件简介 10.2.2 配置Apache服务器 10.3 项目三:发布个性化Web站点 10.4 项目四:虚拟主机配置 10.4.1 虚拟主机简介 10.4.2 基于...
  • 对于开发者而言,商业服务类软件在日常应用开发中的位置定位是必不可缺的。...在本篇文章中,我将介绍目前最大的位置服务提供商——腾讯位置服务与使用它的优势,以及我们应当如何使用平台创建应用和服务调用的 Key。
  • 在之前是静态配置ip,需要修改配置文件,不灵活,可使用服务发现机制。 # Windows 监控 - job_name: 'wins' static_configs: - targets: ['localhost:9182'] 配置: # consul服务发现配置的列表。 consul_sd_...
  • 作为一名在职岗位为【前端开发工程师】的程序员,我开发的应用程序经常需要获取用户位置信息,需要再某些场合下使用展示地图以及地图商的某些地点,需要获取行政区划列表(省市区)以及地址详情信息,需要在地图上...
  • 开通腾讯位置服务 1.进入微信公众平台 https://mp.weixin.qq.com/ 2.登录进入小程序后台,选择 “开发 - 开发工具 - 腾讯位置服务” 3.点击 “开通”,进入授权扫码界面 4.使用微信扫码进行授权 5.绑定开发者...
  • 一、JHSDB介绍 JHSDB是一款基于服务性代理( Serviceability Agent, SA)实现的进程外调试工具。服务性代理是HotSpot虚拟机中一组用于映射Java虚拟机运行信息的、主要基于Java语言(含少量JNI代码)实现的API集合...
  • 基于新浪云服务器的微信公众号

    千次阅读 2021-11-20 14:57:36
    基于新浪云服务器的微信公众号 本微信公众号是智能浴室排雾及浴室滑倒报警系统的一个分支,通过设备上传到ONENET云平台,新浪云服务器调用云平台数据再反馈给微信公众号,从而实现微信公众号实时获取设备数据和发送...
  • //library/hello-world是 image 文件在仓库里面的位置, //其中library是 image 文件所在的组,hello-world是 image 文件的名字。 docker images //现在,运行这个 image 文件。 docker run hello-world 输出这段...
  • 文章后面有开源项目部署,基于Docker和Docker Compose。活到老,学到老,保持一种空杯心态,用心学知识,学技能。我是一名前端程序员,喜欢折腾新东西,新事物,有兴趣的可以关注我的个人网站(猿视野)。 前提条件 ...
  • 前言:腾讯位置服务为各类应用厂商和开发者提供领先的LBS服务和解决方案;有针对Web应用的JavaScript API, 适合手机端Native APP的各种SDK, WebService接口,适合小程序的插件和各类地图API等。 目录 接入指南 ...
  • 腾讯位置服务接入教程

    千次阅读 2021-01-28 22:56:59
    比如地图定位、IP位置获取甚至地理位置可视化,我们很难自己去开发这些功能,市面上有很多优质的服务提供商基于了我们很多优质的解决方案,接下来就简单的介绍一下如何在开发中接入腾讯的位置服务 申请一个KEY 注册...
  • 阿里云ECS云服务器基于docker安装redis并且远程连接

    千次阅读 多人点赞 2021-06-09 22:14:50
      前言,本文基于docker安装redis,至于如何安装docker,我们在此前的文章中已经介绍过了:阿里云ECS云服务器安装docker并配置阿里云镜像仓库。 文章目录 1 拉取redis镜像 2 修改redis.conf的配置 3 挂载覆盖配置...
  • Docker搭建paddleOCR,基于PaddlePaddle服务化运行
  • 在物业管理中,小区内人员巡检还是非常常见的工作之一,为了降低物业的投入,我们设计了二维码方式,采用扫描二维码的形式辅助系统检测每个员工巡检的位置,以便进行常规的物业巡检工作。虽然二维码既便宜又易用,...
  • 基于阿里云的ECS(云服务器)

    千次阅读 热门讨论 2021-05-17 07:51:04
    性能卓越、稳定可靠、弹性扩展的IaaS(Infrastructure as a Service)级别云计算服务。高效地使用服务器,实现计算资源的即开即用和弹性伸缩. 2.为什么选择云服务器ECS *无需自建机房,无需采购以及配置硬件设施。 *...
  • FileBrower:是一个基于 Web 的文件管理器。它可以使你随时随地的对设备的文件进行基本的管理操作。 0x02服务器准备 服务器的选择上,当然是本文的主角:腾讯云轻量应用服务器(Lighthouse)。这是目前...
  • 本文目录一、介绍二、开始使用(一) 注册成为腾讯位置服务开发者(二)创建应用和Key三、地图显示(一)在地图页面引入 JS 库(二)定义显示地图的容器(三)初始化并显示地图四、效果图五、其它 一、介绍 ...
  • 目前腾讯位置服务也推出了路线规划插件、地铁图插件,实现更加简单便捷,感兴趣的可点击查看。 运行截图 mpvue 介绍 及项目搭建 mpvue = miniprogram + vue framework,说白了就是用vue框架开发小程序。mpvue...
  • 随着5G、AI等技术的普及,社会化的泛在物联网逐步形成,在泛在物联网中,基于感知与位置服务的定位应用,为个人和社会提供了更加便捷的服务。中国目前已成为全球最大的物联市场,凭借独特的优势、优秀的政策指导,...
  • E百科 | 基于MEC的边缘AI服务

    千次阅读 2021-03-03 16:09:32
    Astraea可以基于边缘节点服务平台实现以下能力: 镜像仓库:作为边缘AI镜像的储存仓库,并提供镜像分发加速能力 应用发布:提供边缘AI服务的一键部署和灰度发布功能 监测运维:负责边缘AI容器状态监测和相关日志...
  • 基于WiFi的室内定位系统设计与实现

    千次阅读 2021-04-05 17:28:01
    由于传统的卫星信号到达地面时,信号强度变弱,加上建筑物、室内复杂环境的影响,诸如GPS或者北斗等定位系统不能提供精确的位置服务。然而,人们对于室内定位的需求却日益增加,所以室内定位系统的研究是解决移动...
  • 即将开源!基于动态不变性感知的多模态视觉位置识别
  • 基于UDS协议的Bootloader定制服务 采用autosar架构的标准,DCM集成uds协议,可定制nxpS32K,tc275,tc1782,NXP5746,NXP5748系列id=621220324910&
  • Ribbon 和 Feign 都是用于调用其他服务的,方式不同。Feign 则是在 Ribbon 的基础上进行了一次改进,采用接口的方式,将需要调用的其他服务的方法定义成抽象方法即可,不需要自己构建 http 请求。不过要注意的是抽象...
  • 也正是基于这样的考虑,腾讯位置服务团队便联合了其生态合作伙伴来共同打造WeMap。 “地图在整个CSIG属于基础产研团队,不是商业团队,其实不用特别考虑赚钱这个事情。”牟蕾对雷锋网说到。 为什么要推出WeMap?...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 630,954
精华内容 252,381
关键字:

基于位置的服务