精华内容
下载资源
问答
  • 针对现有无线定位算法精度较低和成本较高的不足,结合基于发光二极管(LED)照明器件的可见光通信(VLC)系统,考虑相机成像镜头材质不均、装配偏差等因素对真实图像的扭曲和畸变,设计提出了一种新型的基于LED 信号光源...
  • 这款菜单大家需要注意HOVER状态下背景图片定位发生了变化,从而实现了这样的效果。 本实例是一位国外的朋友所写,不进行任何翻译,直接出来,大家可以偿试阅读,如果遇到困难可以求助于翻译软件。 不断的提高自己...
  • 通过模板诱导有机发光小分子定位沉积的方法构筑了大面积纳微米尺度的荧光图案.模板是以纳米压印技术构筑的聚合物微结构为阻挡层蒸镀金属,经Lift-off后形成的金属微结构.在模板表面,有机发光小分子与金属区域的结合能...
  • 在App中使用地图定位十分常见,购物功能的可以直接定位当前位置,动态功能可以定位当前位置发出,社交功能可以定位周边用户等等。这里我使用高德地图定位当前位置并显示地址和经纬度。 github代码传送门 先上效果...
  • ios的 定位 及高德地图定位

    千次阅读 2015-04-24 10:28:41
    关于定位可分为 普通定位和地图定位。 普通定位只需要显示城市信息或者位置信息。 地图定位需要显示并且标注大头针在地图。 其实原理是一样的。只是展示方式不同而已。 废话不多说了 附上代码  - (id)init {...

    最近休息了一段时间。老有朋友问我定位怎么做的。由于每个需求不同。总结如下。希望用到的朋友能做个参考。

    关于定位可分为 普通定位和地图定位。

    普通定位只需要显示城市信息或者位置信息。

    地图定位需要显示并且标注大头针在地图。

    其实原理是一样的。只是展示方式不同而已。

    废话不多说了  附上代码

     - (id)init
    {
        self = [super init];
        if (self) {
            //初始化定位
            _locationManager = [[CLLocationManager alloc] init];
            _locationManager.delegate = self;
            _locationManager.desiredAccuracy = kCLLocationAccuracyBest;
            _locationManager.distanceFilter = 1000.0;
            _locationSucsess = NO;
        }
        return self;
    }

    其次还需要考虑到版本不同的情况下

    ios8的版本需要设置plist文件。

    添加字段:

    NSLocationAlawaysUsageDescription

    NSlocationWhenInUseDescription

    对应实现代码:

    [locationManager requestAlwaysAuthorization];

    - (void)locationManager:(CLLocationManager*)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status

      如果定位失败回掉的方法。
    - (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error
    {
       
        NSLog(@"locError:%@", error);
        _locationSucsess = NO;
        [manager stopUpdatingLocation];
        NSLog(@"Error: %@",[error localizedDescription]);
         [[NSNotificationCenter defaultCenter]postNotificationName:@"failToLocation" object:nil];
        switch([error code]) {
            case kCLErrorDenied:
                //Access denied by user(发通知给getaround页面)
                NSLog(@"Access to Location Services denied by user");
              
                //Do something...
                break;
            case kCLErrorLocationUnknown:
                //Probably temporary...
                NSLog( @"Location data unavailable");
                //Do something else...
                break;
            default:
               NSLog( @"An unknown error has occurred");
                break;
        }
    }

    另外需要实现一个协议内的方法

    - (void)locationManager:(CLLocationManager *)manager
     didUpdateToLocation:(CLLocation *)newLocation
               fromLocation:(CLLocation *)oldLocation;


    到现在基本完成一半了。


    最重要的需要提一点则是 关于地理编码 和逆向地理编码的。

    经纬度信息转为位置信息。

    位置信息转为经纬度信息。


    这个可以根据具体需要的时候进行使用。

    #pragma mark -- 根据地理位置信息获取经纬度 CLGeocoder
    -(void)GetLatitudeAndLongitudeBasedOnLocation:(NSString*)loncation{
       
        CLGeocoder *myGeocoder = [[CLGeocoder alloc] init];
        [myGeocoder geocodeAddressString:loncation completionHandler:^(NSArray *placemarks, NSError *error)
         {
             if ([placemarks count] > 0 && error == nil) {
                 NSLog(@"Found %lu placemark(s).", (unsigned long)[placemarks count]);
                 CLPlacemark *firstPlacemark = [placemarks objectAtIndex:0];
                 NSLog(@"coordAdressLongitude = %f", firstPlacemark.location.coordinate.longitude);
                 NSLog(@"coordAdressLatitude = %f", firstPlacemark.location.coordinate.latitude);
                              
             }
             else if ([placemarks count] == 0 && error == nil) {
                 NSLog(@"Found no placemarks.");
             }
             else if (error != nil) {
                 NSLog(@"An error occurred = %@", error); }
         }];
       
    }

    #pragma mark -- 根据经纬度获取地理位置详细信息  CLGeocoder
    -(void)GetmoreInformationInAccordanceWithTheLatitude:(CLLocationDegrees)latitude AndLongitudeLocation:(CLLocationDegrees)longitude{
       
        CLLocation *newLocation=[[CLLocation alloc]initWithLatitude:latitude longitude:longitude];
        CLGeocoder *geocoder=[[CLGeocoder alloc] init];
        [geocoder reverseGeocodeLocation:newLocation
                       completionHandler:^(NSArray *placemarks,
                                           NSError *error)
         {
             CLPlacemark *placemark=[placemarks objectAtIndex:0];
             NSLog(@"地址:%@\n country:%@\n postalCode:%@\n ISOcountryCode:%@\n ocean:%@\n inlandWater:%@\n locality:%@\n subLocality:%@ \n administrativeArea:%@\n subAdministrativeArea:%@\n thoroughfare:%@\n subThoroughfare:%@\n",
                   placemark.name,
                   placemark.country,
                   placemark.postalCode,
                   placemark.ISOcountryCode,
                   placemark.ocean,
                   placemark.inlandWater,
                   placemark.administrativeArea,
                   placemark.subAdministrativeArea,
                   placemark.locality,
                   placemark.subLocality,
                   placemark.thoroughfare,
                   placemark.subThoroughfare);
            
             
         }];
    }

    如果打印地理位置信息。则已经完成了定位操作。 其余的则需要根据自己的需求进行 将获取的信息存储并相应赋值即可。



    
    展开全文
  • 手机定位是指通过特定的定位技术来获取移动手机或终端用户的位置信息(经纬度坐标),在电子地图上标出被定位对象的位置的技术或服务。定位技术有两种,一种是基于GPS的定位,一种是基于移动运营网的基站的定位。...

    手机定位是指通过特定的定位技术来获取移动手机或终端用户的位置信息(经纬度坐标),在电子地图上标出被定位对象的位置的技术或服务。定位技术有两种,一种是基于GPS的定位,一种是基于移动运营网的基站的定位。基于GPS的定位方式是利用手机上的GPS定位模块将自己的位置信号发送到定位后台来实现手机定位的。基站定位则是利用基站对手机的距离的测算距离来确定手机位置的。后者不需要手机具有GPS定位能力,但是精度很大程度依赖于基站的分布及覆盖范围的大小,误差会超过一公里。前者定位精度较高。此外还有利用Wifi在小范围内定位方式。

    一、区别

    最新的手机定位技术是AGPS(AssistedGPS:辅助全球卫星定位系统),它利用通讯基站信息来辅助GPS模块进行手机定位,主要改进之处在于:

    1、在室内没有GPS信号的地方利用基站定位来提供位置信息,缩小定位盲区。

    2、与纯GPS和纯基站定位相比,AGPS有更高的精度,一般可精确到10米;GPS定位需要在终端安装GPS定位系统或是内置GPS模块,由终端主动发送位置信息,服务器端无法获取某个终端的位置信息。

    3、LBS基站定位是基于通讯运营商信号塔的定位方式,通过信号塔获取到手机SIM卡的经纬度信息,通过计算将该位置点通过与电子地图API进行对接显示示到地图上面,达到定位的目的。同时LBS基站定位具有强制性,由基站定位服务器端主动向终端发起定位,在监管类服务中起着重要作用。

    GPS定位运用的是卫星信号,在室内、地下车库、交通隧道定位信号会受到影响增加定位偏差,甚至在云层密集的地域卫星信号也会受到限制使得定位精度不高或出现定位盲区。在未来的实际应用中,单纯的GPS定位和单纯的基于基站定位都无法完成一个具体需求环境的要求,一定是卫星定位加基站定位两种方式并存的。 

    首先,LBS基站定位的定位方式属于地表定位,所有信号来源于手机信号塔,只要手机能接收到信号的地方都能实施定位,基站定位信号在地面建筑物、隧道中有极强的穿透性,弥补了卫星定位的不足之处。其次,LBS具有强制性,在终端不请求位置的时候,可进行主动定位,LBS基站定位具有较强的监管能力。

    在GPS模块启动搜星阶段,通过基站定位来确定定位手机的大概位置,通过预存在手机中的GPS卫星星历图,可以快速搜星,把搜星阶段的时间由2-3分钟,缩短到10秒钟左右。

    二、知识

    第一、某些影视作品为了增加观赏度和悬念,错误的将手机定位描述为必须通话一定时间才可定位成功。而实际上,只需要被定位手机开机,根本不用通话就可实施定位。

    第二、手机关机由于没有信号发射,基站无法抓取到被定位手机的信号,无法实施定位。

    第三、手机定位是对手机卡定位,而不是对手机定位。被定位的手机号码只要开机,无论更换任何手机都可正常定位,但是无法对原使用的手机机身串号进行定位。

    第四、被定位手机号码设置来电转接,等同于手机关机,是通过转接到其他号码实施通话的,这种情况同样无法定位。

    三、定位特点

    覆盖率高

    一方面要求覆盖的范围足够大。另一方面要求覆盖的范围包括室内。用户大部分时间是在室内使用该功能,从高层建筑和地下设施必须保证覆盖到每个角落。手机定位根据覆盖率的范围,可以分为三种覆盖率的定位服务:在整个本地网、覆盖部分本地网和提供漫游网络服务类型。除了考虑覆盖率外,网络结构和动态变化的环境因素也可能使一个电信运营商无法保证在本地网络或漫游网络中的服务。

    定位精度

    手机定位应该根据用户服务需求的不同提供不同的精度服务,并可以提供给用户选择精度的权利。例如美国FCC推出的定位精度在50米以内的概率为67%,定位精度在150米以内的概率为90%。定位精度一方面与采用的定位技术有关,另外还要取决于提供业务的外部环境,包括无线电传播环境、基站的密度和地理位置、以及定位所用设备等。

    四、典型应用

    家长定位老人、儿童:主要是出于安全和关心的需要,安装在老人儿童的手机上,一旦走失,发送短信即可获得老人儿童的具体地图位置。

    企业对车辆的管理;GPS信号通过卫星传输,受云层和遮挡物限制,在阴天、地下室、隧道等情况下会没有信号从而产生定位盲区。而基于SIM卡的定位技术也就是我们所说的地面定位——企效通LBS基站定位能够有效的对地面上的位置反馈回位置信息。LBS基站定位省去了终端成本,现有手机终端就能直接使用,从而节省了整个项目成本。LBS适合监管类定位需求,连续定位通讯资费比较高。

    企业对员工的管理;能提供对于有多个分部的销售公司,对销售人员上班时间工作的管理  ;代表软件:企效通。企效通主要采用基站定位,可以对外勤员工进行手机定位,实现移动考勤、行程管理、轨迹查询、拜访管理等,提高员工工作效率,减少差旅费用。

    进行远程解码,对方号码所在手机或者固话的内部程序,绑定他的号码,绑定完后就可以进行不限制距离的监听,拦截,定位功能。

    五、原理

    手机定位是指通过无线终端(手机)和无线网络的配合,确定移动用户的实际位置信息(经纬度坐标数据,包括三维数据),通过SMS、MMS、语音发给用户或以此为基础提供某种增值服务。定位服务又叫做移动位置服务(Location Based Service,LBS),它是通过电信移动运营商的网络(如GSM网、CDMA网)获取移动终端用户的位置信息(经纬度坐标),在电子地图平台的支持下,为用户提供相应服务的一种增值业务。 

    手机定位是利用GSM移动通信网的蜂窝技术来实现位置信息的查询,GSM无线通信网是由许多像蜜蜂蜂窝一样的小区构建而成的,每个小区都有自己的编号,通过手机所在小区的识别号就可以知道手机所在区域。目前手机小区定位技术尚在完善之中,市区精度范围大致在200米左右,郊区精度范围大致在1000米~2000米左右,随着移动公司技术的不断发展,相信精度会进一步提高到50米范围内。同时目前显示的地标名还在优化之中,随着进一步优化,地标将更加准确。 

    蜂窝定位技术又属于LBS基站定位,该定位方式俗称为地面定位系统,因为它是依靠运营商分布在地表上的信号塔来获取的经纬度信息确定终端的位置。所有手机卡只要在激活状态,并能正常的接打电话就能够精准定位到,定位能力强,定位信号能有效穿透建筑物、地下室、隧道交通等。每一张手机卡都有唯一的一个识别码,就像打电话一样,每个号码都唯一的指向固定的一部手机,LBS基站定位也能够有效的通过该识别码来找到某个固定的号码手机所在的位置,并呈现到电子地图上,此类定位技术具有一定的强制性,在一些监管类领域有着广泛应用。

    六、移动定位

    移动定位系统是指通过无线终端(如手机、PDA 等)和无线网络的配合,确定移动用户的实际位置信息(经纬度坐标数据),从而提供用户所需的与位置和方向相关的增值服务。移动位置服务最早是从美国开始的。早在1996 年,美国联邦通信委员会(FCC )要求移动运营商为手机用户提供紧急求助服务,即提供呼叫者的位置以便及时救援,他们将这种移动位置服务命名为E911 。此后,日本、德国、法国、瑞典、芬兰等国家纷纷推出各具特色的商业化的位置服务。目前,世界许多国家都以法律的形式颁布了对移动位置服务的要求,如美国“ US FCC E 911 ” 以法律的形式规定了运营商为911 用户提供的定位服务精度标准,而欧盟也颁布法律,遵循“ US FCC ”标准,并于2003-1-1实施。 顺便提及的是,定位服务已引起人们对隐私权的关注。无线通讯公司和监管者必须研究政策允许用户在输入地址信息时,其个人隐私权受到保护。

    星机高科GPS定位手机是提供给特需人群遇险时一键报警求援、110、120救护快速确定目标位置、家长对老幼外出行走位置查询、安全监护的报警定位手机,也可以用手机从GPS手机上获去报警信息,是个人安防、亲情关爱的“随身保姆”。适用与有遇劫、遇困、迷路、走失、急性病(心脏、高血压)突发、遇灾可能的需紧急报警求助人群及儿童、老人、智障等需监护人群。

    七、联通定位

    定位之星业务是中国联通CDMA1X网络采用先进的GPSONE定位技术向公众提供的高精度定位业务。定位精度在室外环境下高达5米~50米。同时无论在室内还是室外,只要CDMA1X网络覆盖到的地方即可实现定位,而且缩短了定位时间。联通无限定位之星业务基于对移动终端的定位,结合GIS(地理信息系统)地图数据信息,能够向用户提供丰富的位置信息服务。

    “互动视界”业务是中国联通公司为CDMA用户提供的一项无线上网服务,你只要使用支持WAP1.2以上的浏览器功能的手机终端,其操作也类似于中国移动的WAP版定位。目前联通对于手机的数据通信资费标准是0.01元/kB。

    我们在这里通过一个实例向大家说明GPS的使用:进入定位功能,屏幕上便出现了卫星画面,经过几秒至十几秒的查询时间之后,屏幕上便显示出目前手机所处位置的描述,如“万泉河路,万全新新家园附近”之类的语句,这时用户便可进一步查询当前位置的地图、去往某地的公交换乘路线、周围500米~2000米的餐饮、娱乐服务场所等。如我们再继续查询“百盛”,搜索到百盛购物中心,便会给出百盛的详细位置和联系电话,并且能够显示出从手机所在位置去百盛的公交换乘路线。

    看了上面的描述,是不是感觉很方便。尤其是对于一些天生的“路盲”朋友,手机定位功能一定会帮助你解决不少的出行问题。

    全球定位系统(GPS)是本世纪70年代由美国陆海空三军联合研制的新一代空间卫星导航定位系统。其主要目的是为陆、海、空三大领域提供实时、全天候和全球性的导航服务,并用于情报收集、核爆监测和应急通讯等一些军事目的,是美国独霸全球战略的重要组成。经过20余年的研究实验,耗资300亿美元,到1994年3月,全球覆盖率高达98%的24颗GPS卫星星座己布设完成。

    短信版手机定位

    短信版的手机定位可以在全国范围内使用,一般在省到较精确位置,出内能定位省区后可以定位到具体的地区名(按照区号来区别)。短信费为0.10元/条,信息费为6元/月,这个信息费一般相当于月租费。

    WAP版手机定位

    只要拥有一部支持WAP功能的手机,开通WAP功能后,可以通过无线方式直接联入互联网,获取自己当前的位置。假如你在浙江省,当在手机上启动自己的WAP浏览器后,这时在浏览器中输入网址 ,然后点击菜单进入业务就可以找到自己的位置。

    其他手机定位

    这是一种新型的手机定位技术。但由于涉及侵犯隐私,而未被广大群众所知晓。这种手机定位并非传统的GPS定位,而是基于对基站信息信号反馈而锁定手机位置。也就是法。目前为止,这种手机定位手段仅仅限于公安技侦破案时使用。只需要知道手机号码,并且机主开机有信号,就可以锁定机主位置。由于LBS受基站信号、天气、无线电波等信号的干扰,精确度尚不是特别理想。市区约在50M-200M左右。

    目前国内绝大多省份使用手机定位均需得到手机用户的授权才能进行。

    手机定位业务有一个超出传统增值业务的庞大产业链阵容,由移动运营商、系统设备提供商、终端厂商、GIS开发商、应用提供商、中间件提供商等多个环节组成,综合运用了包括移动通信、卫星导航、互联网、地理信息系统、综合信息服务等多方面的技术和应用,是多个产业、多项技术交汇和融合的产物。手机定位服务需要持续和巨大的投入,尤其是在网络升级和电子地图方面。

    八、其他定位

    在移动通信网络中,通常有以下几种定位技术:

    一是基于Cell ID的定位技术,它由网络侧获取用户当前所在的基站Cell信息以获取用户当前位置,其精度取决于移动基站的分布及覆盖范围的大小;

    二是基于AFLT的定位技术,AFLT(Advanced Forward Link Trilateration)是CDMA独有的技术,在定位操作时,手机/终端同时监听多个基站的导频信息,利用码片时延来确定到附近基站的距离,最后用三角定位法算出具体位置。

    三是基于AGPS(无线网络辅助GPS定位技术)的定位技术,AGPS将终端的工作简化,由网络侧的定位服务器与终端相互配合完成定位工作,就是将卫星扫描及定位运算等最为繁重的工作从终端一侧转移到网络一侧的定位服务器完成。 借助定位服务器强大的运算能力,可以采用复杂的定位算法以降低接收信号弱等不利因素的影响从而提高定位精度和灵敏度。定位平台将经纬度信息送到应用服务平台,或者通过无线网络送回终端满足定位应用。

    四是基于GPSOne定位技术,将Cell ID、CDMA三角定位和AGPS综合应用的电信独特的定位技术,实现定位精度高、范围广。CDMA定位技术是基于位置业务开发的定位技术,采用Client/Server方式。它将无线辅助AGPS和高级前向链路AFLT三角定位法两种定位技术有机结合,实现高精度、高可用性和较高速度定位。在这两种定位技术均无法使用的环境中,CDMA定位技术会自动切换到Cell ID扇区定位方式,确保定位成功率。

    CDMA定位技术结合了无线网络辅助GPS定位和CDMA三角运算定位,改善了室内定位效果。CDMA三角运算定位弥补无卫星信号下也能完成定位,其他蜂窝电话网络如GSM/GPRS也有类似自定位技术,但由于CDMA是惟一全网同步(通过GPS)网络,因此定位精度更高。但CDMA连续定位中,处于同一位置的连续定位偏差往往很大。CDMA手机定位技术2011年已经实现突破,只要手机信号覆盖区域都能实现GPS定位。

    自己想要给别人定位,是要经过别人同意的,比如说给自己的孩子定位,想知道孩子上学、放学以及去了哪儿,那你就CDMA手机给孩子带上,你就可给孩子或者想定位的人定位。

    定位

    卫星定位

    基站定位

    手机定位

    九、服务应用

    手机定位服务应用于汽车救援服务,给汽车救援服务商和车主带来了方便。过去车主的车出现故障,通过打电话的方式说明自己的具体位置,甚至为了说清自己的具体位置要花费上百元的话费,也说不清自己所在位置,但现在只需要打一个电话,回复一条短信就可以定位车主的具体位置,前后花费不到一分钟,不需要在汽车和手机上安装任何东西,相当方便,深受汽车救援行业的喜爱。

    手机定位服务应用于医疗急救,给医疗行业和病人带来了方便。手机定位服务应用于医疗急救采取拨号定位方式,不需要回复短信,病人只需向医院打一个电话就可以被医院方定位,获得病人的具体位置,迅速前往救援,深受病人的喜爱。

    十、服务历史

    中国移动在2002年11月首次开通位置服务,如移动梦网品牌下面的业务“我在哪里”、“你在哪里”、“找朋友”等。

    2003年,中国联通在其CDMA网 上推出“定位之星”业务,用户可以在较快的速度下体验下载地图和导航类的复杂服务;

    中国电信和中国网通启动在PHS(小 灵通)平台上的位置服务业务。

    2008年10月CDMA网成为中国电信手机终端主要应用,目前是中国电信手机以网络CDMA3G、1X网络采用先进的GPSONE定位技术向公众提供的高精度定位业务。定位精度在室外环境下高达5米~50米。同时无论在室内还是室外,只要CDMA 1X网络覆盖到的地方即可实现定位,而且缩短定位时间。中国电信CDMA网的基础上建立LBS移动定位平台,基于对移动终端的定位,结合GIS(地理信息系统)地图数据信息,能够向用户提供丰富的位置信息服务。

    截至2011年底,国内市场上的手机位置服务主要包括:电信CDMA手机GPSOne定位(Cell ID、AGPS和AFLT综合应用技术)、移动手机位置服务、移动A-GPS终端、联通的AGPS。

    十一、手机软件

    手机定位软件是指软件可以通过特定的定位技术来获取移动手机或终端用户的位置信息(经纬度坐标),在电子地图上标出被定位对象的位置的技术。

    手机定位软件的技术有两种,一种是基于GPS的定位(目前市场销售的GPS系统),一种是基于移动运营网的基站的定位。 

    操作平台

    目前国内手机定位软件基本上是基于智能手机开发的,软件可以应用在Symbian、Android、Windows Mobile、Iphone等操作系统的手机上,其中Adnroid操作系统的手机用户数量最多。2012年7月数据,Android占据全球智能手机操作系统市场59%的份额,中国市场占有率为76.7%。《LURKER软件》支持所有Adnroid操作系统手机。

    定位方式

    一是基于移动基站的定位方式;二是现在的手机都带有GPS模块,可以通过卫星定位。两种定位软件大同小异,分为手机端和PC电脑端,可以查看朋友目前所在的位置。

    十二、发展状况

    中国移动和中国联通早在几年前,都相继开通位置服务,但在商业模式和推广上都并未投入太多,也并未有太多的SP参与提供服务,因此定位服务的市场并未启动。人们对于手机定位的认识也仅仅停留在“你在哪,我在哪”这种简单的位置确定层面。艾瑞咨询数据显示: 2005年国内移动定位市场规模仅2.21亿元,主要得益于中国移动亲子通业务和中国联通手机导航业务的推广。但在2006~2008年,移动定位市场将保持150%以上的增长率,预计2008年将达到52.5亿元。如今,无论是运营商还是SP都希望利用3G的机会,推进手机定位服务行业的成熟和发展。 

    相比其他手机增值服务来讲,手机定位的产业链条非常庞杂,包括移动运营商、GPS定位技术、GIS电子地图提供商、POI(Position of Interest)信息采集和服务提供商、终端厂商、中间件提供商等,涉及到移动通信、卫星导航、互联网、地理信息系统、综合信息服务等多个领域。总体上,产业链在移动运营商的主导下,开放平台合作。目前产业链上的各个环节都处于刚刚起步阶段,提供的定位服务也大多在免费试用阶段,尚未形成成熟的商业模式。相对而言,不少提供电子地图的公司开始浮出水面,并得到风险投资的追捧。

     

    手机定位浅析 AGPS定位 LBS基站定位 卫星定位

     

    严格上讲,手机定位并非3G时代的增值应用,但之所以目前两大运营商都暗自较劲,业内也将手机定位作为3G时代的杀手级应用,关键在于,手机定位的价值在于可以将定位信息运用到许多应用中,从而创造比定位本身更大的价值。

    除了可以利用手机地图进行导航之外,比如定位游戏就将影响到手机游戏产业的格局。另外,通过小区广播的形式,对用户进行精准的无线广告的营销也是手机定位的应用之一。比如当你走到麦当劳餐厅附近时,便会有针对性地向你推送麦当劳优惠券或者新品广告。当然,目前对于定位广告运营商还在思考其营运模式。从行业应用来讲,手机定位则主要应用在车辆调度、物流、监控等领域。尽管手机定位可以和不同的行业应用相结合,但获取衣食住行方面的实用信息、以及基于娱乐的位置游戏等需求仍是个人消费市场的主要应用热点。

    3G的到来,会极大地增强用户对手机定位服务的体验,成为定位服务应用起飞的一个契机。伴随网络条件的改善,移动定位技术和多媒体技术相结合将成为趋势。运营商高速的数据传输能力、成熟的语音业务应用和丰富的数据业务实践使实时画面监控、语音导航与定位技术的结合成为可能。

    目前来看,手机定位除了受到网络带宽限制之外,还受到诸多因素的阻碍。其中最重要的一点是,我国地理信息系统的建设和POI数据的采集、加工、整理、更新,是个相当困难而艰巨的任务。这一点也是和欧美和日韩定位服务不同的地方。“每天都会在修路修桥,每天都会有餐馆开张或倒闭,这些信息要及时更新谈何容易。”业内人士表示,无论是地理信息还是周边的餐馆、银行等综合服务信息,都处于高度变化状态,使得做GIS和POI的公司难度加大,也无形中提高了SP进入该领域的门槛。

    定位技术的精准性不够。尤其是中国移动采用的CELL-ID的技术,根据移动台所处的蜂窝小区ID号来确定用户的位置,因此它的定位精度取决于蜂窝小区的半径。对于精度较高的紧急定位服务时,CELL-ID就无法满足要求。目前,用户熟悉的应用多为“模糊定位”服务,真正的位置服务用户较少。

    用户隐私也是定位服务最容易引发争议的问题,也是阻碍用户消费的重要因素。针对定位服务的敏感性,运营商需要在信用管理、信息安全、个人隐私保护等方面制定完善的流程体系、管理体系、认证体系和管理规范。

    手机终端依然成为制约产业发展的最后一个环节。利用GPS技术的位置服务需要终端的大力支持,否则业务拓展也只是空话。目前能够支持GPSone技术的终端在国内还比较少。中国联通推出的语音导航业务,也只有三星、LG等少数终端手机提供支持。而且居高不下的终端价格,也阻碍了定位业务的普及和推广。

    十三、定位系统

    GPS 定位,GPS导航,这些GPS的应用逐渐让GPS技术为人们所熟知,现在很多智能手机出了新花样来吸引大家的眼球,手机GPS应运而生。手机GPS顾名思义就是在手机上实现GPS的功能,一个就是GPS导航一个就是GPS定位跟踪。

    首先说一下手机GPS,它是手机平台上实现的GPS定位导航功能, 随着科技的发展,必定还会有更多的应用。这很容易理解,就是手机出了一般的手机通信的功能如发短信、打电话、拍照、MP3等这些基本的功能之外,还可以用手机来实现GPS定位导航。目前所说的GPS手机也就是具有导航功能的手机,所以GPS手机也可以称为GPS导航手机或具有GPS导航功能的手机。

    多重因素影响手机GPS普及

    在手机中集成GPS,可以非常轻松地实现车辆的自主导航,用户将不再因为迷路耽误自己的行程,便捷而实用。越来越多带GPS功能的手机反过来将会推动位置服务(LBS)的发展。另一个促使在手机中集成GPS功能的因素是政策的导向,国家的政策大力支持促进的手机GPS的发展。

    GPS芯片的接收灵敏度越高,搜星速度越快,功耗越低,使用就会越方便,用户使用就会越广泛。但是GPS的信号非常弱,任何干扰都会影响到它的接收效果和产品性能。因此GPS产品的设计优化程度对产品的性能会产生极大的影响,从而影响用户对GPS产品的认可和接受程度。GPS系统的成本包括GPS模块、GPS处理器等相关元器件和地图的价格,导致GPS系统的成本和价格相对较高,很多用户现在都还不能承受这个价格。不过随着成本的降低和技术的进步,许多终端厂商和手机设计企业正在推出相应的方案和产品,手机GPS芯片和解决方案呈现出软硬方案之争,功耗和接收灵敏度成为关注重点。 

    手机定位系统,它是指通过特定的定位技术来获取移动手机或终端用户的位置信息(经纬度坐标),在电子地图上标出被定位对象的位置的技术或服务。

    手机定位系统不一定是手机GPS定位,首先说一下定位技术,定位技术有两种,一种是基于GPS的定位,一种是基于移动运营网的基站的定位。基于GPS的定位方式是利用手机上的GPS定位模块将自己的位置信号发送到定位后台来实现手机定位的。基站定位则是利用基站对手机的距离的测算距离来确定手机位置的。后者不需要手机具有GPS定位能力,但是精度很大程度依赖于基站的分布及覆盖范围的大小。前者定位精度较高。此外还有利用Wifi在小范围内定位的方式。

    手机定位分类

    手机定位系统按照提供服务的方式可以分为两种:自有手机定位系统与公用定位系统。根据手机的不同的功能可以有可以分为两种定位,短信版手机定位和WAP版手机定位。合理的使用这些定位系统,可以给生活或者工作提供很多便利。

    通过分析了手机GPS以及手机定位系统,可以看出二者的区别和联系,尽管现在手机集成GPS已经被使用,但还不普及,随着GPS技术的发展以及手机的性能的改善,手机GPS以及手机定位系统应该都会成为手机的基本的功能之一。

    展开全文
  • 地图与定位

    千次阅读 2016-05-08 03:05:04
    一 地图和定位的简介1 主要应用场景:—-> 1.1 周边:找餐馆、找KTV、找电影院等等(大众点评, 美团网)—-> 1.2 导航:根据用户设定的起点和终点,进行路线规划,并指引用户如何到达(百度地图, 高德地图)二 实现该功能...

    一 地图和定位的简介

    1 主要应用场景:

    —-> 1.1 周边:找餐馆、找KTV、找电影院等等(大众点评, 美团网)
    —-> 1.2 导航:根据用户设定的起点和终点,进行路线规划,并指引用户如何到达(百度地图, 高德地图)

    二 实现该功能的必要条件

    1. 在iOS开发中,要想加入定位和地图两大功能,必须基于2个框架进行开发

    —-> 1.1 CoreLocation(该篇着重介绍)
    —-> 1.2 MapKit (下篇做介绍)

    三 框架的讲解思路

    1 地理定位 : 定位用户所在的位置, 获取对应的经纬度或者海拔等信息

    2 地理编码 :

    —-> 2.1 地理编码 : 南昌市青山湖区顺外路—–>113.381048 , 23.138369(数字是随便写的) : 地理编码
    —-> 2.2 反地理编码 : 113.381048 , 23.138369(数字是随便写的)—-> 南昌市青山湖区顺外路 : 反地理编码

    3 区域监听 : 事先在APP内部通过代码,指定一个区域, 那么当用户进入或离开区域的时候, 我们都可以监听到.

    四 该部分需要知道的专业术语

    1 LBS(Location Based Service) : 基于位置的服务

    2 SoLoMo :Social Local Mobile(索罗门):

    —-> 2.1 社交化 :在APP里面加入一些社交元素
    —-> 2.1 本地化 : 基于LBS的周边搜索, 周边签到等服务
    —-> 2.3 移动化 :1>移动网 : 3G/4G网, 相对于有线/无线电脑网络 2>移动app : 相对于”桌面应用”

    五 iOS8.0之前的定位(了解即可)

    1 只需要了解的原因 :

    —-> 1.1 iOS8.0之前的版本慢慢即将被淘汰, 不再做适配
    —-> 1.2 只要iOS8.0以后的定位功能实现, 那么直接把代码跑到iOS8.0之前的设备上, 依然是可以运行的, 不需要做任何修改
    —-> 1.3 因为系统版本和XCode版本原因, 暂时没法安装iOS8.0之前的模拟器进行测试

    2 前台定位

    —-> 2.1 包含头文件 import CoreLocation
    —-> 2.2 创建位置管理者并且设置代理
    //懒加载位置管理者
        private lazy var location : CLLocationManager = {
            //创建位子管理者
            let location = CLLocationManager()
            //设置代理
            location.delegate = self
            //返回位置管理者
            return location
        }()
    —-> 2.3 开始定位 : (这里设计点击屏幕就开始定位)
    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
        //开始定位
            location.startUpdatingLocation()
    }
    —-> 2.4 采用代理方法实现定位
    extension ViewController : CLLocationManagerDelegate {
        //当获取到用户的位置信息的时候会调用这个方法
        func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
            print("定位到了")
            //如果只想获取一次用户位置,可以在获取到位置信息之后,停止获取
            manager.stopUpdatingLocation()
        }
    }

    3 startUpdatingLocation的注意点

    —-> 3.1 如果想要使用位置管理者来开始实现某一个功能:start
    —-> 3.2 如果想停止这个功能 : stop
    —-> 3.3 一旦调用了这个方法,就会不断的获取用户的位置信息
    —-> 3.4 在ios6.0之后,如果想要获取用户的隐私(照片,通信),系统会主动弹框让用户授权
    —-> 3.5 一旦用户选择了don’t allow 意味着再也无法获取用户的位置信息.除非用户到设置界面设置允许你的app来获取我的位置
    —-> 3.6 为了提高用户点击允许的几率,一般是在plist里面配置一个key,并且写上一个为何获取这个位置的段子Privacy - Location Usage Description

    这里写图片描述

    4 后台定位

    —-> 4.1 基于ios8.0之前的前台定位前提下,我们只需要做一下设置中的一种就可以
    —-> 4.2 配置Xcode后台设置

    这里写图片描述
    这里写图片描述

    —-> 4.3 在info.plist文件中配置

    这里写图片描述

    5 iOS8.0之前的后台定位常见错误

    —-> 5.1 定位不到, 对应的代理方法不执行
    ———> 5.1.1 检查运行的模拟器是否是iOS8.0之前的系统版本
    ———> 5.1.2 检查模拟器是否设置位置数据
    ———> 5.1.3 确保代码无问题(一般都是代理没有设置,或者位置管理器对象是局部变量)
    ———> 5.1.4 可能是模拟器BUG, 请将模拟器位置设为None,然后再次设置数据; 或者,重置模拟器

    六 ios8.0之后的定位

    1 ios8.0之后的前台定位

    —-> 1.1 同样包含头文件import CoreLocation
    —-> 1.2 创建位置管理者
    //懒加载
        private lazy var location : CLLocationManager = {
           //创建位置管理者
            let location = CLLocationManager()
            //设置代理
            location.delegate = self
            location.requestWhenInUseAuthorization()
            //返回
            return location
        }()
    —-> 1.3 同样在代理方法中实现定位
    extension ViewController : CLLocationManagerDelegate {
        func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
            print("定位到了")
        }
    }
    —–> 1.4 点击屏幕开始定位
    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
            //点击调用
            location.startUpdatingLocation()
        }
    —-> 1.5 注意点
    ——–> 5.1.1 在ios8.0之后,当需要获取用户的位置信息时,系统不再主动弹框让用户进行授权
    ——–> 5.1.2 如果想要获取用户的位置信息,需要主动请求授权
    ——–> 5.1.3 请求前台定位(默认情况下,只能在前台获取用户的位置信息)
    ——–> 5.1.4 一定要在info.plist中配置对应的key(点击进入requestWhenInUseAuthorization可以找到key值)
    ——–> 5.1.5 不要忘记做版本适配

    这里写图片描述

    2 常见错误(如iOS8.0之前的后台定位常见错误)

    3 ios8.0之后的后台定位

    —-> 3.1 后台定位方案一 : 在前台定位的基础上, 勾选后台模式location updates

    这里写图片描述

    —-> 3.2 达到的预想效果 : 当APP退到后台, 会出现一个蓝条, 不断提醒用户,正在定位
    —-> 3.3 后台定位方案二 : 在定位时, 直接请求前后台定位授权, 并在info.plist文件中配置对应的key

    这里写图片描述

    —-> 3.4 达到的预想效果 : 无论是否勾选后台模式, 都可以获取位置信息. 而且无论前后台, 都不会出现蓝条

    4 ios8.0前后台定位测试环境 :

    —-> 4.1 XCode版本无要求
    —-> 4.2 模拟器选择iOS8.0之后, iOS9.0之前的版本

    七 ios9.0之后的定位

    1 ios9.0前台定位

    —-> 1.1 和iOS8.0之后一致,没有变化(只要注意相关设置即可)

    2 ios9.0后台定位

    —-> 2.1 后台定位方案一 : 在前台定位授权的基础上,如果勾选了后台模式location updates之后, 还需要额外设置属性allowsBackgroundLocationUpdates = true;
    —-> 2.2 在后台获取用户信息的时候,依旧会在屏幕的顶部显示蓝条提醒用户app在时时的获取用户的位置信息
    —-> 2.3 当点击了这个蓝条,会打开对应的app
    —-> 2.4 后台定位方案二 : 直接请求前后台定位授权的情况, 和iOS8.0之后一致, 没有变化

    3 注意 : 在前台定位授权的情况下,如果使用代码允许了后台定位,必须开启后台模式,否则程序会崩溃

    —-> 3.1 错误信息

    这里写图片描述

    4 可能会遇到的测试问题

    —-> 4.1 如果在测试的时候,获取不到位置,是模拟器的问题,因为模拟器是没有位置的

    5 代码

    —-> 5.1 导入头文件import CoreLocation
    —-> 5.2 创建位置管理者
    class ViewController: UIViewController {
        private lazy var location : CLLocationManager = {
           let location = CLLocationManager()
            location.delegate = self
            if #available(iOS 8.0, *){
                location.requestWhenInUseAuthorization()
            }
            if #available(iOS 9.0, *){
            location.allowsBackgroundLocationUpdates = true
            }
            return location
        }()
    —-> 5.3 代理方法
    extension ViewController : CLLocationManagerDelegate {
        func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
            print("定位到了")
        }
    }
    —-> 5.4 开始定位
    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
            location.startUpdatingLocation()
        }

    八 监听用户授权状态

    1 实现CLLocationManagerDelegate的代理方法

    func locationManager(manager: CLLocationManager, didChangeAuthorizationStatus status: CLAuthorizationStatus) {
        //判断用户决定代码
    }

    2 各个授权对应的含义 :

            NotDetermined // 用户未决定
            Restricted // 受限制
            Denied // 用户拒绝
            AuthorizedAlways // 前后台定位授权
            AuthorizedWhenInUse // 前台定位授权

    3 代理方法中模拟用户选择的状态代码块

    //switch判断
            switch status {
            case .NotDetermined :
                print("用户未决定")
            case .Restricted :
                print("受限制")
            case .Denied :
                if CLLocationManager.locationServicesEnabled() {
                    print("用户正在拒绝")
    
                    //如果定位服务开启,用户拒绝了,系统不会自动弹框,需要手动给用户提示
                    if #available(iOS 8.0, *) {
                        let url = NSURL(string: UIApplicationOpenSettingsURLString)!
                        if UIApplication.sharedApplication().canOpenURL(url){
                            UIApplication.sharedApplication().openURL(url)
                        }
                    }else {
                            //准备多张图片,用来引导用户去设置界面允许开启定位服务
                    }
                } else {
                    print("定位服务关闭,建议打开定位服务")
                    //如果定位服务关闭,用户下次再打开时候,系统会自动弹框,让用户去设置界面打开定位服务
                }
            case .AuthorizedAlways :
                print("前后台定位授权")
            case .AuthorizedWhenInUse :
                print("前台定位授权")
            }
        }

    4 定位失败也会调用代理方法

    //该方法定位失败的时候就会调用error失败信息 CLLocationManager位置管理者
        func locationManager(manager: CLLocationManager, didFailWithError error: NSError) {
    
        }

    5 可能会用到的额外参数

    —-> 5.1 distanceFilter
    /*
            1 设置每个多少米定位一次?
                1.1 一次
                1.2 111km / 100次
            2 当距离大于100米的时候回调用一次,获取用户的位置信息
            */
            location.distanceFilter = 100
    —-> 5.2 desiredAccuracy
    /*
            1 定位精确度高,定位越准确,越耗电
            2 一般情况下,在能够满足条件情况下,使用精确度比较低的
            3 一旦定位到用户的位置之后,如果不需要用户的位置了,建议关闭获取用户位置
            */
            location.desiredAccuracy = kCLLocationAccuracyBest

    6 开发经验

    —-> 6.1 定位本身就非常耗电, 定位的精确度越高, 越耗电, 定位时间越长
    —-> 6.2 为了省电, 尽量在满足需求的情况下低精确度

    7 ios9.0新出的API

    if #available(iOS 9.0, *) {
                location.requestLocation()
            }
    —-> 7.1 根据精确度来进行定位,先从最低的精度开始定位,直到定位到最好的,之后返回
    —-> 7.2 如果在定位的过程中超时了,那么会返回指定定位到的那个位置,并且只会执行一次
    —-> 7.3 该方法不能和stopUpdatingLocation一起用

    九 CLLocation对象的使用

    1 属性详解 :

    —-> 1.1 coordinate : 当前位置所在的经纬度数据(苹果官方解释 : Returns the coordinate of the current location.)
    —-> 1.2 altitude : 海拔(苹果官方解释 : Returns the altitude of the location. Can be positive (above sea level) or negative (below sea level).)–> 可以是整数也可以是负数
    —-> 1.3 speed : 当前速度 (苹果官方解释 : Returns the speed of the location in m/s. Negative if speed is invalid.)–> 负数是无效的
    —-> 1.4 course : 航向(设备移动的方向, 值域范围:0.0 ~ 359.9, 正北方向为0.0)(苹果官方解释 :0.0 - 359.9 degrees, 0 being true North)

    2 重要函数 : Returns the lateral distance between two locations.(返回横向两者的距离(物理距离))

    func distanceFromLocation(location: CLLocation) -> CLLocationDistance

    3 开发经验 :

    —-> 3.1 使用之前, 务必判断数据是否有效 : 代码 (判断数据是否可用)
    if location.horizontalAccuracy < 0 {return}
    —-> 3.2 功能: 如果水平精确度小于零, 代表虽然可以获取位置对象, 但是数据错误, 不可用

    4 实例演练 :打印当前用户的行走方向,偏离角度以及对于的行走距离(例如 : 北偏东 30度方向 移动了8米)

    —-> 4.1 创建位置管理者
    //懒加载
        private lazy var location :CLLocationManager = {
           //创建位置管理者
            var location = CLLocationManager()
            //设置代理
            location.delegate = self
            if #available(iOS 8.0, *) {location.requestAlwaysAuthorization()}
            location.desiredAccuracy = kCLLocationAccuracyBest
            return location
        }()
    —-> 4.2 设置一个属性记录用户上一个位置
    //定义一个属性用来记录用户的上一个位置
        private var lastLocation : CLLocation?
    —-> 4.3 实现代理方法
    func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
            //在位置数组中,最后一个是最新的
            //取出位置
            guard let location = locations.last else{return}
            //判断位置是否可用
            if location.horizontalAccuracy < 0 {return}
            //1.确定航向
            if location.course < 0 {return}
            let angleStrs = ["北偏东","东偏南","南偏西","西偏北"]
            //当前偏移方向
            let index = Int(location.course / 90)
            //取出数组中的方向
            var angleStr = angleStrs[index]
    
            //2.确定偏移角度
            let angle = location.course % 90
            //判断角度
            if Int(index) == 0 {
                let index = angleStr.startIndex.advancedBy(1)
                angleStr = "正" + angleStr.substringToIndex(index)
            }
            //3.确定移动的距离
            let lastLoc = lastLocation ?? location
            //计算出两个点之间的物理距离
            let distance = location.distanceFromLocation(lastLoc)
            //赋值
            lastLocation = lastLoc
            //4.拼接字符串,打印距离
            if Int(index) == 0 {
                print("\(angleStr),移动了\(distance)米")
            } else {
                print("\(angleStr) \(angle)度,移动了\(distance)米")
            }
            print("定位到了")
        }
    —-> 4.4 进行相关配置(上面都已经说明了)

    5 经验小结

    —-> 5.1 定位的应用场景
    ——–> 5.1.1 导航
    ——–> 5.1.2 电商APP,获取用户所在城市(需要与(反)地理编码联合使用)
    ——–> 5.1.3 数据采集用户信息(例如,统计app使用分布)
    ——–> 5.1.4 查找周边(周边好友, 周边商家等等)
    —-> 5.2 开发经验(由于定位非常耗电; 所以为了给用户省电, 你可以遵守以下小经验)
    ——–> 5.2.1 不需要获取用户位置时,一定要关闭定位服务:
    ——–> 5.2.2 如果可以,尽可能使用低精度的desiredAccuracy
    ——–> 5.2.3 如果是数据采集,(一般都是周期性的去轮询用户位置),在轮询期间一定要关闭定位

    十 指南针(了解)

    1 实现思路 :

    —-> 1.1 利用”磁力计”传感器,获取设备朝向
    —-> 1.2 根据设备朝向反向旋转”指南针”图片

    2 代码实现

    —-> 2.1 在storyboard中设置指南针图片,并且通过拖线的方式拿到该对象
    //指南针
        @IBOutlet weak var compassImageView: UIImageView!
    —-> 2.2 导入头文件
    import CoreLocation
    —-> 2.3 懒加载位置管理者
    //懒加载
        private lazy var location : CLLocationManager = {
            //创建位置管理者
            var location = CLLocationManager()
            //设置代理
            location.delegate = self
            //返回位置管理者
            return location
        }()
    —-> 2.4 实现代理方法
    //代理方法的实现
    extension ViewController : CLLocationManagerDelegate {
        func locationManager(manager: CLLocationManager, didUpdateHeading newHeading: CLHeading) {
            //判断朝向是否可用
            if newHeading.headingAccuracy < 0 {return}
            //获取朝向设备和角度
            let magneticHeading = newHeading.magneticHeading
            //将角度转化为弧度
            let  radian = CGFloat(magneticHeading / 180 * M_PI)
            //反转图片弧度
            UIView.animateWithDuration(0.25) { () -> Void in
                self.compassImageView.transform = CGAffineTransformMakeRotation(-radian)
            }
        }
    }
    —-> 2.5 判断设置是否可用
    override func viewDidLoad() {
            super.viewDidLoad()
            //判断设备是否可以用
            if CLLocationManager.headingAvailable() { //可用
                location.startUpdatingHeading()
            } else { //不可用
                SVProgressHUD.showErrorWithStatus("指南针不可用,请更换手机")
            }
        }

    3 注意事项

    —-> 3.1 获取设备朝向前, 先判断”磁力计”是否可用
    —-> 3.2 获取朝向信息前, 判断当前朝向信息是否有效
    —-> 3.3 注意”设备朝向”与”航向”的区别
    —-> 3.4 使用”磁力计”传感器获取设备朝向, 不需要请求用户授权

    4 测试环境

    —-> 4.1 XCode版本无要求(建议:XCode7.0+ 不需要开发者账号也可以进行真机调试)
    —-> 4.2 必须要求真机设备(只有真机设备才有”磁力计”传感器)

    十一 区域监听(了解)

    1 概念 :

    —-> 1.1 区域 : 就是指划定的一块地域范围(比如圆形区域, 则由区域中心, 和半径组成)
    —-> 1.2 区域监听 : 是指,我们通过代码指定一个区域, 然后当用户持握设备进入或者离开指定区域, 我们都能监听到.

    2 注意事项 :

    —-> 2.1 想要做区域监听, 在iOS8.0之后, 必须请求位置授权
    —-> 2.2 原因 : 区域监听的原理就是获取用户的位置, 然后在判断该位置是否在制定区域内, 所以会涉及到用户隐私(位置), 而在iOS8.0之后, 想要访问用户位置信息, 就需要主动请求授权;

    3 代码 :

    —-> 3.1 在storyboard中设置一个label,用来显示用户的区域状态
     @IBOutlet weak var noticeLabel: UILabel!
    —-> 3.2 懒加载位置管理者
    private lazy var location : CLLocationManager = {
            //创建位置管理者
            let location = CLLocationManager()
            //设置代理
            location.delegate = self
            //允许前后台授权
            location.requestAlwaysAuthorization()
            //返回位置管理者
            return location
        }()
    —-> 3.3 判断该区域是否可以被监听
    override func viewDidLoad() {
            super.viewDidLoad()
            //判断该区域是否可以被监听
            if CLLocationManager.isMonitoringAvailableForClass(CLCircularRegion) {
                //创建区域
                let center = CLLocationCoordinate2DMake(21.123, 123.456)
                //设置半径
                var  radius : CLLocationDistance = 10.0
                //标识
                let identify = "肖锋区域"
    
                //检测是否超过了最大的监听范围
                if radius > location.maximumRegionMonitoringDistance {
                    //如果超过了范围,就让他等于最大值
                    radius = location.maximumRegionMonitoringDistance
                }
                let region = CLCircularRegion(center: center, radius: radius, identifier: identify)
                //监听区域
    //            location.startMonitoringForRegion(region)
                location.requestStateForRegion(region)
            }
    
        }
    —-> 3.4 代理方法实现
    extension ViewController : CLLocationManagerDelegate {
        //离开区域
        func locationManager(manager: CLLocationManager, didExitRegion region: CLRegion) {
           print("您已经离开该区域")
    
        }
         //进入区域
        func locationManager(manager: CLLocationManager, didEnterRegion region: CLRegion) {
             print("您已经进入该区域")
        }
        //区域状态发生改变
        func locationManager(manager: CLLocationManager, didDetermineState state: CLRegionState, forRegion region: CLRegion) {
            //判断状态
            switch state {
                case .Unknown:
                noticeLabel.text = "不知道"
                case .Inside:
                noticeLabel.text = "进入"
    
                case .Outside:
                noticeLabel.text = "离开"
    
            }
        }
    —-> 3.5 进行info.plist相关配置NSLocationAlwaysUsageDescription
    —-> 3.6 模拟器配置 : 将模拟器调整到Debug–>Location –> None–> 将设置的区域填入精度和纬度中

    4 常见问题

    —-> 4.1 区域监听, 测试没有效果?
    ——–> 4.1.1 首先, 确定代码没有问题, 是否有请求授权;
    ——–> 4.1.2 其次, 尝试修改模拟器位置信息, 触发进入区域或离开区域的动作
    ——–> 4.1.3 最后, 如果模拟器出现BUG, 定位不到, 也会无法判定当前区域状态; 所以, 最后可以尝试重置模拟器.

    十二 地理编码和反地理编码

    1 概念 :

    —-> 1.1 地理编码 : 是指根据地址关键字, 将其转换成为对应的经纬度等信息;
    —-> 1.2 反地理编码 : 是指根据经纬度信息, 将其转换成为对应的省市区街道等信息;

    2 具体实现步骤 :

    —-> 2.1 导入CoreLocation框架以及对应的主头文件
    —-> 2.2 创建CLGeocoder对象
    —-> 2.3 根据地址关键字, 进行地理编码 (地理编码)
    —-> 2.3 根据经纬度信息, 进行反地理编码 (反地理编码)

    3 测试环境

    —-> 3.1 必须连网
    —-> 3.2 XCode版本不限
    —-> 3.2 iOS模拟器系统版本不限

    4 具体事例代码 :

    —-> 4.1 storyboard中相关设置

    这里写图片描述

    —-> 4.2 导入头文件import CoreLocation
    —-> 4.3 通过拖线的方式拿到storyboard中相关对象
        //输入的view
        @IBOutlet weak var addressTV: UITextView!
        //经度
        @IBOutlet weak var longitudeTF: UITextField!
        //纬度
        @IBOutlet weak var latitudeTF: UITextField!
    —-> 4.4 懒加载CLGeocoder对象
    //懒加载
        private lazy var geoc : CLGeocoder = {
            return CLGeocoder()
        }()
    —-> 4.5 地理编码
    //地理编码
        @IBAction func geocodingBtnClick()
        {
            let address = addressTV.text
            geoc.geocodeAddressString(address) { (clplas :[CLPlacemark]?,error : NSError?) -> Void in
                if error == nil {
                    //对CLPlacemark的解析
                    //1. 获取地标对象,取第一个,相关度最高
                    guard let clplas = clplas else {return}
                    guard let clpl = clplas.first else {return}
                    //2. 设置地址
                    self.addressTV.text = clpl.name!
                    //设置经度和纬度 (coordinate:当前位置)
                    self.longitudeTF.text = "\(clpl.location!.coordinate.longitude)"
                    self.latitudeTF.text = "\(clpl.location!.coordinate.latitude)"
                }
            }
        }
    —-> 4.6 反地理编码
    //反地理编码
        @IBAction func reverGeocodingBtnClick()
        {
            //获取位置的经度和纬度数据
            let latitude = CLLocationDegrees(self.latitudeTF.text!)
            let longitude = CLLocationDegrees(self.longitudeTF.text!)
            let location = CLLocation(latitude: latitude!, longitude: longitude!)
            geoc.reverseGeocodeLocation(location) { (clplas : [CLPlacemark]?,error : NSError?) -> Void in
                if error == nil {
                    //1. 获取地标对象,取第一个,相关度最高
                    guard let clplas = clplas else {return}
                    guard let clpl = clplas.first else {return}
                    //2. 设置地址
                    self.addressTV.text = clpl.name!
                    //设置经度和纬度 (coordinate:当前位置)
                    self.longitudeTF.text = "\(clpl.location!.coordinate.longitude)"
                    self.latitudeTF.text = "\(clpl.location!.coordinate.latitude)"
                }
            }
    
        }

    5 常见问题 : 测试无数据?

    —-> 5.1 首先, 检查是否有联网;
    —-> 5.2 其次, 如果是反地理编码,可尝试更换经纬度再次尝试, 有的经纬度没有对应信息

    6 该功能具体应用场景

    —-> 6.1 发表说说/发微博时来自哪里
    —-> 6.2 美团或者大众点评获取用户所在区域

    7 定位 + 反地理编码运用(该部分我只讲代码实现写上,具体怎么实现的,大家应该一看就明白)

    import UIKit
    import CoreLocation
    
    class ViewController: UIViewController {
    
       //懒加载(一)
        private lazy var location : CLLocationManager = {
           //创建位置管理者
            let location = CLLocationManager()
            //设置代理
            location.delegate = self
            //始终获取用户位置
            location.requestAlwaysAuthorization()
            //返回
            return location
        }()
        //懒加载(二)
        private lazy var geco : CLGeocoder = {
            return CLGeocoder()
        }()
    
        //当点击屏幕的时候开始获取用户的位置
        override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
    
            location.startUpdatingLocation()
        }
    }
    
    //实现代理方法
    extension ViewController : CLLocationManagerDelegate {
        func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
            //获取用户位置是否可用
            guard let location = locations.last else {return}
            //判断位置是否可用
            if location.horizontalAccuracy < 0 {return}
            //获取经度和纬度进行反地理编码
            geco.reverseGeocodeLocation(location) {(clplas : [CLPlacemark]?,error : NSError?) -> Void in
                //判断错误信息
                if error == nil {
                    guard let clplas = clplas else {return}
                    guard let clpl : CLPlacemark = clplas.first else {return}
                    //打印地址
                    print(clpl.name!)
                }
            }
        }
    }

    十三 使用给第三方框架进行定位

    1 使用原因 : 因为使用CoreLocation框架进行获取用户位置信息, 是通过代理进行回调; 而第三方框架将”代理模拟”转换成为”block模式”; 使用起来比较方便, 而且额外增加了超时时间等功能.

    2 框架名称 : locationManager

    3 框架地址 : https://github.com/intuit/LocationManager

    4 注意事项 : 一般集成第三方框架到项目中, 请先确保该框架没有问题, 然后再向项目中集成(导入的时候预先编译下)

    5 代码 :

    —-> 5.1 获取单例 :
    let locationMan = INTULocationManager.sharedInstance()
    —-> 5.2 获取一次用户信息
    // 获取一次用户信息
            let locationRequestID : INTULocationRequestID = locationMan.requestLocationWithDesiredAccuracy(.Room, timeout: 5, delayUntilAuthorized: false) { (location : CLLocation!, _,status : INTULocationStatus) -> Void in
                //判断
                if status == INTULocationStatus.Success {
                   print("获取到位置")
                } else {
                    print(status.rawValue)
                }
            }
    —-> 5.3 一直获取用户位置信息
    let LocationRequestID: INTULocationRequestID = locationMan.subscribeToLocationUpdatesWithDesiredAccuracy(.Room) { (location : CLLocation!, _,status : INTULocationStatus) -> Void in
                if status == INTULocationStatus.Success {
                    print("获取到位置")
                } else {
                    print(status.rawValue)
                }
            }

    6 其它具体实现请参照该框架对应的 readME

    十四 总结

    1 地图与定位,知识点还是相对比较简单的,功能也容易实现,不求能理解,只要能运用就行.开发过程中的情况我都写在里面了,希望大家还是抽时间看一下.

    2 最后,大家如果觉得我写的博客还行,麻烦大家多多关照,有什么问题可直接给我留言,我一定尽可能的解答,谢谢!!!!

    展开全文
  • 给 10086 短信</a><br /> 给 10086 发送内容为"cxye"的短信</a><br /> ,10010?body=cxye">给 10086 和 10010 发送内容为"cxye"的短信 3. Mail 邮件 就和普通的html一样使用mailto ...
    如果需要在移动浏览器中实现拨打电话,调用sms,发送email等功能,移动手机WEB页面(HTML5)Javascript提供的接口是一个好办法。

    采用url链接的方式,实现在Safari ios,Android 浏览器,webos浏览器,塞班浏览器,IE,Operamini等主流浏览器,进行拨打电话功能。

    1. 打电话

    在电话号码前面可以加上 + (加号)表示国际号码。如:

    最常用WEB页面JS实现一键拨号的电话拨打功能

    例子: 

     <a href="tel:10086">10086</a>
    使用wtai协议进行拨打电话
    <a href="wtai://wp/mc;10086">10086</a>

    <a href="wtai://wp/ap;10086;">将10086存储至电话簿 </a> 


    1.1 移动web页面自动探测电话号码

    <meta name="format-detection" content="telephone=no">
    
    <meta http-equiv="x-rim-auto-match" content="none">

    1.2 微信开发实现一键拨号出现屏蔽问题的解决方案

    打开拨号页面要做下处理,在网址后面增加一个锚节点mp.weixin.qq.com。
    实例如下:

    如:https://blog.csdn.net/cplvfx 上需要拨号代码,操作如下

    1、https://blog.csdn.net/cplvfx 继续写拨号代码
    <a href="tel:15188886666">移动WEB页面JS一键拨打号码咨询功能</a>


    2、打开这个网址链接的时候,就用这个链接https://blog.csdn.net/cplvfx/#mp.weixin.qq.com 
    这样,微信里面的一键拨号功能就OK了



    2. 短信

    如果是需要调用短信的接口,可以将链接写成下面的格式:
    sms:<phone_number>[,<phone-number>]*[?body=<message_body>]
    例如:
     <a href="sms:10086">给 10086 发短信</a><br />
     <a href="sms:10086?body=cxye">给 10086 发送内容为"cxye"的短信</a><br />
     <a href="sms:10086,10010?body=cxye">给 10086 和 10010 发送内容为"cxye"的短信</a>

    3. Mail 邮件

    就和普通的html一样使用mailto

     <a href="mailto:test1@163.com">mail</a> 
     <a href="mailto:test1@163.com,test2@126.com">mail</a> 
     <a href="mailto:test1@163.com?subject=Testing">mail</a> 
     <a href="mailto:test1@163.com?subject=Testing mailto&cc=test3@126.com">mail</a>

    4. Android Market

    如果希望一个链接能够激活Android市场的功能,可以把链接写成:

    <a href="market://search?q=[query]">Android Market link</a>
    

    其中<query>就是搜索的内容,你应用的名称

    例子:

     <a href="market://search?q=MyApp">MyApp</a>

    5. 地图定位GPS

    <a href="geopoint:[经度],[纬度]">我的位置</a>

    例如:
     <a href="geopoint:108.954823,34.275891">我的位置</a>

    6. js实现以上效果


    以电话和短信为例:

    html

            <div class="navbar-list"> <a οnclick="phonetel()">电话</a></div> 
                <div class="navbar-list"> <a οnclick="phonesms()">短信</a></div>
    

    js

    <script>
        function phonetel(){    
            window.location.href = "tel:13866668888";
        }
    	    function phonesms(){    
            window.location.href = "sms:13866668888?body=我要订货";
        }
    </script>


    参考文献2:http://www.cnblogs.com/skylaugh/p/3401825.html

    参考文献1:https://blog.csdn.net/myfmyfmyfmyf/article/details/45219543


    展开全文
  • 地图与定位(一)定位服务

    千次阅读 2016-06-20 15:50:33
    定位,CLLocation,LBS
  • GLONASS系统俄罗斯的GLONASS系统...1 GLONASS卫星星座GLONASS系统也拥有军用码和民用码两种PRN码,定位精度与GPS系统相当。其中C/A码码速率为511 kHz,码长511,码周期1 ms;P码速率5.11 MHz。不同的是,GLNOASS系...
  • 调戏微信定位算法的灵感来源于一次发带GPS信息图片的朋友圈。发现微信的定位逻辑是:如果定位之前先选择了带有GPS信息的照片,那么定位信息是先从照片引用的,如果发现没信息再从...首先是不带GPS信息的图片,我们看
  • 【UWB 定位】高精度定位

    万次阅读 2018-07-17 10:58:32
    我们都知道卫星信号在室内会被严重的影响,从而导致GPS或是北斗无法发定位。所以在室内定位主要采用无线通讯、基站定位、惯导定位等多种技术集成形成一套室内位置定位体系,从而实现人员、物体等在室内空间中的位置...
  • 比如说下面这位朋友,一开始人家图片,但他会以模糊为借口,要求人家发布原图片拿到以后,咱们把图片传到电脑上,或者用电脑接图片都可以,把图片下载到桌面上去。点击图片右键属性,在属性里面可以看到GPS...
  • android自开发定位程序。...源码中可以开启后台短信功能。可以开启基站定位功能和GPS定位功能,或者二选一等。(仅供功能实现,切勿用于非法用途!) 网址:https://download.csdn.net/download/wyazyf/10558991...
  • 实现功能:当你出门在外遇到困难时打开,硬件将通过手机卡上网,将个人定位位置到一个指定的IP上,用我的谷歌地图软件来显示。 因为是个人玩 所以GPRS选择的电子市场的二手模块 : AVR - ATMEGA64L+UBLOX GPS LEA-5 ...
  • andorid:百度地图定位:第一次定位成功之后 再次定位一直返回:505 错误locType:505locType description:NetWork location failed because baidu location service check the key is unlegal,…或者:locType:61
  • 粘性定位

    千次阅读 2019-12-03 16:43:44
    好久没博客啦这里萌芽~ 今天做了个小练习前来总结一下!成品不是特别好看凑合一下,老规矩代码会放在最后。 练习总结笔记 position: sticky 粘性定位 利用flex(伪)瀑布流展示图片 css计算属性...
  • subscriber-login.png是一张大小为203*32大小的登陆按钮图片,而且该图片截取于背景图片中,位置为(822,171)   需求: 现在想要实现一个页面,居中显示背景图片,然后点击subscriber-login.png所表示的按钮或者...
  • 一、定位 1、定位的定义 某个元素可以自由地在盒子上面移动,并且可以压着其他元素 当滚动窗口时,某个元素可以固定在页面上 可以让盒子自由的在某个盒子上进行移动并且可以压住其他盒子,或者可以在屏幕上固定在...
  • 地图定位技术揭秘(三)

    千次阅读 2018-11-16 13:12:07
    室内定位技术原理揭秘 地图软件已经成为我们日常出行必不可少的工具之一,在导航和搜索上带来了很多便捷的帮助。而定位技术在地图软件里的应用可谓无法替代,尤其是在小范围的室内定位环境下,如何帮助用户高精度...
  • 腾讯地图发送定位-打开定位功能

    千次阅读 2019-01-28 15:06:07
    用到的是腾讯地图API,主要的功能: 1.选择地址发送(地图... 2.实时地址静态(https://lbs.qq.com/static_v2/index.html) 3.地图调起 (https://lbs.qq.com/uri_v1/guide.html) 手机查看 选址组件主...
  • 做这个焦点弄了大个晚上,感觉挺晕的~上来给大家踩一下吧双向无缝的原理很简单实现起来也不难,主要头痛的是在前后无缝与按钮定位之间的配合问题,不过还好现在总算OK了。
  • 安卓微信7.0地图无法定位问题

    千次阅读 2019-01-09 18:08:23
    由于微信7.0版本升级了对https的安全限制,在微信7.0版本及以上版本使用http协议访问定位组件会导致定位失败。 另外ISO10也限制了非安全域的浏览器定位请求。 什么是 HTTP  HTTP 指的是超文本传输协议...
  • 地震定位

    千次阅读 2019-04-16 10:51:37
    地震定位方法有:HYPO71、HYPO81、HYPOINVERSE以及可以定位远震的HYPOCENIER 双差定位法:如果两次地震间的距离比震源一台站之间的距离和速度不均匀体的尺度小,那么两次地震从震源区到公共台站间的射线路径是相似的...
  • android自开发定位程序。能在地图上显示当前位置。支持经纬度查询。可开启反向显示经纬度...源码中可以开启后台短信功能。可以开启基站定位功能和GPS定位功能,或者二选一等。(仅供功能实现,切勿用于非法用途!)
  • 通过一张照片来进行GPS定位,java实现起来就这么简单
  • 绘制你的竞争定位图

    千次阅读 2008-10-23 22:19:00
    绘制你的竞争定位图 理查德・达韦尼在《哈佛商业评论》(中文版)刊出的论文《绘制你的竞争定位图》提供了一种简单的工具,即价格-利益定位图,使得公司高管无须进行费时费力的消费者调查,就能快速、客观地评估...
  • 地图定位技术揭秘(一)

    千次阅读 2018-11-15 14:05:18
    手机定位的价值 目前智能手机的使用已经越来越普遍,手机定位也是手机上的一个核心基础功能。举一个常见的应用如叫车,司机需要知道你在哪里,同时打车软件也需要基于司机和乘客的位置规划一条路线,让司机更高效的...
  • 终端侧主动定位是依赖智能终端接收周围AP来的信号特征进行定位,并通过智能终端内置地图适用于定位导航类应用。网络侧被动定位是指依赖AP接收周围智能终端来的信号特征进行定位,其关键的判断标准是AP接收/终端...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 123,901
精华内容 49,560
关键字:

如何发定位图