什么是图像显著性区域检测更改位置服务”或“区域监视定位服务”

位置信息服务与北斗卫星导航――智慧城市建设的关键基石
&&上海互软电子政府创新体验中心
产业与现状
近年来,随着地理信息系统与全球定位系统实际应用的逐渐普及,以及卫星定位技术、技术、技术的发展和,一种新兴信息服务模式&&位置信息服务被催生了出来。位置信息服务已经成为地理信息产业的重要组成部分,并逐渐成为其最为强劲的增长点。、平板电脑等智能终端的快速增长,以及与地理信息服务密切相关的应用日趋丰富,勾勒并展现了位置信息服务产业发展的美好前景。
位置信息服务是由导航或者移动通信网络基础设施提供的一种增值服务,通过一组定位技术获得位置信息(如经纬度坐标数据),提供给组织、个人或者通信系统,实现各种与位置相关的业务服务。位置信息服务业务实现可以分为两个步骤,位置的获取和信息的提供。而产业是位置信息服务产业的位置获取环节的基础产业,北斗卫星导航产业的发展将极大提升位置服务信息产业发展的广度和深度。
2013年9 月 26 日,国务院办公厅印发关于《国家卫星导航产业中长期发展规划》的通知,这是国家针对新兴信息产业发布的第一个中长期发展规划,勾划出2020 年的产业发展蓝图,计划部署包括基础工程、创新、安全、大众和国际化等五大工程。同时规划又再次强调至 2020年产业的总产值达到 4000 亿元的目标。
图一. 年我国卫星导航与位置服务产业产值分布图
(摘自导航定位协会咨询中心的2013年度中国卫星导航与位置服务产业发展白皮书,下同)
我国卫星导航与位置服务产业有显著的区位特点,环渤海、珠三角、长三角、华中鄂豫湘、西部川陕渝等五大产业聚集区各自向特色化方向发展,以核心城市为中心的产业竞争格局初步形成。北京、上海、深圳、广州、武汉、西安等重点城市相继推出专项产业促进政策,产业群体比较活跃。
图二.我国卫星导航与位置服务产业重点区域分布图
(摘自2013年度中国卫星导航与位置服务产业发展白皮书)
图三.2013 年各地区产业园建设情况
(摘自2013年度中国卫星导航与位置服务产业发展白皮书)
按科技部对羲和系统&&即中国广域室内外高精度定位导航系统&&的总体规划部署,2015年前,我国将在10个城市、三个行业开展系统示范工程建设,并逐步向全国推广。开展在大众位置服务、交通出行服务、物联网、城市管理、精准农业、应急救援等领域的应用示范。到2020 年,实现&百城亿户&的应用推广目标,通过提供高品质位置服务,提升市场容量,创新应用服务与商业模式,带动产业链全面发展,促进相关传统产业的改造升级,形成导航与位置服务战略性新兴产业。
在国际上,北斗系统今年在泰国落地使用,是中国北斗第一次在国外落地使用,迈出了北斗进入的第一步。 中泰北斗项目总投资额达 100 亿元,涉及 两百多个建设、灾害预测系统建设、石油管道巡检等行业应用以及北斗产业园建设,预计中泰北斗项目今年将在泰国建设 40 至 50 个基站。
上海市产业发展情况
在上海,北斗(上海)位置综合服务平台和上海北斗导航及位置服务产品检测中心于2012年9月正式启动建设。平台紧紧抓住了国家发展战略性新兴产业和上海推进智慧城市建设的历史机遇,以市场需求为导向,以技术创新为动力,服务本市卫星导航应用创新和产业发展,促进卫星导航资源的共享增值。其基本目标是建成以北斗卫星导航定位系统为核心,兼容,融合移动通信网络、等多种信息服务资源,为注册用户提供导航定位、精确授时、数字报文通信服务和基于位置的增值信息服务。
平台的建设内容包括:并新建安全可靠的通讯基础设施,汇聚智慧城市相关的数据资源,构建应用支撑系统,推动业务应用示范系统的建设,打通各类服务渠道等五个层面的建设工作,同时需要建设和完善综合服务平台的标准体系、安全和运维体系。
实际应用实践方面,上海在智慧城市平台建设方面充分运用包括北斗导航技术在内的多种空间定位技术和位置信息服务体系,取得了多项成功经验,产生了很好的社会效应与影响。特别是在浦东新区,一些应用项目如地下空间安全化管理系统、基于的公交营运精细化监管系统、内河海事智能化综合信息平台等,均对上海本土民生质量与政务管理水平带来质的飞跃。
位置信息服务依靠成熟技术支持和满足用户需求的实用性特点,具有良好的市场和发展前景。上海自开展位置服务以来,产业发展并不令人满意,涉及到了产业核心技术竞争力不足、产业标准制定工作滞后、缺乏系统的产业规划与市场监管等几方面的问题。
上海的位置信息服务领域拥有一定的科研实力、人才资源、良好的产业化基础和市场前景,但从总体上看,上述资源的整合力度不足,主要表现在:
(1)企业存在业务区分度差、重复度高的问题;
(2)位置信息服务上下游厂商合作不紧密,存在各自为政的现象;
(3)中上游厂商尚未形成一个开发的位置信息服务体系架构.
这些问题的存在严重制约了位置信息服务生态产业链的形成。
因此,上海的位置信息服务产业应尽快在以下几个方面予以推进:
(1)制定落实产业发展专项规划;
(2)成立专项资金,加大技术研发投入;
(3)培育位置信息服务市场,推动标准制定和执行;
(4)加快地理信息资源开发利用;
(5)保护位置信息服务用户隐私安全。
城市应用实践
近年来,我国在位置信息服务基础设施建设方面已取得初步成果,北斗卫星导航网、地基增强网、室内定位网、互联网、移动通信网等已经基本建设完备。
同时,从未来发展趋势看,在智慧城市建设的过程中,位置信息服务的智能化和网络化也是智慧城市建设的关键基石之一。通过智慧城市中位置信息服务应用建设,政府可实现资源调度管理、移动现场指挥、重大事件快速响应决策、城市公共智慧服务;企业可以实现对车辆、流动人员、货物等资产与移动资产的智慧管理、指挥和调度;公众可以在出行、交友、购物、餐饮、家人关爱、财产和人身安全等多方面获益。未来位置信息服务产业将有望在以服务为导向的智慧城市建设中绽放光茫。
导航与位置服务具有广泛的产业关联性,对带动现代农业、现代服务业、交通运输业、电子制造业、移动通信业等多个产业升级改造具有重要的促进作用,市场潜力巨大。随着基础设施的完善和技术的进步,&位置&作为新一代信息技术的重要元素将无所不在。
以下是几个在智慧城市建设实践中,位置信息服务的应用案例:
*基于RFID的公交精细化营运管理系统
该项目主要针对城市公共交通运营车辆的运行轨迹、行驶状况、车辆情况等信息,通过在公交车辆上安装RFID芯片,在公交站点、停车场、交通信号杆柱等设施上安装RFID识别设备,采集公交车辆运行数据,形成运营情况的动态数据库,同时结合车辆信息静态数据库、GIS信息库、GPS系统等其他信息系统,从而形成对公交车辆运营情况的实时、精确掌握。
通过RFID技术来采集车辆运行数据,可以有效避免城市道路条件下,GPS等卫星定位导航技术存在盲区的情况,如高架、隧道、地下车库等,并且数据的即时性、精确性更强。
系统通过与公交车载智能终端的整合,实现了采集公交车辆营运业绩指标数据和司乘人员信息,公交行业可以对车辆营运数据进行精确统计,从而实现车辆监控、能耗监控、科学调度、合理排班、班次线路稽查、规范行驶等功能。而系统的信息既可以与城市综合交通管理平台对接,为交通管理提供数据支持,也可以提供给行业主管部门,为公交行业的管理、监督以及给予公交企业财政补贴等工作提供完善的数据支持。
该项目目前已在上海市浦东新区的9条公交线路,220多台公交车辆上投入运行,未来有望推广到整个浦东新区范围内的公交运营车辆上。
*浦东新区内河海事智能化综合信息平台
该项目主要是对浦东新区范围内各内河航道、航船进行实时智能监控、海事执法动态监管、航道管理、运输安全监控等综合信息监控、事务管理的平台。
系统可以通过GIS系统、RFID系统和船载AIS等系统数据的调用,以及重点河道、河段的视频监控设备,对内河运航行船只、航道运行情况实现实时监控和及时调度。特别是对特种运输船只(如危险品运输船、内河泥浆船等)可以实现行船路线的精确监控,从而保证航运安全,以及偷倒泥浆和偷倒建筑垃圾等事件的发生。
同时,在海事执法过程中,即可以实现远程监控、指挥,也可以运用手持式终端提供的位置信息服务,在现场巡查、执法过程中及时、精确的获得需要航道、航船的各类船务信息。
*地下空间网格化管理系统
该项目主要为政府地下空间管理部门(主要是民防部门)提供一个整合现有区域地下工程信息资源,以城市地理信息为基础,运用网格化管理思想对地下空间工程信息进行管理的综合管理系统。
地下工程的管理人员在巡查过程中,依靠地下空间专业GIS平台,借助北斗卫星定位、RFID等定位技术,在对地下空间的巡查、维护、管理过程中,通过专用手持式移动终端提供的位置信息服务,可以根据北斗卫星定位和RFID定位确认巡查路线和具体位置,也可以根据系统数据库及时、精确的获取地下空间、地下工程的信息,并将发现的问题及时上报、处置,改善地下工程管理中的协调联动不佳的现状,增强地下工程对各种突发事件的应急能力。
该项目目前已在浦东新区民防管理署投入了应用,并预备推广到全市范围内。
更多应用探索
随着智慧城市的应用深入,如能利用卫星导航技术和物联网技术,结合通信网络技术,以位置信息服务为基础,对传统相关领域与行业管理模式进行改造,在物业管理、办公楼宇室内导航、特定人员个性化信息推送、交通应用( 包括静态交通管理应用、动态交通管理应用、 特种车辆综合管理应用、公交智能调度与管理应用、内河航运综合管理与执法应用、区域物流智能运输管理应用、出租车智能调度应用)等多个领域,都可以发挥重大的作用,直接提高政府、社会、企业的水平、管理能力和服务质量。
以下我们就几个重点领域有巨大潜力的应用点做一些探讨:
*城市综合管理平台
城市综合管理平台是整合政府各部门力量,共同参与城市管理的应用平台,主要用于对城管重大疑难问题、重大突发事件、工商、食品药品监督、文化执法等需要全区多部门协调联动的案事件的接报和管理,并统一调度指挥。其核心应用点有:
(1)卫星定位服务:卫星定位服务作为基础的服务进行提供,即:由平台本身提供对外发布的卫星定位服务后台管理服务接口,有需要的子系统可以进行调用,应用卫星定位服务的后台管理。
(2)无线巡防:无线巡防提供巡防人员的定期巡防,采用了卫星定位技术来对巡防人员进行定位和实时监控,确保巡防的规范性和准确性。
(3)应急指挥调度:在应急管理功能中,为应急调度的对象提供基于终端或者基于移动APP应用的位置信息服务,提供调度过程中的导航、地图定位和地物查询等功能。
*居家养老应用
针对民政部门构建居家养老服务系统、充分利用国产北斗卫星导航系统带来的位置信息服务的技术优势,构架中国特色养老服务模式的需求,&以社区为依托,老龄人群为服务对象,企事业服务机构为网点,社区义工为补充,结合北斗定位系统提供的位置信息服务,并以服务网络中心为支撑,建立全方位的信息化的居家养老服务体系&。其核心应用点有:
(1)老人定位:主要用于外出老人迷失方向、突发疾病无法找到老人的位置时,通过位置信息服务可以快速的锁定老人所在位置,也方便子女或护理者主动查询老人的当前位置信息,并设置紧急位置报送按钮,将老人报警的位置信息及时的发送到相关人员或机构。
(2)信息推送:可以根据老人的活动范围,定位老人的位置,并将位置范围内的生活信息(超市促销、文娱信息、社区活动信息)推送给老人。
(3)安防报警:适用于家中或小区中的各种事故报警,包括煤气泄露、盗窃、火灾等,出现意外时,服务中心能第一时间得到报警,并将事故点的位置信息通过位置信息服务共享给需要的第三方系统进行应急处置。
*静态交通管理
静态交通管理系统的建设在区域政府层面搭建了统一的静态交通管理平台,整合利用停车资源、提高停车系统的利用效率,现道路停车的停车、收费、支付、管理、服务和信息共享的一体化、数字化、可视化和智能化,减少驾驶员停车逡巡以及由此带来的无效交通量、能源浪费、环境污染,减少交通事故、提高交通安全,创新城市道路停车管理的新模式,为解决&停车难&问题提供保障。其主要应用点有:停车场室内导航和车位信息展示等。在提供位置信息服务的同时,还应结合GIS系统,将空间地理数据、业务属性数据和位置信息数据项结合,进而实现停车资源管理、信息发布等应用。
随着社会的发展,人们的活动范围越来越大,而且越来越不确定。这种移动性和不确定性给以卫星定位技术为代表的各类定位技术带来机遇和挑战的同时,也为位置信息服务的发展带来了无限商机。
纵观国内技术发展,种种迹象表明,单一的产品和服务功能已经不能满足社会发展的要求,多种产品和功能的融合已经成为电子产品的重要发展趋势,网络化、个性化和信息化也成为服务行业的发展总趋势。因此,融合多项技术于一体的位置信息服务实际上并不只是用于定位、跟踪、导航管理,而且完全可以成为一种公共应用的综合信息服务平台,用于物流、安防、移动定位、公共信息、、出行服务、智能交通等许多方面,从而为建设智化城市的建设带来强劲动力,对于增加运输工作效率、创造舒适的出行环境、提高人们的生活质量均会发挥积极的作用。
作为一种新型的服务业态,位置信息服务代表了现代服务业的先进技术与先进思想,体现了以人为本的服务理念,必将会产生显著的经济效益和社会效益。
&电子政府创新体验中心&由上海互联网软件有限公司创建,是一个集技术研发、理论实证研究、技术产品展示为一体的研发服务平台。中心以创新的技术理念,搭建一个开放、互助的&智慧城市&研发服务平台,通过全面解读&智慧城市&全景图,努力探索新理念、新技术、新应用在中国&智慧城市&建设中的具体实践。
& &来源:C114中国通信网
版权说明:凡注明来源为“C114中国通信网”的文章皆属C114版权所有,除与C114签署内容授权协议的单位外,其他单位未经允许禁止转载、摘编,违者必究。如需使用,请联系021-。其中编译类仅出于传递更多信息之目的,系C114对海外相关站点最新信息的翻译稿,仅供参考,不代表证实其描述或赞同其观点,投资者据此操作,风险自担;翻译质量问题。
支持作者观点
反对作者观点
本文关键字: 5, 7, 4, 1, 7, 1, 5, 4, 1, 2, 3, 3, 6, 3, 8, 3, 1
? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ?
Copyright&
c114 All Rights Reserved
上海荧通网络信息技术有限公司版权所有
南方广告业务部: 021-51142 E-mail:
北方广告业务部: 010-33977 E-mail:shixinqi@
编辑部联系: 021-51142 E-mail:editor@服务热线: 021-51142现在很多社交、电商、团购应用都引入了地图和定位功能,似乎地图功能不再是地图应用和导航应用所特有的。的确,有了地图和定位功能确实让我们的生活更加丰富多彩,极大的改变了我们的生活方式。例如你到了一个陌生的地方想要查找附近的酒店、超市等就可以打开软件搜索周边;类似的,还有很多团购软件可以根据你所在的位置自动为你推荐某些商品。总之,目前地图和定位功能已经大量引入到应用开发中。在产品研发中有两个专业术语需要大家知道:一是LBS(Location Based Service)基于定位的服务,二是SoLoMo(Social Local Mobile )社交本地的移动应用,这都是需要我们提供地图和定位服务。
在后面的课程里就和大家一起看一下iOS如何进行地图和定位开发。iOS为了方便我们开发,提供了地图服务的框架。除此之外,实际的开发工作中,我们常常会使用一些第三发的SDK来实现地图服务,主要有高德地图和百度地图,这些我们后在后面的几节中讲到。
地图功能的实现离不开定位服务,下面我们还是先来看一下iOS系统的定位功能是如何实现的。
1. 定位服务
要实现地图、导航功能,往往需要先熟悉定位功能,iOS中的定位引擎是CoreLocation框架提供的,我们通过CoreLocation框架进行定位操作。CoreLocation自身可以单独使用,和地图开发框架MapKit完全是独立的,但是往往地图开发要配合定位框架使用。在Core Location中主要包含了定位、地理编码(包括反编码)功能。
我们先介绍一下iOS定位功能的实现。定位是一个很常用的功能,如一些地图软件打开之后如果用户允许软件定位的话,那么打开软件后就会自动锁定到当前位置,如果用户手机移动那么当前位置也会跟随着变化。要实现这个功能需要使用CoreLoaction中CLLocationManager类,首先看一下这个类的一些主要方法和属性:
(BOOL)locationServicesE
是否启用定位服务,通常如果用户没有启用定位服务可以提示用户打开定位服务
(CLAuthorizationStatus)authorizationS
定位服务授权状态,返回枚举类型:
kCLAuthorizationStatusNotDetermined: 用户尚未做出决定是否启用定位服务
kCLAuthorizationStatusRestricted: 没有获得用户授权使用定位服务,可能用户没有自己禁止访问授权
kCLAuthorizationStatusDenied :用户已经明确禁止应用使用定位服务或者当前系统定位服务处于关闭状态
kCLAuthorizationStatusAuthorizedAlways: 应用获得授权可以一直使用定位服务,即使应用不在使用状态
kCLAuthorizationStatusAuthorizedWhenInUse: 使用此应用过程中允许访问定位服务
desiredAccuracy
定位精度,枚举类型:kCLLocationAccuracyBest:最精确定位CLLocationAccuracy kCLLocationAccuracyNearestTenMeters:十米误差范围kCLLocationAccuracyHundredMeters:百米误差范围kCLLocationAccuracyKilometer:千米误差范围kCLLocationAccuracyThreeKilometers:三千米误差范围
distanceFilter
位置信息更新最小距离,只有移动大于这个距离才更新位置信息,默认为kCLDistanceFilterNone:不进行距离限制
startUpdatingLocation
开始定位追踪,开始定位后将按照用户设置的更新频率执行-(void)locationManager:(CLLocationManager*)manager didUpdateLocations:(NSArray *)方法反馈定位信息
stopUpdatingLocation
停止定位追踪
startUpdatingHeading
开始导航方向追踪
stopUpdatingHeading
停止导航方向追踪
startMonitoringForRegion:
开始对某个区域进行定位追踪,开始对某个区域进行定位后。如果用户进入或者走出某个区域会调用- (void)locationManager:(CLLocationManager )manager didEnterRegion:(CLRegion )region和- (void)locationManager:(CLLocationManager )manager didExitRegion:(CLRegion )region代理方法反馈相关信息
stopMonitoringForRegion:
对某个区域进行定位追踪
requestWhenInUseAuthorization
请求获得应用使用时的定位服务授权,注意使用此方法前在要在info.plist中配置NSLocationWhenInUseUsageDescription
requestAlwaysAuthorization
请求获得应用一直使用定位服务授权,注意使用此方法前要在info.plist中配置NSLocationAlwaysUsageDescription
-(void)locationManager:(CLLocationManager )manager didUpdateLocations:(NSArray )
位置发生改变后执行(第一次定位到某个位置之后也会执行)
-(void)locationManager:(CLLocationManager )manager didUpdateHeading:(CLHeading )newH
导航方向发生变化后执行
-(void)locationManager:(CLLocationManager )manager didEnterRegion:(CLRegion )region
进入某个区域之后执行
-(void)locationManager:(CLLocationManager )manager didExitRegion:(CLRegion )region
走出某个区域之后执行
除了CLLocationManager之外,CLLocation类也是在我们做定位服务中经常看到的,CLLocation常用来表示某个位置的地理信息,比如经纬度、海拔高度等,当然他也给我们提供了计算两个地理位置之间间距的方法。下面我们看一下CLLocation的常用属性和方法:
-(instancetype)initWithLatitude:(CLLocationDegrees)latitude longitude:(CLLocationDegrees)
初始化CLLocation,传入经纬度
-(instancetype)initWithCoordinate:(CLLocationCoordinate2D)coordinate altitude:(CLLocationDistance)altitude horizontalAccuracy:(CLLocationAccuracy)hAccuracy verticalAccuracy:(CLLocationAccuracy)vAccuracy timestamp:(NSDate *)timestamp
初始化CLLocation,传入经纬度、定位精度和定位时间
-(instancetype)initWithCoordinate:(CLLocationCoordinate2D)coordinate altitude:(CLLocationDistance)altitude horizontalAccuracy:(CLLocationAccuracy)hAccuracy verticalAccuracy:(CLLocationAccuracy)vAccuracy course:(CLLocationDirection)course speed:(CLLocationSpeed)speed timestamp:(NSDate *)
初始化CLLocation,传入经纬度、定位精度和定位时间、定位路线、当前速度
-(CLLocationDistance) getDistanceFrom:(const CLLocation *);
计算两个点之间的距离
-(CLLocationDistance) distanceFromLocation:(const CLLocation *)
计算两个点之间的距离
@property(readonly, nonatomic) CLLocationCoordinate2D
经纬度,结构体,一般通过函数CLLocationCoordinate2DMake来创建
@property(readonly, nonatomic) CLLocationD
@property(readonly, nonatomic) CLLocationAccuracy horizontalA
水平定位精度
@property(readonly, nonatomic) CLLocationAccuracy verticalA
竖直定位精度
@property(readonly, nonatomic) CLLocationD
路线,航线(范围在0-359.9之间,0代表正北方向)
@property(readonly, nonatomic) CLLocationS
行走速度(m/s)
@property(readonly, nonatomic, copy) NSDate *
一般在开始定位之前,应用会向用户获取授权请求,在iOS7及以前的版本,如果在应用程序中使用定位服务只要在程序中调用startUpdatingLocation方法应用就会询问用户是否允许此应用是否允许使用定位服务,同时在提示过程中可以通过在info.plist中配置通过配置Privacy -Location Usage Description告诉用户使用的目的,当然这个配置是可选的。但是在iOS8中配置配置项发生了变化,我们可以通过配置NSLocationAlwaysUsageDescription或者 NSLocationWhenInUseUsageDescription来告诉用户使用定位服务的目的,并且注意这个配置是必须的,如果不进行配置则默认情况下应用无法使用定位服务,打开应用不会给出打开定位服务的提示,除非安装后自己设置此应用的定位服务。同时,在应用程序中需要根据配置对requestAlwaysAuthorization或locationServicesEnabled方法进行请求。
iOS8提供了更加人性化的定位服务选项。应用的定位服务不再仅仅是关闭或打开。现在,定位服务的启用提供了三个选项:永不、使用应用程序期间、和始终。同时,考虑到能耗问题,如果一款 App 要求始终能在后台开启定位服务,iOS 8 不仅会在首次打开 App 时主动向你询问,还会在日常使用中弹窗提醒你该 App 一直在后台使用定位服务,并询问你是否继续允许。
下面我们就来看一看iOS实现定位服务的具体步骤有哪些
判断硬件是否开启了定位服务 判断应用是否获取定位授权 初始化定位管家的对象,注意需要设置为全局变量 设置定位权限:iOS8的新特性,可以实现代理方法获取授权范围。注意需要修改plist文件NSLocationAlwaysUsageDescription/NSLocationWhenInUseUsageDescription。 设置定位服务的属性。 开启定位,实现代理方法,获取定位信息
#import &ViewController.h&
@interface ViewController ()
// 定位服务管家
@property (nonatomic, strong)CLLocationManager *locationM
@implementation ViewController
/*定位的实现
1.导入框架 CoreLocation.framework
2.导入库文件 #import
3.需要将定位管家 CLLocationManager 设置为全区变量
1.判断硬件是否开启了定位服务
2.初始化定位管家的对象,注意需要设置为全局变量
3.判断定位服务授权状态,设置定位权限:iOS8的新特性,可以实现代理方法获取授权范围。注意需要修改plist文件 NSLocationAlwaysUsageDescription/NSLocationWhenInUseUsageDescription。
4.设置定位服务的属性。
5.开启定位,实现代理方法,获取定位信息
- (void)viewDidLoad {
[super viewDidLoad];
// 1.判断硬件是否开启了定位服务
BOOL isOpen = [CLLocationManager locationServicesEnabled];
if (isOpen) {
NSLog(@&定位服务已经打开&);
NSLog(@&定位服务未开启&);
UIAlertController *alert = [UIAlertController alertControllerWithTitle:@&你的定位服务未开启& message:@&请到setting开启定位服务& preferredStyle:UIAlertControllerStyleAlert];
[alert addAction:[UIAlertAction actionWithTitle:@&确定& style:UIAlertActionStyleCancel handler:nil]];
[self presentViewController:alert animated:YES completion:nil];
// 判断应用是否获取定位授权
NSInteger status = [CLLocationManager authorizationStatus];
switch (status) {
NSLog(@&kCLAuthorizationStatusNotDetermined--没有决定&);//
用户从未选择过权限
NSLog(@&kCLAuthorizationStatusRestricted--没有许可&);// 无法使用定位服务,该状态用户无法改变
NSLog(@&kCLAuthorizationStatusDenied--禁止使用&);// 用户拒绝该应用使用定位服务,或是定位服务总开关处于关闭状态
NSLog(@&kCLAuthorizationStatusAuthorizedAlways--始终允许&);// 大致是用户同意程序在任意时候使用地理位置
NSLog(@&kCLAuthorizationStatusAuthorizedWhenInUse--开启允许&);// 大致是用户同意程序在可见时使用地理位置
// 2.初始化定位管家的对象,注意需要设置为全局变量,因为我们需要一直持有定位管家的对象,局部变量使用后即被销毁,在代理方法中,无法获得该对象及其属性,所以需要设置为全局变量
[self locationManager];
// 3.判断定位服务授权状态,设置定位权限:iOS8的新特性,可以实现代理方法获取授权范围。注意需要修改plist文件NSLocationAlwaysUsageDescription/NSLocationWhenInUseUsageDescription。
if ([CLLocationManager authorizationStatus] == kCLAuthorizationStatusNotDetermined) {
// 判断授权状态,在授权未确定是获取授权,一旦确定即无法在程序中修改,只能在settings中对app做授权设置
if ([[[UIDevice currentDevice] systemVersion] floatValue] &= 8.0) {// 判断系统版本 大于8.0以上的版本可以手动获取授权
// 请求始终允许访问,包括进入后台后 对应info设置:NSLocationAlwaysUsageDescription
[self.locationManager requestAlwaysAuthorization];
// 请求当app打开时允许访问 对应info设置:NSLocationWhenInUseUsageDescription
[self.locationManager requestWhenInUseAuthorization];
// 注意:修改plist文件
// NSLocationAlwaysUsageDescription---我想在后台还访问您的位置
// NSLocationWhenInUseUsageDescription---我想在我的app开启的时候使用您的位置,可以吗?
}else if ([CLLocationManager authorizationStatus] == kCLAuthorizationStatusDenied) {
UIAlertController *alert = [UIAlertController alertControllerWithTitle:@&你没有给该应用的定位服务授权& message:@&请到setting设置定位服务授权& preferredStyle:UIAlertControllerStyleAlert];
[alert addAction:[UIAlertAction actionWithTitle:@&确定& style:UIAlertActionStyleCancel handler:nil]];
[self presentViewController:alert animated:YES completion:nil];
// 没有给予授权
// 4.设置定位服务的属性。
[self.locationManager setDesiredAccuracy:kCLLocationAccuracyThreeKilometers];
// 设置定位刷新距离,可以直接是由上面的参数指定
[self.locationManager setDistanceFilter:100];//移动距离大于distanceFilter就会定位,否则不会,避免频繁的定位,消耗电量
// 5.开启定位,实现代理方法,获取定位信息
[self.locationManager startUpdatingLocation];
[self.locationManager stopUpdatingLocation];// 获取定位数据后调用
// 开始追踪导航方向,
[self.locationManager startUpdatingHeading];
[self.locationManager stopUpdatingHeading];// 停止追踪导航方向
// 开启区域追踪,需要传入一个追踪区域
CLLocationCoordinate2D coordinate = CLLocationCoordinate2DMake(39.0, 116.0);
CLCircularRegion *region = [[CLCircularRegion alloc] initWithCenter:coordinate radius:1000 identifier:@&找到你了&];
[self.locationManager startMonitoringForRegion:region];
// 懒加载定位管家
- (CLLocationManager *)locationManager {
if (!_locationManager) {
_locationManager = [[CLLocationManager alloc] init];
_locationManager.delegate =// 设置定位服务的代理对象
return _locationM
#pragma mark CLLocationManagerDelegate
方法说明:当用户许可状态发生改变时,调用该方法
@param status:用户的许可状态
- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status
NSLog(@&认证状态改变 status:%d&,status);
方法说明:执行定位后调用该方法
- (void)locationManager:(CLLocationManager *)manager
didUpdateLocations:(NSArray *)locations {
// 停止定位(省电措施:只要不想用定位服务,或者获取定位信息后,就马上停止定位服务)
[self.locationManager stopUpdatingLocation];
// 1.取出位置对象(数组中可能会有多个位置对象,取出第一个是最精确的)
CLLocation *loc = [locations firstObject];
// 2.取出经纬度 coordinate:位置坐标
course:方向
CLLocationCoordinate2D coordinate = loc.
CLLocationDegrees longitude = coordinate.
CLLocationDegrees latitude = coordinate.
// 3.CLLocations的常用属性和方法
horizontalAccuracy,用来得到水平上的精确度,它的大小就是定位精度的半径,单位为米。获得的不是用户设置的精度
而是最终定位的精度,如果值为-1,则说明此定位不可信。
course 方向: 0 ~ 359.9 , 0 代表正北
speed 速度:m/s
获取两个位置之间的距离
- (CLLocationDistance)distanceFromLocation:(const CLLocation *)location
NSLog(@&经度:%f \n 纬度:%f&, longitude, latitude);
NSLog(@&方向:%f \n 海拔:%f&,loc.course, loc.altitude);
NSLog(@&水平定位精度%f
竖直定位精度%f&,loc.horizontalAccuracy,loc.verticalAccuracy);
NSLog(@&速度:%f&,loc.speed);
// 计算2个经纬度之间的直线距离
CLLocation *loc1 = [[CLLocation alloc] initWithLatitude:40 longitude:116];
CLLocation *loc2 = [[CLLocation alloc] initWithLatitude:41 longitude:116];
// 计算2个经纬度之间的直线距离
CGFloat distance = [self countLineDistance:loc1 withLocation:loc2];
NSLog(@&%f&,distance);
计算2个经纬度之间的直线距离
- (double)countLineDistance:(CLLocation *)loc1 withLocation:(CLLocation *)loc2
CLLocationDistance distance = [loc1 distanceFromLocation:loc2];
方法说明: 导航方向发生变化的时候执行此方法
newHeading 方向: 0 ~ 359.9 , 0 代表正北
- (void)locationManager:(CLLocationManager *)manager didUpdateHeading:(CLHeading *)newHeading
NSLog(@&方向改变&);
- (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region
NSLog(@&进入到该区域&);
- (void)locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion *)region{
NSLog(@&离开该区域&);
使用定位功能时,有几点需要我们注意:
定位频率和定位精度并不应当越精确越好,需要视实际情况而定,因为越精确越耗性能,也就越费电。 定位成功后会根据设置情况频繁调用-(void)locationManager:(CLLocationManager )manager didUpdateLocations:(NSArray )locations方法,使用完定位服务后如果不需要实时监控应该立即关闭定位服务以节省资源,所以我们需要在合适的时候停止定位。 -(void)locationManager:(CLLocationManager )manager didUpdateLocations:(NSArray )locations方法返回一组地理位置对象数组,每个元素一个CLLocation代表地理位置信息(包含经度、纬度、海报、行走速度等信息),之所以返回数组是因为有些时候一个位置点可能包含多个位置。
2. 地理编码和反地理编码
除了提供位置跟踪功能之外,在定位服务中还包含CLGeocoder类用于处理地理编码和逆地理编码功能。这个功能的实现主要是由CLGeocoder类提供的。CLGeocoder最主要的两个方法就是
-(void)geocodeAddressString:(NSString *)addressString completionHandler:(CLGeocodeCompletionHandler)completionH// 根据给定的位置(通常是地名)确定地理坐标(经、纬度)。 -(void)reverseGeocodeLocation:(CLLocation *)location completionHandler:(CLGeocodeCompletionHandler)completionH // 根据地理坐标(经、纬度)确定位置信息(街道、门牌等)。
在上面两个方法的方法中,当地理编码或是反编码结束时,会回调CLGeocodeCompletionHandler,当中传递给我们两个参数,一个NSArray,一个NSError。NSError是编码或者反编码错误的详情,数组中则存放着我们地理编码或是反地理编码后获取的地标信息,为什么是数组呢,因为我们可能查询到多个地标,比如&帝都&代表的地标就有多个。在CoreLocation框架中,地标是一个CLPlacemark的实例对象。下面我们先来看一下CLPlacemark的常用属性:
@property (nonatomic, readonly, copy, nullable) CLLocation *
@property (nonatomic, readonly, copy, nullable) CLRegion *
@property (nonatomic, readonly, copy, nullable) NSTimeZone *timeZone
地标所在时区
@property (nonatomic, readonly, copy, nullable) NSString *
@property (nonatomic, readonly, copy, nullable) NSString *
@property (nonatomic, readonly, copy, nullable) NSString *subT
街道相关信息,例如门牌等
@property (nonatomic, readonly, copy, nullable) NSString *
@property (nonatomic, readonly, copy, nullable) NSString *subL
城市相关信息,例如标志性建筑
@property (nonatomic, readonly, copy, nullable) NSString *administrativeA
@property (nonatomic, readonly, copy, nullable) NSString *subAdministrativeA
其他行政区域信息
@property (nonatomic, readonly, copy, nullable) NSString *postalC
@property (nonatomic, readonly, copy, nullable) NSString *ISOcountryC
@property (nonatomic, readonly, copy, nullable) NSString *
@property (nonatomic, readonly, copy, nullable) NSString *inlandW
水源、湖泊
@property (nonatomic, readonly, copy, nullable) NSString *
@property (nonatomic, readonly, copy, nullable) NSArray *areasOfI
关联的或利益相关的地标
@property (nonatomic, readonly, copy) NSDictionary *addressD
地理的详细信息 包含上面所有的数据
#import &ViewController.h&
@interface ViewController ()
@property (nonatomic, strong)CLGeocoder *//地理编码器
#pragma mark - 地理编码 根据地区名称查询所在的经纬度坐标
@property (strong, nonatomic) IBOutlet UITextField *addressF//输入地区名称
@property (strong, nonatomic) IBOutlet UILabel *longitudeL//显示地区的经度
@property (strong, nonatomic) IBOutlet UILabel *latitudeL//显示地区的纬度
@property (strong, nonatomic) IBOutlet UILabel *detailAddressL//显示地区的详细信息
#pragma mark - 反地理编码 根据经纬度获取对应的地区名
@property (strong, nonatomic) IBOutlet UITextField *reverseLongtitudeF//查询地区的经度
@property (strong, nonatomic) IBOutlet UITextField *reverseLatitudeF//查询地区的纬度
@property (strong, nonatomic) IBOutlet UILabel *reverseDetailAddressL//查询的地区详细名称
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
//初始化地理编码器
if (!_geocoder) {
_geocoder = [[CLGeocoder alloc] init];
// 地理编码
- (IBAction)geocoder:(id)sender {
//获取输入的城市名称
NSString *address = self.addressField.
if (address.length == 0)
[self getCoordinateByAddress:address withBlock:^(CLPlacemark *pm) {
// 设置经纬度
self.latitudeLabel.text = [NSString stringWithFormat:@&%.2f&, pm.location.coordinate.latitude];
self.longitudeLabel.text = [NSString stringWithFormat:@&%.2f&, pm.location.coordinate.longitude];
// 设置具体地址
self.detailAddressLabel.text = pm.
} withfaild:^(NSError *error) {
self.detailAddressLabel.text = @&你找的地址可能不存在,请重新输入&;
self.addressField.text = @&&;
- (void)getCoordinateByAddress:(NSString *)address withBlock:(void(^)(CLPlacemark *pm))block withfaild:(void(^)( NSError *error))faild{
[_geocoder geocodeAddressString:address completionHandler:^(NSArray *placemarks, NSError *error) {
if (error) { // 有错误(地址乱输入)
faild(error);
} else { // 编码成功
// 取出最前面的地址(数组中可能存在过河产讯到的地址)
CLPlacemark *pm = [placemarks firstObject];
// 回调数据
block (pm);
NSLog(@&总共找到%ld个地址&, placemarks.count);
//遍历数组,获取所有查找到的城市
for (CLPlacemark *pm in placemarks) {
NSLog(@&-----地址开始----&);
// 枚举编译出得所有的地理信息
[pm.addressDictionary enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
NSLog(@&%@:%@&, key, obj);
NSLog(@&-----地址结束----&);
- (IBAction)reverseGeocoder:(id)sender {
// 1.包装位置,将输入的字符串设置为地理坐标
CLLocationDegrees latitude = [self.reverseLatitudeField.text doubleValue];
CLLocationDegrees longitude = [self.reverseLongtitudeField.text doubleValue];
CLLocation *loc = [[CLLocation alloc] initWithLatitude:latitude longitude:longitude];
[self getAddressByLocation:loc withBlock:^(CLPlacemark *pm) {
// 设置具体地址
self.reverseDetailAddressLabel.text = [NSString stringWithFormat:@&%@ %@ %@ %@ %@&,pm.country,pm.locality,pm.subLocality,pm.thoroughfare,pm.subThoroughfare];
} withFaild:^(NSError *error) {
self.reverseDetailAddressLabel.text = @&你找的地址可能只在火星有!!!&;
- (void)getAddressByLocation:(CLLocation *)loc withBlock:(void(^)(CLPlacemark *pm))block withFaild:(void(^)(NSError *error))faild {
// 2.反地理编码
[_geocoder reverseGeocodeLocation:loc completionHandler:^(NSArray *placemarks, NSError *error) {
if (error) { // 有错误(地址乱输入)
faild (error);
} else { // 编码成功
// 取出最前面的地址
CLPlacemark *pm = [placemarks firstObject];
block (pm);
NSLog(@&总共找到%ld个地址&, placemarks.count);
for (CLPlacemark *pm in placemarks) {
NSLog(@&-----地址开始----&);
// 获取所有的地标信息
[pm.addressDictionary enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
NSLog(@&%@:%@&, key, obj);
NSLog(@&-----地址结束----&);}

我要回帖

更多关于 显著性区域检测 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信