和地图手机百度地图不能定位定位怎么操作

腾讯地图手机版定位功能的使用方法选择字号:
点击红框中的定位按钮,即可定位当前位置。&
腾讯地图手机版目前支持GPS、基站、WiFi三种定位方式。定位的精度取决于软件使用了哪种类型的定位数据源。在定位信号较弱时,可能出现无法定位或定位偏差较大的情况。 为了在手机SOSO地图中使用定位功能,请您在系统中开启定位服务。开启方法:iPhone系统设置=》定位服务=》滑动打开定位服务开关;
可以单击右下角的“更多”按钮,在弹出的浮动工具栏上选择“设置”,开启“打开地图时显示当前位置”,手机SOSO地图将让你轻松锁定自己的位置。我们不会将您的位置泄露给任何第三方,请您放心使用。
以上信息是否已解决您的问题?
关注微信公众号
关注手Q公众号
社交软件热线3
帐号服务热线6
公众平台热线8
财付通热线0
支付服务热线95017
目前仅提供以上业务的电话服务,其他产品请在本网站寻求帮助
微信端公众号
QQ端公众号数码娱乐DVD导刊双语学习报
当前位置:
疑犯靠卫星地图和照片制造命案! 手机定位该怎么用?
  昨天,一则新闻被各大门户网站竞相转载:在广东打工的男子刘某,由于女友跟自己提出分手,一怒之下,他从广东奔赴女友老家河南某村,残忍地将女友一家三口(母亲、奶奶和弟弟)杀害。此前,刘某从没到过女友家,也不知道具体地址。他凭借的就是女友以前发给他的几张照片,然后根据卫星地图确定了女友家的位置,从而制造惨案。
  这一案件,也从另一方面引发网友对智能手机定位服务功能的反思&&如今手机上的社交软件很多都有定位功能,一方面确实给用户交友带来了便利,还能满足人们&晒幸福&的心理;但另一方面,用户的隐私安全也面临威胁,如何用好这把&双刃剑&?
  社交软件通过手机定位取得用户的经纬度
  如今使用微信、陌陌、打车App等手机应用软件,都能看到相关用户与自己的具体距离。
  微信里的&附近的人&功能,能把距离精确到100米,陌陌更能精确到10米,在获知这些用户位置信息的同时,对方也能知道我离他们有多远。在微信朋友圈发消息时,也有&所在位置&选项。昨天我在单位食堂吃饭,发微信时打开这个选项,附近的地标建筑都跳了出来供我选择。如果此时我选择了距离自己约200米的&外婆家&,就可以在朋友面前假装自己正在&外婆家&吃饭了。
  杭州一位App工程师说,社交软件是通过手机定位取得用户的经纬度的。&手机定位有三种方式,有的是通过Wi-Fi,有的是通过GPS,有的是通过AGPS(Assisted GPS的缩写,即辅助GPS定位系统),最后拿到的经纬度定位数据是有一些误差的。一般来说,通过GPS定位精度最准,能精确到15米左右。&
  他说,手机定位是通过经纬度,显示的距离是平面距离,不管住1楼还是10楼,定位距离是不变的。也就是说,与真实距离肯定会存在相当的误差。但是&大致位置肯定能够知道,再拿具体照片比对一下,还是比较容易找到准确地点的&。
  在西溪数码港二楼卖手机的小李说,身边晒自己照片的人比比皆是,如果实在不放心,用微信时记得不要使用&附近的人&功能、不要显示自己的位置就可以了。&但有的软件没有办法关闭这些选项,比如最近很火的运动类手机软件&咕咚运动&,本身就是通过GPS定位的,会一直定位你的位置。&
  用智能手机时,能避免显示位置就避免
  早在两年多前,网上就盛传&微信三点定位&可暴露位置,快报《好奇实验室》也做过相关实验。
  三点定位指的是:以三个不同的地方为圆心,&查找附近的人&显示的距离为半径,画出3个圆。而在这三个圆的交点位置,就是目标微信用户的具体位置。这种方法在数学上被称作三点定位比较测量法。
  当时,杭州下城PTU的民警还用这种方法实测了一下,发现确实可能暴露部分位置信息。
  昨天,我就手机定位的安全问题请教了一位资深网警。
  他说,这个问题确实需要重视,日常防范要做好。虽然手机定位基本上都有误差,但是肯定能锁定大致方向,再结合其他手段比对,找到准确位置并不难。&所以我的微信朋友圈从来都不晒家人尤其是孩子的照片,也不会晒自己的位置。能够避免显示位置的,就要避免。&
  &至于有些软件必须要进行GPS定位,一定会显示你的位置的,你也可以选择不用这个软件。&
  普通用户实在需要用这些定位软件,一定要学会保护自己的信息安全,定位功能只在需要用时开启,用完及时关闭,不长期开启。另外,下载时不要选择那些小众的知名度不高的第三方软件,安装过程中也要尤其注意安装提示。
  对于大家日常使用最多的微信,这位资深网警提醒&&(1)不要在固定地点反复使用、查找&附近的人&;(2)及时&清除位置信息并退出&;(3)小心陌生人,不要随便加对方为好友。(都市快报)
本网转载其他媒体稿件目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如因转载的作品内容涉及您的权益,请尽快与本网联系。
24小时新闻排行
安徽国内国际最近浏览论坛:
关注/收藏的论坛:
热门论坛推荐:
验证码:输入右侧的字母和数字
下次自动登录
还未注册用户?&&&
您的赞赏是对楼主的鼓励!
1~200元之间
金额须在1~200元之间
自动加载图片
大家都用哪个手机地图 推荐个定位准的
我以前用的 塞班系统的手机 用百度地图 定位能精确到20米。 现在换个 安卓系统的手机 再用百度地图 定位能差一条街【我在街道中部地图定位显示我在隔壁街道的最北头】 &又下载个 悠悠地图 定位跟百度差不多。大家都用什么地图呀? 定位准吗? 求一款定位精准度高的地图, 流量不是问题。
引用 超越极限0
21:43:58 发表于 主楼 的内容:
禁止发布色情、反动及广告内容!
图语、凯立德、百度都深度用过,精度非常好。楼主说的百度不准使用中未感觉出来,GPS下还是蛮准的,如果是GPRS会略有偏差(步行时,开车没试过)
引用 雪林飞絮
21:47:21 发表于 1楼 的内容:
禁止发布色情、反动及广告内容!
Nokia N8自带地图,效果强悍。
引用 车模爱好者
21:49:14 发表于 2楼 的内容:
禁止发布色情、反动及广告内容!
21:47:21 发表在
图语、凯立德、百度都深度用过,精度非常好。楼主说的百度不准使用中未感觉出来,GPS下还是蛮准的,如果是GPRS会略有偏差(步行时,开车没试过)
我只用过百度的
以前的 塞班手机用的挺好的 定位也准。 换了安卓就不准了, 不知道怎么回事
引用 超越极限0
21:55:01 发表于 3楼 的内容:
禁止发布色情、反动及广告内容!
发表500字以上推荐口碑,点评客观公正,通过工作人员审核,特授予【推荐口碑】专属勋章。
完成汽车之家·知道升级任务,解答问答,并被提问者采纳为满意回答,可得解答达人一级勋章
参与汽车之家10周年“真交情,十年如初”活动,获此勋章,感谢一路上有你的陪伴。
上传购车发票,点评购车服务感受,通过工作人员审核,特授予【真实报价员】专属勋章。
分享购车价格,点评购车服务感受,通过工作人员审核,特授予【家de报价员】专属勋章。
凯立德,高德,谷歌
引用 咸酱威武
21:55:31 发表于 4楼 的内容:
禁止发布色情、反动及广告内容!
21:49:14 发表在
Nokia N8自带地图,效果强悍。
那也不能为了一个地图就在换个手机吧
引用 超越极限0
21:56:04 发表于 5楼 的内容:
禁止发布色情、反动及广告内容!
参与汽车之家论坛内部测试的网友,在测试中找出隐存的问题,为正式上线的时候,能保证无问题,无BUG。
实际用过后得出结论:除了凯立德,其他导航地图都是鸡肋!
未曾清贫难成人,不经打击老天真
引用 摆度一下
22:01:14 发表于 6楼 的内容:
禁止发布色情、反动及广告内容!
21:55:01 发表在
我只用过百度的 以前的 塞班手机用的挺好的 定位也准。 换了安卓就不准了, 不知道怎么回事
这个就不知道了,我也是安卓。试试凯立德吧。
引用 雪林飞絮
22:02:52 发表于 7楼 的内容:
禁止发布色情、反动及广告内容!
22:02:52 发表在
这个就不知道了,我也是安卓。试试凯立德吧。
一会下一个试试
引用 超越极限0
22:08:20 发表于 8楼 的内容:
禁止发布色情、反动及广告内容!
22:01:14 发表在
实际用过后得出结论:除了凯立德,其他导航地图都是鸡肋!
就这么着了
下一个凯立德试试
引用 超越极限0
22:08:50 发表于 9楼 的内容:
禁止发布色情、反动及广告内容!
21:55:31 发表在
凯立德,高德,谷歌
引用 超越极限0
22:09:05 发表于 10楼 的内容:
禁止发布色情、反动及广告内容!
22:01:14 发表在
实际用过后得出结论:除了凯立德,其他导航地图都是鸡肋!
百度还是不错的 至少用塞班的时候挺准的
引用 超越极限0
22:09:58 发表于 11楼 的内容:
禁止发布色情、反动及广告内容!
发表1000字以上精华口碑,点评生动,以理服人,通过工作人员审核,特授予【精华口碑】专属勋章。
Olá,Olá,2014巴西世界杯来啦~快来加入汽车之家世界杯车迷盛宴吧,下一个预言帝就是你。
发布用车问题,分享用车经验,即可获得知道上线勋章。
使用“发游记”发表帖子就会为热爱旅行的你颁发“最爱旅行一级勋章”一枚哦。
使用“发游记”发表游记并成为精华帖,就会为热爱旅行的你颁发“游记最精彩一级勋章”一枚哦。
搜狗地图,开车使用尚可!安卓手机2.3.4
岂能尽如人意
但求无愧我心
引用 平常心866
22:11:40 发表于 12楼 的内容:
禁止发布色情、反动及广告内容!
你没开GPS和AGPS吧,不开的话只根据基站定位,差几条街都正常
引用 可读可写可执行
22:14:55 发表于 13楼 的内容:
禁止发布色情、反动及广告内容!
22:14:55 发表在
你没开GPS和AGPS吧,不开的话只根据基站定位,差几条街都正常
GPS肯定开了, AGPS是什么? 
引用 超越极限0
22:17:50 发表于 14楼 的内容:
禁止发布色情、反动及广告内容!
22:17:50 发表在
GPS肯定开了, AGPS是什么?
辅助gps定位的,看看设置里应该有
引用 可读可写可执行
22:28:48 发表于 15楼 的内容:
禁止发布色情、反动及广告内容!
汽车之家公益系列活动,让我们一起抵制安全带卡扣!汽车之家呼吁大家一起来响应抵制危害安全用品的公益
参与汽车之家论坛内部测试的网友,在测试中找出隐存的问题,为正式上线的时候,能保证无问题,无BUG。
为庆祝汽车之家口碑上线,填写真实汽车口碑,分享对汽车的真知灼见,即可获得口碑达人勋章。
发表500字以上推荐口碑,点评客观公正,通过工作人员审核,特授予【推荐口碑】专属勋章。
参与汽车之家10周年“真交情,十年如初”活动,获此勋章,感谢一路上有你的陪伴。
gps是卫星定位,agps是基站定位,现在的各路地图在看地图时基站定位即可,导航时必须要求卫星定位,网站类地图看地图用百度,导航用google,几大安卓论坛都有带导航破解版google地图,国产软件类地图还是算了吧,比塞班时代的r66差飞了。& 为毛推荐google导航呢,举个小例子,目前我用过的网站类,国产软件类导航,只有google地导航计算路径时对城市快速路优先,跟我预想的相差无几,比如分别用百度google搜文化中心到西沽公园的行车线路,百度让你从市中心穿,google让你走快速,虽然走快速远点,但是其实更快更省油。
引用 seamans
23:15:09 发表于 16楼 的内容:
禁止发布色情、反动及广告内容!
Olá,Olá,2014巴西世界杯来啦~快来加入汽车之家世界杯车迷盛宴吧,下一个预言帝就是你。
参与汽车之家10周年“真交情,十年如初”活动,获此勋章,感谢一路上有你的陪伴。
完成汽车之家·知道升级任务,解答问答,并被提问者采纳为满意回答,可得解答达人一级勋章
凯立德 很好
引用 shangcl
08:21:16 发表于 17楼 的内容:
禁止发布色情、反动及广告内容!
诺基亚的地图是很牛的。是最好的,他的地图业务都能拿出来单独卖。。安卓没有那么多投资,自然不能做的那么好。
引用 刨刨的威乐
08:30:25 发表于 18楼 的内容:
禁止发布色情、反动及广告内容!
我用的百度比凯立德好用!!
引用 陈瑜珞焱
10:26:39 发表于 19楼 的内容:
禁止发布色情、反动及广告内容!
参与汽车之家质量评价调研,反馈真实质量情况,特授予汽车之家“质量评价员”称号,并奖励专属勋章。
22:17:50 发表在
GPS肯定开了, AGPS是什么?
在设置里打开GPS不一定真的打开了,如果真的开了,运行地图应用的时候,提示栏会有图标。反正我的moto MT917就这么腻歪人,每次用都要从设置里关掉,然后重启,然后打开才行。
引用 cn_richard
12:49:46 发表于 20楼 的内容:
禁止发布色情、反动及广告内容!
正在提交回复,请稍候...
mainTopic.xRender=YES
楼主有更新时通知我
已取消此帖的收藏
您已被楼主屏蔽,不能回复该帖子App定位和地图的那些坑 - 简书
App定位和地图的那些坑
开发App时会遇到各种坑,本文分享我们在iOS/Android系统中定位和地图中遇到的坑,以及携程App的解决方案。定位定位即获取用户当前经纬度,iOS平台都是通过系统SDK接口获取的,因此所有App获取定位及精度的能力是相同的,即使Google Maps、百度地图、高德地图这种专业地图App也是如此;Android平台由于Google Service被阉割,国内App通常是通过高德、百度等第三方SDK接口获取定位信息,因此在定位能力和精度上会有些差异。坐标系问题App定位遇到的第一个坑是坐标系问题。目前常见的坐标系有三种:地球坐标(WGS84,国际公认坐标),火星坐标(GCJ02,国家标准,适用于高德百度地图大陆+港澳部分、Google地图大陆部分),百度坐标(BD09,适用于百度地图大陆+港澳台部分)。坐标系需要和地图关连才有意义,只有正确匹配地图坐标系的坐标才能在该地图上完美标识位置,否则就会存在偏移。另外对于旅行类App而言,经常需要根据用户当前位置查询周围酒店或者其他POI信息,并且按距离排序,如果坐标系不匹配,就会由于坐标系偏移产生排序问题。iOS系统上通过定位服务CLLocation相关接口获取定位信息时,获取的经纬度坐标系是WGS84地球坐标,如果直接将该坐标系在iOS系统地图中打点,会发现存在偏移,因为iOS系统地图查看国内时使用的是高德地图数据(这里有另一个坑,详见下文),因此只接受GCJ02火星坐标。如果使用高德或者百度iOS定位SDK中的接口,是可以直接获得火星偏移后的坐标的,由于App Size问题,携程App没有集成第三方SDK,而是通过近似偏移算法直接做偏移(自行Google『transform From WGS To GCJ』)。然而如果在iOS系统地图中获取当前位置,同时在国内,那么获取到的坐标系直接是GCJ02火星坐标系,这点需要小心。Android系统上通常使用高德或者百度定位SDK获取定位信息。高德SDK没有坐标系参数设定,在大陆和港澳地区获取的坐标系即为GCJ02坐标系,在台湾和海外地区都是WGS84坐标系;百度SDK可以自行设定坐标系参数,即返回WGS84坐标系,还是GCJ02坐标系或者BD09坐标系(注意BD09坐标系只适用于百度地图),如果设定的是GCJ02坐标系,它在大陆+港澳台地区获取的坐标系都是GCJ02坐标系。海外地图(非大陆和非港澳台地区)是没有火星坐标或者百度坐标之说,都是标准的WGS84地球坐标系。精度问题第二个常见的坑是定位精度问题,经常有用户或者Boss反馈,为什么两台一样的手机,获取的当前位置不一样?我明明在这个位置,为什么定位却显示在附件另一个位置,相差那么远?这类问题的根源是手机不同定位方式导致的,通常手机定位方式有三种:1. GPS:根据系统GPS模块获取经纬度,精度10-100米左右,限制是容易受环境影响,在室内几乎不起作用。2. 基站:根据运营商基站位置计算经纬度,精度米左右,限制是定位较慢,精度差。3. WIFI:根据周围WIFI路由器位置计算经纬度,精度100-200米左右,限制是受周围WIFI数量和分布影响,需要打开手机WIFI开关。如果用户没有打开WIFI开关,定位的精度会受到极大的影响,下图是同一部iPhone手机在相同位置,百度地图在打开或者关闭WIFI场景下的效果对比,直观反映出是否打开WIFI开关对于定位精度的影响。携程iOS App的用户统计数据显示37.1%在非WIFI情况下定位精度超过了1000米,因而用户会感觉偏移很厉害。
一定会有同学疑问,开车导航时周围通常没有WIFI,为什么地图软件可以精确的把用户当前位置显示在道路上。那是因为在导航模式下,用户的运动速度和方向信息是可以获取的,导航算法会将用户位置重新计算后定位在道路上,如果把车停在路边,关闭WIFI,一样有可能偏移很严重。地图App地图同样存在坐标系和精度问题。前面说过在地图里显示坐标点时,需要匹配正确的坐标系,否则就会产生偏移。iOS平台的系统地图就存在数据源地图坐标系导致的一个大坑,iOS系统地图App以及系统地图组件MKMapView的数据源分为两种:高德数据源和TomTom数据源。最坑的是iOS地图使用的数据源和当前手机所处的位置是相关的:如果手机在大陆地区,iOS地图使用的是高德地图数据源:此时用户查看大陆和港澳台地图细节信息时,使用的是GCJ02火星坐标系,同时地图显示精度很高,但是看海外地图时,由于数据源问题精度就会很差(坐标系是WGS84),例如下图看新加坡,如果你要在地图中显示POI打点,效果可想而知。
iOS海外地图
如果手机在港澳台和海外地区,iOS地图使用的是TomTom地图数据源,该地图匹配的是WGS84地球坐标系,如果用户在海外查看国内地图,同时你的POI打点坐标系是GCJ02火星坐标系,那么就会产生偏差;另外手机在港澳台和海外地区时查看港澳台和海外的地图数据精度很好,然而查看国内地图便会精度偏低。因此要想在iOS地图中正确打点,就需要先行判断使用的地图数据源,以及对应的坐标系,同时使用的POI坐标系务必与地图坐标系匹配,否则就会出现偏差。下图是旅行类App显示香港一家酒店的POI打点,可以看出除了携程外其他App都有偏差,其中三家偏差的方式还是一样的,原因应该是他们服务端仅保存了这家酒店的WGS84地球坐标系坐标。
POI显示对比
Android平台我们使用的是百度地图(高德地图情况相同),然而百度地图在大陆+港澳台地区的数据源精度是正常的,海外地区的精度就和iOS平台下高德数据源在海外的精度类似,不够详尽(百度在日韩地区的地图精度已经变好,数据源的精度提升确实需要一个过程)。我们的解决办法是开发WebView版的Google地图组件,载入,见下图效果。
Android自定义WebView地图
前面提到的iOS系统地图精度问题我们也是用相同方法解决的,只是显示时处理逻辑更复杂,人在国内看国外地图,人在国外看国内地图两种情况就会使用自定义Google地图替代,其他情况下继续使用系统地图。
iOS自定义WebView地图
WebView版地图虽然操作体验比Native地图差一些,但是显示数据源精度高很多,对用户价值更大。综述App定位和地图存在问题其实都是国内地理信息特殊标准导致的,我们只能使用一些tricky的方式解决,一切都是为了部落,不对,为了用户:)欢迎关注携程无线技术公众号『CtripMobile』:
CtripMobile地图和定位功能的实现-篇幅略大,手机慎入-爱编程
地图和定位功能的实现-篇幅略大,手机慎入
来一起学习下地图和定位的使用吧,如有不足,欢迎指正
一.定位功能
1.ios7中的定位
& & &1.1 导入 CoreLocation框架
& & &1.2 创建 CLLocationManager对象
& & & & & 注意:要用强指针指向这个对象,一般采用懒加载来创建& & &
1 private lazy var mgr : CLLocationManager = CLLocationManager()
& & &1.3 设置代理,实现代理方法
& & &1.4 开始定位
mgr.startUpdatingLocation()
& & &1.5 优点:不需要设置用户的授权
& & & & & 在info.plist加上一个key & Privacy - Location Usage Description 写在value上的文字,可以显示在提示权限的文本框内
2.ios8(之后)的定位
& & &2.1 请求定位步骤
& & & & & 2.11 导入CoreLocation框架
& & & & & 2.12 懒加载CLLocationManager对象
& & & & & 2.13 请求授权 (1) whenInUse (2) always
& & & & & 2.14 注意:必须把授权对应的key值 添加到info.plist文件中
& & & & & 2.15 设置代理,实现代理方法
& & & & & 2.16 开始定位
& & &2.2 定位属性的应用
& & & & & 2.21 精确度的使用
& & & & & & && desiredAccuracy精确度越高,越耗电
& & & & & & & &属性接收double类型的值,不过最好传系统给定好的值
&&&&&&&& kCLLocationAccuracyBestForNavigation: 导航精确度(最精确)&&&&&&&& kCLLocationAccuracyBest: 最好精确度(默认)&&&&&&&& kCLLocationAccuracyNearestTenMeters: 10米的误差&&&&&&&& kCLLocationAccuracyHundredMeters: 100米的误差&&&&&&&& kCLLocationAccuracyKilometer: 千米误差
&&&&&&&& kCLLocationAccuracyThreeKilometers: 三千米的误差&
mgr.desiredAccuracy = kCLLocationAccuracyBestForNavigation
& & & & & 2.22 移动一段距离,再次重新定位
& & & & && 设置用于移动多少距离,重新进行定位& & & & &
mgr.distanceFilter = 100
&&&&&2.3 位置信息的获取
& & & & & 2.31 发送完请求定位,怎么获取位置信息?
& & & & & & & &在代理方法的闭包中,有一个数组,返回了很多信息在里面
& & & & & 2.32 我们常用的信息就是经纬度
二.计算两个经纬度的距离
1.获取当前位置信息
&&&&&1.1 导入框架
&&&&&1.2 懒加载管理者对象
&&&&&1.3 请求授权
&&&&&1.4 添加key值
&&&&&1.5 设置代理,实现代理方法
& & &1.6 开始定位 & &&
2.获取另一个位置的经纬度
3.计算两个位置的距离 & distanceFromLocation
三.简易指南针的制作
1.实现思路
& & &监听手机头方向的改变,在手机屏幕上放一张图片,始终指向北(根据手机方向的改变旋转)
2.界面搭建
& & &拖一个UIImageView放在屏幕中央,里面放一张图片
3.监听手机头方向的改变
& & &3.1 怎么监听?
& & & & & 通过发送请求(定位服务),获取手机头的方向进行监听
& & &3.2 具体实现&
& & & & & 3.21 导入CoreLocation框架
& & & & &&3.22 懒加载CLLocationManager对象
& & & & &&3.23 请求授权 (1) whenInUse (2) always
& & & & &&3.24 注意:必须把授权对应的key值 添加到info.plist文件中
& & & & &&3.25 设置代理,实现代理方法
& & & & & 3.26 请求手机头方向
& & & & & 3.27 获取真北方向
& & & & & 3.28 将真北方向转换为弧度
& & & & & 3.29 让图片根据弧度进行旋转(注意:图片旋转的弧度要取反 , &要和屏幕旋转方向相反才能保持一直指向一个方向)
4.对指南针优化
& & &4.1 真实的指南针指向一个位置,会来回摆动两下才固定位置
& & & & & 代码实现的指南针没有这个效果
& & &4.2 如何实现这个效果?
& & & & & 可以通过一个动画来实现&
// Damping : 阻力系数 (0~1.0)
initialSpringVelocity:回弹速度
UIView.animateWithDuration(0.5, delay: 0.0, usingSpringWithDamping: 0.8, initialSpringVelocity: 5.0, options: [], animations: {
self.imageView.transform = transform
}, completion: nil)
四.区域监听
1.需求,当进入某指向区域,提醒用户进入该区域,离开该区域也对用户进行提醒
2.实现方案步骤
& & &2.1 懒加载 CLLocationManager对象
& & &2.2 请求授权(注意:必须使用alyays授权方式) ,配置info文件
& & &2.3 设置代理
& & &2.4 创建监听区域
& & &2.5 实现代理方法 并 开始监听
& & &3.1 当之前添加过监听区域时,再次添加新的监听区域,还会对之前的区域进行监听
& & &3.2 不想监听之前的区域,必须通过代码移除之前的区域
五.地理编码&反地理编码
需求:输入地理名称,地理编码获得该位置的经纬度. & 输入经纬度,输出对应位置的地理名称
1.界面搭建
& & 1.1 &整个界面放在屏幕的中心,怎么实现?
& & & & & 1.11 可以用view包装&
& & & & & & & &优缺点:要做大量的约束 &, 但可以应用于任何版本
& & & & & 1.12 ios9之后可以用UIStackView来包装
& & & & & & & &优缺点:布局简便 & 只能适用于ios9(之后)
2.地理编码
& & &2.1 拿到用户输入的地理名称 (导入框架CoreLocation)
& & &2.2 地理编码
& & & & & 2.21 创建 CLGeocoder对象
& & & & & 2.22 对地理名称进行地理编码
geocoder.geocodeAddressString(address) { (&#[CLPlacemark]?#&, &#NSError?#&) in
& & & & & 2.23 对闭包中的CLPlacemark数据就行解析(遍历)
& & & & & & & &一个地理名称可能对应多个地方,所以编码后的到的结果是一个数组
& & & & & 2.24 获取数组中元素的地理位置(经纬度)
& & & & & 2.25 将经纬度显示到界面
3.反地理编码
& & &3.1 拿到用户输入的经纬度
& & &3.2 对经纬度进行反地理编码
& & & & & 3.21&创建 CLGeocoder对象
& & & & &&
& & & & & 3.22&对经纬度进行反地理编码
geocoder.reverseGeocodeLocation(location) { (&#[CLPlacemark]?#&, &#NSError?#&) in
& & & & & 3.23 对闭包中的CLPlacemark数据就行解析(遍历)
& & & & & & & &一个经纬度可能对应多个位置(苹果这么设计的) &所以编码后返回一个数组
& & & & & & & &一个位置包含多个信息(省/市/街道/国家/经纬度/) &编码后的结果是字典数组
& & & & & 3.24 取出数组中的一个位置(字典),再获取位置信息(取出字典的元素)
& & & & & & & &
& & & & & 3.25 把获取到的地理名称显示到界面
地理编码&反地理编码源代码
1 class ViewController: UIViewController {
// MARK:- 控件属性
@IBOutlet weak var addressTextView: UITextView!
@IBOutlet weak var latitudeTextField: UITextField!
@IBOutlet weak var longitudeTextField: UITextField!
// MARK:- 懒加载属性
private lazy var geocoder : CLGeocoder = CLGeocoder()
11 // MARK:- 地理编码
12 extension ViewController {
@IBAction func geocode() {
// 1.获取用户输入的地址名称
guard let address = addressTextView.text else {
// 2.对地理名称进行地理编码
geocoder.geocodeAddressString(address) { (placemarks : [CLPlacemark]?, error : NSError?) in
// 1.错误校验
if error != nil {
print(error)
// 2.对结果进行校验
guard let placemarks = placemarks else {
// 3.遍历所有的结果
for place in placemarks {
print(place.name)
// 获取地理位置
guard let location = place.location else {
// 获取经纬度
let latitude = location.coordinate.latitude
let longitude = location.coordinate.longitude
// 将经纬度显示textField中
self.latitudeTextField.text = "\(latitude)"
self.longitudeTextField.text = "\(longitude)"
52 // MARK:- 反地理编码
53 extension ViewController {
@IBAction func reverseGeocode() {
// 1.获取用户输入的经纬度
guard let latitude = latitudeTextField.text, let longitude = longitudeTextField.text else {
// 2.将经纬度转成CLLocation对象
guard let latitudeD = Double(latitude), let longitudeD = Double(longitude) else {
let location = CLLocation(latitude: latitudeD, longitude: longitudeD)
// 3.反地理编码
geocoder.reverseGeocodeLocation(location) { (placemarks : [CLPlacemark]?, error : NSError?) in
// 1.错误校验
if error != nil {
print(error)
// 2.对结果进行校验
guard let placemarks = placemarks else {
// 3.遍历结果
for place in placemarks {
guard let addressDict = place.addressDictionary else {
guard let addressArray = addressDict["FormattedAddressLines"] as? [String] else {
guard let address = addressArray.last else {
self.addressTextView.text = address
六.把定位封装为工具类
1.将工具类设计成单例对象
2.封装请求方法,在方法中传入闭包
& & &2.1 使用属性将闭包保存起来. (因为在代理方法才能拿到位置信息)
& & &2.2 请求用户位置(1.懒加载管理者对象,并在对象中直接设置请求授权和代理)
3.在代理方法中获得用户位置信息,并赋值给闭包属性
4.停止请求用户的位置
&&&&&mgr.stopUpdatingLocation()
5.当第一次发送请求位置信息,会返回多次位置信息,怎么解决这个问题?
& & &用户只需要定义一个Bool属性,对属性进行判断,为true就接收返回的位置信息
七.使用第三方框架请求位置信息
去github搜索LocationManager 找到框架去使用
一般用oc版的,swift也能用
*********************地图篇*************************
一.地图的基本展示
1.地图可以用一个MapView控件来展示
& & &注意:要导入MKMapKit框架
2.地图的展示类型,可以通过属性 mapType设置
& & &地图分为:标准地图,卫星地图,混合地图 & ios9之后新出了: 三维混合/三维卫星地图
3.地图上可以展示哪些的内容
& & &比例尺,指南针,交通状况,标志建筑,显示用户位置(后面详细介绍)
4.可以对地图进行哪些操作
& & &缩放:zoomEnabled
& & &旋转:rotateEnabled
& & &滚动:scrollEnabled
二.显示用户的位置
1.怎么显示用户的位置?
& & &1.1 设置地图的一个属性即可mapView.showsUserLocation = true &或&mapView.userTrackingMode = .FollowWithHeading/. Follow
& & &1.2 注意:一定要设置请求授权
& & & & & 1.21 创建 CLLocationManager对象
& & & & & 1.22 调用方法授权& requestWhenInUseAuthorization 或 always
& & & & & 1.23 在info文件中添加对应的key值
& & & & &&
2.获取用户的位置
& & &2.1 设置地图的代理
& & &2.2 实现代理方法
& & & & & 在代理方法中通过userLocation.location?.coordinate&拿到经纬度
3.跟踪用户的位置
& & &3.1 首先要获取用户的位置
& & &3.2 设置属性即可 &
mapView.userTrackingMode = .FollowWithHeading/. Follow
4.设置地图的显示区域
& & &4.1 通过一个属性就可以设置(一般在代理方法中设置)
mapView.setRegion(&#T##region: MKCoordinateRegion##MKCoordinateRegion#&, animated: &#T##Bool#&)
& & &4.2 需要传入MKCoordinateRegion参数,那么就需要创建这个参数& &&
MKCoordinateRegion(center: &#T##CLLocationCoordinate2D#&, span: &#T##MKCoordinateSpan#&)
&&&&&4.3 创建MKCoordinateRegion又需要传入CLLocationCoordinate2D和MKCoordinateSpan参数
& & &4.4 创建CLLocationCoordinate2D参数(经纬度) &可以在代理方法中获得
& & &4.5 创建MKCoordinateSpan参数 & 1纬度 = 111km& & &
let span = MKCoordinateSpan(latitudeDelta: 0.01, longitudeDelta: 0.01)
& & & & &&
5.点击按钮,回到用户的位置
& & &5.1 当用户拖动地图时,想让地图回到自己的位置,如果还需要拖动回来就太麻烦了
& & & & & 可以设置一个按钮:点击按钮,立刻让地图的中心点就是自己的位置
& & &5.2 怎么实现?
& & & & & 获取用户的位置(经纬度coordinate) ,将这个位置设置为地图的中心点即可
三.在地图上展示大头针
1.添加大头针
& & &1.1 创建大头针对象&addAnnotation(annotation: MKAnnotation)
& & & & & 1.11 需要创建一个MKAnnotation
& & & & & 1.12 进去头文件,发现MKAnnotation 是一个协议, 也就是需要传一个遵守该协议的对象
& & & & & 1.13 自定义一个模型,遵守协议 , 协议里面只有三个计算属性
& & & & & & & &也就是说,只需要实现这三个属性(在模型中定义这三个属性 &注意:要定义为普通属性)
& & & & & 1.14 创建模型对象
& & &1.2 将大头针对象添加到mapView中
& & &addAnnotation(annotation: MKAnnotation)
2.点击屏幕,在点击位置添加大头针
& & &2.1 获取用户点击的位置
& & &2.2 将点击的点转成经纬度
& & &2.3 根据经纬度创建大头针模型
& & &2.4 将大头针模型添加到mapView中
3.自定义大头针(修改大头针的子类)
& & &3.1 系统给定的大头针样式单一,我们想要其它样式的大头针,需要自定义大头针
& & &3.2 怎么自定义大头针?
& & & & & 大头针能添加到view上,一定是一个控件,只要拿到这个控件,就可以进行修改
& & &3.3 怎么拿到大头针的view?
& & & & & 在代理方法中会把大头针添加到mapView上,这个时候就可以拿到
& & &3.4 修改完大头针,发现点击大头针看不到title和subTitle了 &为什么?
& & & & & 需要设置一个属性才可以看到annoView?.canShowCallout = true
& & &3.5 设置大头针的样式,发现标记用户位置的图标也变为了大头针, &不想让标记位置的图标变为大头针,怎么办?
& & & & & 判断大头针是否为用户值得大头针 MKUserLocation是的话就返回nil &(返回nil就是系统默认的大头针样式)
& & &3.6 对大头针进行性能优化(重用)
& & & & & 和设置tableView的重用步骤差不多
4.自定义大头针(修改大头针,自定义大头针的image)
& & &4.1 系统自带的大头针只能显示一个大头针,我们想让大头针显示图片,只能自定义
& & & & & 新建一个类,继承自 MKAnnotationView& 用的时候,直接创建这个类即可
& & &4.2 怎么设置大头针显示的图片?
& & & & & 只需要设置Image属性即可
& && 4.3 如何让大头针显示不同的图片?
& & & & & &对大头针类型进行判断 ,给不同类型大头针设置不同的图片即可
& & & 4.4 大头针非常多,判断的话很麻烦,也没技术含量,怎么解决?
& & & & & &给大头针对象添加一个属性: iconName 属性里面保存对应的照片名称即可
& & & & & &设置的时候,只需要取出属性的值,设置给UIImageView即可
& & &4.5 想在title左右两边也显示图片,怎么办?
& & & & & &设置两个属性即可 leftCalloutAccessoryView & & rightCalloutAccessoryView&& &&
5.代码重构
& & &5.1 为什么要进行代码重构?
& & & & & 把自定义大头针的操作全部写在控制器中,控制器太臃肿
& & &5.2 怎么对控制器进行&瘦身"
& & & & & 把自定义大头针的代码抽取到一个view中
& & &5.3 怎么抽取?
& & & & & 自定义大头针的view ,把相关代码封装到view里面
& & &5.4 抽取代码要用到模型和mapView怎么办?
& & & & & 在自定义view中定义模型属性 & 把mapView当成参数传进去
& & &5.5 注意: 父类中已经存在这个模型属性了,在子类中不允许重复定义,怎么办?
& & & & & 重复定义属性的时候,重写属性监听器方法即可
6.给大头针添加动画
& & &6.1 系统自带的大头针可以设置坠落动画,自定义的大头针怎么设置动画?
& & & & & 我们只要拿到大头针view的frame就能实现坠落动画
& & &6.2 怎么拿到大头针的frame
& & & & & 只需要获取大头针的view即可
& & &6.3 在代理方法中可以拿到view
& & &6.4 执行动画步骤
& & & & & 6.41 保存大头针的y值
& & & & & 6.42 设置大头针的y值为0
& & & & & 6.43 再设置大头针的y值为原来的值,并执行动画
四.实现导航功能(了解)
1.利用系统的地图实现导航
& & &1.1 在自己app中打开系统地图,实现导航& &
openMapsWithItems(mapItems: [MKMapItem], launchOptions: [String : AnyObject]?) -& Bool
& & &1.2 需要在方法中传入一个数组[MKMapItem](起点,终点) 和一个字典 [String : AnyObject] (导航的参数:驾车还是步行等)
& & &1.3 创建MKMapItem类型的起点和终点
& & &1.4 起点通过的一个方法就能实现,终点要利用地理编码获得
@IBAction func startNavigating() {
// 1.获取用户输入的地址
guard let address = destinationTextField.text else {
// 2.地理编码
geocoder.geocodeAddressString(address) { (placemarks : [CLPlacemark]?, error : NSError?) in
// 3.对错误进行校验
if error != nil {
// 4.获取placemark
guard let clpm = placemarks?.first else {
// 5.创建终点的item
let mkpl = MKPlacemark(placemark: clpm)
let destinationItem = MKMapItem(placemark: mkpl)
// 6.获取起点的item
let sourceItem = MKMapItem.mapItemForCurrentLocation()
// 7.调用对应的导航方法
self.startNavigationWithSoureItem(sourceItem, destionationItem: destinationItem)
private func startNavigationWithSoureItem(soureItem : MKMapItem, destionationItem : MKMapItem) {
// 1.获取起点和终点的item,并且放入到数组中
let items = [soureItem, destionationItem]
// 2.设置导航的参数
MKLaunchOptionsDirectionsModeKey: 步行/驾车
MKLaunchOptionsMapTypeKey: 地图类型
MKLaunchOptionsShowsTrafficKey: 是否显示交通状况
var launchOptions = [String : NSObject]()
launchOptions[MKLaunchOptionsDirectionsModeKey] = MKLaunchOptionsDirectionsModeDriving
launchOptions[MKLaunchOptionsMapTypeKey] = MKMapType.Hybrid.rawValue
launchOptions[MKLaunchOptionsShowsTrafficKey] = true
// 3.开始导航
MKMapItem.openMapsWithItems(items, launchOptions: launchOptions)
2.请求整个导航线路,在自己app中把线路画出来
& & &2.1 可以通过 MKDirections对象的一个方法实现
& & &2.2 首先要创建 MKDirections对象
MKDirections(request: &#T##MKDirectionsRequest#&)
& & &2.3 还需要创建MKDirectionsRequest对象
& & &2.4 创建MKDirectionsRequest对象,并设置属性(起点位置和终点位置)
& & &2.5 通过MKDirections对象方法请求 calculateDirectionsWithCompletionHandler路线
& & &2.6 获取所有路线,并把路线通过 addOverlay方法添加到mapView上
五.集成百度地图
1.如何使用第三方SDK
& & &1.1 搜索想要集成的SDK
& & &1.2 进入官方下载SDK开发包
& & &1.3 查看demo程序(运行看看有哪些功能)&
& & &1.4 根据API一步步集成(官方一般有文档教程)
& & &详情可以查看:
2.基本集成
& & &2.1 先将需要集成的功能的框架导入到项目
& & &2.2 创建桥接文件(根据需求创建, 只有开发包是oc &自己代码是swift才需要创建)
& & &2.3 在桥接文件中导入头文件(官方文档一般会给需要导入的头文件)
& & &2.4 配置桥接文件
3.请求授权
& &3.1 如何授权?
& & & & & 在AppDelegate文件中进行授权
& & &3.2 授权完,运行直接报错,为什么?
& & & & & 百度一些框架依赖系统的一些框架,还需要导入系统的一些框架
4. BMKMapView的展示
& & &4.1 创建 BMKMapView对象
& & &4.2 设置frame,添加到屏幕上
5.定位功能的实现
& & &通过代理就可以实现
6.POI检索功能(查找功能)
& & &注意:发起检索一定要在地图添加到view上之后
版权所有 爱编程 (C) Copyright 2012. . All Rights Reserved.
闽ICP备号-3
微信扫一扫关注爱编程,每天为您推送一篇经典技术文章。

我要回帖

更多关于 百度地图定位手机位置 的文章

 

随机推荐