`
刘燕宝宝鱼
  • 浏览: 26635 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

iOS 定位

 
阅读更多

1、使用iOS定位功能 需要使用此类    CLLocationManager* locationManager,首先引入库文件

#import <CoreLocation/CoreLocation.h>,在工程配置中添加CoreLocation的静态库。

2、在定位的类实现此协议 <CLLocationManagerDelegate>

3、初始化类,新建locationManager对象。

-(id)initLocationManager
{
    self.locationManager=[[CLLocationManager alloc]init];
    [[self locationManager] setDelegate:self];
    self.locationManager.headingFilter=0;
    self.locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters;
    self.locationManager.distanceFilter = 10.0f;
    return self;
}

 4、获得当前定位位置

-(CLLocation*) userLocation
{
    return [locationManager location];
}

5、根据需要实现当定位位置变化的方法

-(void) locationManager:(CLLocationManager*)manager didUpdateToLocation:(CLLocation*)newLocation fromLocation:(CLLocation*)oldLocation
{
    self.preLocation = self.lastLocation;
    self.lastLocation=[newLocation coordinate];
    self.lastTime = [NSDate date];
    //    NSLog(@"newLocation=%f,%f",self.lastLocation.latitude,self.lastLocation.longitude);
    if (userLocationAccuracyIndicator == nil)
    {
        RMCircle* circle = [[RMCircle alloc] initWithContents:self.mapView radiusInMeters:[newLocation horizontalAccuracy] latLong:[newLocation coordinate]];
        
        [circle setLineWidthInPixels:2.0f]; // b2bed4
        [circle setLineColor:[UIColor colorWithRed:1.f/255.f green:92.f/255.f blue:244.f/255.f alpha:1.0f]];
        [circle setFillColor:[UIColor colorWithRed:178.f/255.f green:190.f/255.f blue:221.f/255.f alpha:0.5f]];
        [self setUserLocationAccuracyIndicator:circle];
        // add the user location's accuracy indicator as the first layer
        //    [[self overlay] insertSublayer:circle atIndex:0];
        circle.name=@"MYLOCATION";
        [self.mapView.markerManager addRMCircle:circle];
    }
    else
    {
        [userLocationAccuracyIndicator moveToLatLong:[newLocation coordinate]];
        [userLocationAccuracyIndicator setRadiusInMeters:[newLocation horizontalAccuracy]];
    }
    if (userLocationMarker == nil)
    {
        RMMarker* marker = [[RMMarker alloc] initWithUIImage:[UIImage imageNamed:@"image/gps_arrow.png"] anchorPoint:CGPointMake(0.5f,0.5f)];
        
        UIView* view=[NSUIUtil bubbleView:@"我的位置"];
        RMMarker* mark=[[RMMarker alloc]initWithUIView:view placename:@"我的位置"];
        NSPlace* point=[[NSPlace alloc]init];
        point.point=[newLocation coordinate];
        point.name=@"我的位置";
        marker.place=point;
        mark.name=@"MYLOCATION";
        marker.name=@"MYLOCATION";
        [self setUserLocationMarker:marker];
        [self.mapView.markerManager addMarker:marker AtLatLong:point.point];
        //[self.mapView.markerManager addMarker:mark AtLatLong:point.point];
    }
    else{
        [self.mapView.markerManager moveMarker:userLocationMarker AtLatLon:[newLocation coordinate]];
    }
       
}

  

#pragma mark CLLocationManagerDelegate protocol
-(void) locationManager:(CLLocationManager*)manager didFailWithError:(NSError*)error
{
    NSLog(@"Location manager failed with error: %@",[error localizedDescription]);
}
-(void)locationManager:(CLLocationManager *)manager didUpdateHeading:(CLHeading *)newHeading{
    if (userLocationMarker&&newHeading.headingAccuracy>0){
        double nowAngle = 0;
        NSDate *nowTime = [NSDate date];
        double del_lat = self.lastLocation.latitude - self.preLocation.latitude;
        double del_lon = self.lastLocation.longitude - self.preLocation.longitude;
        if(self.preLocation.latitude!=0.0 && self.preLocation.longitude!=0.0 && fabs(del_lat) + fabs(del_lon)> 0.0001 && [nowTime timeIntervalSinceDate:self.lastTime] < 3.0)
        {
            nowAngle = atan2(del_lon, del_lat);
        }
        else{
            [userLocationMarker setAffineTransform:CGAffineTransformIdentity];
            nowAngle=1.0*M_PI*(newHeading.magneticHeading+[self getDeviceOrientation])/180.0;
        }
        CGAffineTransform angle=CGAffineTransformMakeRotation(nowAngle);
        [userLocationMarker setAffineTransform:angle];
    }
}
-(int)getDeviceOrientation{
    UIInterfaceOrientation or= [UIApplication sharedApplication].statusBarOrientation;
    switch (or) {
        case UIInterfaceOrientationLandscapeLeft:
            return -90;
            break;
        case UIInterfaceOrientationLandscapeRight:
            return 90;
            break;
        default:
            break;
    }
    return 0;
}

 

分享到:
评论

相关推荐

    iOS定位的demo

    这个“iOS定位的demo”很显然是一个示例项目,用于演示如何在iOS应用中集成和使用定位服务。我们将深入探讨iOS定位相关的知识点,包括核心位置框架(Core Location)、权限管理、定位精度、节能模式以及实时定位更新...

    iOS 定位+大头针+导航demo

    这个“iOS 定位+大头针+导航demo”显然是一款基于地图的示例应用,用于演示如何集成定位服务、显示大头针标记以及实现导航功能。下面我们将深入探讨这些关键知识点。 首先,我们要了解的是iOS中的定位服务。这主要...

    IOS定位管理工具类

    IOS定位管理工具类,方便全局使用

    ios定位零误差,应用极其简单的方法

    "ios定位零误差,应用极其简单的方法"这个标题暗示了博主张明伟分享了一种能实现高精度定位的技术,且操作简便。虽然描述部分为空,但我们可以根据标签“源码”和“工具”推测,这篇博客可能提供了源代码示例和实用...

    iOS 定位+大头针+导航

    以下将详细介绍标题“iOS 定位+大头针+导航”所涉及的知识点。 首先,我们来讨论iOS中的定位服务。iOS设备内建了GPS硬件,可以通过CoreLocation框架获取用户的位置信息。开发者需要在Info.plist文件中声明使用定位...

    swift-iOS定位使用全解iOSLocation的用法

    本文将深入探讨使用Swift进行iOS定位的方法,特别是通过`CoreLocation`框架来实现的一次性定位、持续定位、基站定位、指南针功能、区域监听以及iBeacon监听。 ### 一、一次性定位 一次性定位是获取用户当前地理位置...

    IOS定位并转换成具体城市信息

    首先,iOS中的定位服务主要由Core Location框架提供,它提供了与位置数据相关的接口和类,如CLLocationManager和CLGeocoder。CLLocationManager用于管理定位服务的开启、关闭以及设置定位参数,如精度、更新频率等。...

    iOS定位,根据经纬度准确实时定位

    在iOS系统中,实现根据经纬度的实时定位主要依赖于Core Location框架,这是Apple提供的一套强大的定位服务API。本文将深入探讨如何利用这个框架在iOS应用中进行精确的地理位置定位。 1. Core Location框架介绍 Core...

    交友盲盒网站5.0全新源码,修复iOS定位、新增自定义搜索框抽取.txt

    交友盲盒网站5.0全新源码,修复iOS定位、新增自定义搜索框抽取.txt

    ios自带的定位

    在iOS开发中,苹果提供了内置的Core Location框架,使得开发者能够轻松地集成定位功能到自己的应用中。这个框架允许我们获取设备的地理位置信息,包括经纬度、海拔、速度和方向等。下面我们将深入探讨如何使用iOS...

    IOS 定位-Core Location

    在iOS开发中,Core Location是苹果提供的一套强大的框架,用于获取设备的地理位置信息。它允许开发者集成到应用中,实现精准的定位服务,包括经纬度坐标、海拔、速度等数据。本示例将深入讲解如何使用Objective-C...

    讲解iOS开发中基本的定位功能实现

    在iOS开发中,实现基本的定位功能是许多应用的核心需求,尤其对于导航、社交和生活服务类应用来说至关重要。本教程将介绍如何使用Objective-C来实现这一功能,主要涉及`CLLocationManager`、`CLLocation`和`...

    iOS定位 获取当前位置

    locationManager.requestAlwaysAuthorization() // 请求始终定位权限(iOS 13及以上) } ``` 实现`CLLocationManagerDelegate`协议的方法,如`locationManager(_:didUpdateLocations:)`,它会在位置更新时被调用:...

    ios 地图定位 demo

    在iOS开发中,地图定位是一项基础且重要的功能,它允许用户获取当前位置信息并进行相关操作。本Demo,"ios 地图定位 demo",旨在帮助开发者了解如何在iOS应用中集成地图定位服务,以实现基本的地图定位功能。下面将...

    一个闪烁的圆圈控件,主要用于定位,ios上的

    在iOS开发中,创建一个闪烁的圆圈控件可以为用户提供一种引人注意的视觉指示,通常用于定位或强调某个特定的功能。这个“闪烁的圆圈控件”可能是一个自定义视图,专为iOS平台设计,以实现特定的交互效果。在本案例中...

    swift-更改iOS定位swift

    本教程将深入探讨如何在Swift中更改iOS设备的定位设置,并提供相关知识点。 1. **CoreLocation框架** CoreLocation是iOS SDK中的一个核心组件,用于处理与地理位置相关的数据,如经度、纬度、海拔、速度等。开发者...

    ios实时定位

    一、iOS定位服务基础 1. Core Location框架:苹果提供了一个名为Core Location的框架,它是iOS、watchOS和tvOS中处理地理位置信息的核心组件。它允许开发者获取用户的实时位置、方向、速度等信息,同时还能管理位置...

    ios地图定位导航

    一、iOS定位服务 iOS设备支持GPS、Wi-Fi、蜂窝数据和iBeacon等多种定位技术,通过Core Location框架提供服务。开发者可以使用Core Location框架获取用户的位置信息,包括经纬度坐标、海拔、速度和方向。为了保护用户...

    ios 自带的定位。

    在iOS开发中,苹果提供了内置的定位服务框架Core Location,使得开发者可以轻松地在应用程序中集成定位功能。本文将深入探讨iOS自带的定位服务,并基于提供的`mapViewController`这一文件名称,推测这是一个与地图和...

Global site tag (gtag.js) - Google Analytics