LBS

前提 那些KEY  资料都申请好     

由于项目只需要定位与导航  所以只添加了定位导航的第三方


1.配置plist 文件

定位权限

在项目的 Info.plist 添加 NSLocationWhenInUseUsageDescription 或 NSLocationAlwaysUsageDescription 字段,根据您的业务需求,任选其一即可。

其中:

  • NSLocationWhenInUseUsageDescription 表示应用在前台的时候可以搜到更新的位置信息。
  • NSLocationAlwaysUsageDescription 表示应用在前台和后台(suspend 或 terminated)都可以获取到更新的位置数据。
在APP delegate 设置key  


#import <AMapFoundationKit/AMapFoundationKit.h>

[AMapServicessharedServices].apiKey =@"f7e87824ce38a3efa48c03f08dced174";



在控制器创建视图与定位

 

- (MAMapView *)mapView{

    if (_mapView ==nil) {

        MAMapView *map = [[MAMapViewalloc] initWithFrame:self.view.frame];

        map.delegate =self;

        [self.viewaddSubview:map];

        _mapView = map;

    }

    return_mapView;

}

配置参数

- (void)configLocationManager

{

    self.locationManager = [[AMapLocationManageralloc] init];

    

    [self.locationManagersetDelegate:self];

    

    //设置不允许系统暂停定位

    [self.locationManagersetPausesLocationUpdatesAutomatically:NO];

    

    //设置允许在后台定位

//    [self.locationManager setAllowsBackgroundLocationUpdates:YES];

    

    [self.locationManagersetDesiredAccuracy:kCLLocationAccuracyKilometer];

//    [self.locationManager setDesiredAccuracy:kCLLocationAccuracyBest];

    //设置定位超时时间

    [self.locationManagersetLocationTimeout:4];



}

定位回调

- (void)initCompleteBlock

{

    __weak__typeof(&*self)weakSelf =self;

    self.completionBlock = ^(CLLocation *location,AMapLocationReGeocode *regeocode,NSError *error)

    {

        if (error)

        {

            NSLog(@"locError:{%ld - %@};", (long)error.code, error.localizedDescription);

            if (error.code ==AMapLocationErrorLocateFailed)

            {

                return;

            }

        }

        if (location)

        {

            MAPointAnnotation *annotation = [[MAPointAnnotationalloc] init];

            [annotation setCoordinate:location.coordinate];

            

            if (regeocode)

            {

                [annotation setTitle:[NSStringstringWithFormat:@"%@", regeocode.formattedAddress]];

                [annotation setSubtitle:[NSStringstringWithFormat:@"%@-%@-%.2fm", regeocode.citycode, regeocode.adcode, location.horizontalAccuracy]];

            }

            else

            {

                [annotation setTitle:[NSStringstringWithFormat:@"lat:%f;lon:%f;", location.coordinate.latitude, location.coordinate.longitude]];

                [annotation setSubtitle:[NSStringstringWithFormat:@"accuracy:%.2fm", location.horizontalAccuracy]];

            }

            

            [weakSelf addAnnotationToMapView:annotation];

        }

    };

}

- (void)addAnnotationToMapView:(id<MAAnnotation>)annotation

{

    [self.mapViewaddAnnotation:annotation];

    

    [self.mapViewselectAnnotation:annotationanimated:YES];

    [self.mapViewsetZoomLevel:15.1animated:NO];

    [self.mapViewsetCenterCoordinate:annotation.coordinateanimated:YES];

}

#pragma mark - AMapLocationManager Delegate


- (void)amapLocationManager:(AMapLocationManager *)manager didFailWithError:(NSError *)error

{

    NSLog(@"%s, amapLocationManager = %@, error = %@",__func__, [managerclass], error);

}


- (void)amapLocationManager:(AMapLocationManager *)manager didUpdateLocation:(CLLocation *)location

{

    NSLog(@"location:{lat:%f; lon:%f; accuracy:%f}", location.coordinate.latitude, location.coordinate.longitude, location.horizontalAccuracy);

    

    

    [self.mapViewsetCenterCoordinate:location.coordinate];

    [self.mapViewsetZoomLevel:15.1animated:NO];

}

#pragma mark - MAMapView Delegate


- (MAAnnotationView *)mapView:(MAMapView *)mapView viewForAnnotation:(id<MAAnnotation>)annotation

{

    if ([annotationisKindOfClass:[MAPointAnnotationclass]])

    {

        staticNSString *pointReuseIndetifier =@"pointReuseIndetifier";

        

        MAPinAnnotationView *annotationView = (MAPinAnnotationView *)[mapViewdequeueReusableAnnotationViewWithIdentifier:pointReuseIndetifier];

        if (annotationView ==nil)

        {

            annotationView = [[MAPinAnnotationViewalloc] initWithAnnotation:annotationreuseIdentifier:pointReuseIndetifier];

        }

        

        annotationView.canShowCallout   =YES;

        annotationView.animatesDrop     =YES;

        annotationView.draggable        =NO;

        annotationView.pinColor         =MAPinAnnotationColorPurple;

        

        return annotationView;

    }

    

    returnnil;

}

 开启定位

[self.locationManagerstartUpdatingLocation];


开始定位接受回调

 [self.mapViewremoveAnnotations:self.mapView.annotations];

    

    //进行单次定位请求

 [self.locationManagerrequestLocationWithReGeocode:YEScompletionBlock:self.completionBlock];




进入APP就要拿到坐标与给用户提示   

willFinishLaunchingWithOptions


内容概要:本文详细介绍了基于滑模控制(SMC)和H∞控制相结合的方法应用于永磁直线同步电机(PMLSM)的鲁棒控制。首先阐述了PMLSM的基本数学模型及其物理意义,包括d-q坐标系下的电压方程和运动方程。随后解释了滑模控制的工作原理,重点在于如何构建滑模面并确保系统沿此面稳定运行。接着讨论了H∞控制的目标——即使在不确定条件下也能保持良好的性能表现。文中还提供了具体的Matlab代码实例,展示了如何利用Matlab控制系统工具箱进行H∞控制器的设计。最后给出了一段完整的Matlab程序框架,演示了两种控制方法的具体实现方式。 适合人群:从事电机控制领域的研究人员和技术人员,尤其是那些想要深入了解滑模控制和H∞控制理论及其在实际工程中应用的人士。 使用场景及目标:适用于需要提高永磁直线同步电机控制系统抗干扰能力和鲁棒性的场合,如工业自动化生产线、精密加工设备等。通过学习本篇文章提供的理论知识和编程技巧,读者能够掌握这两种先进控制策略的应用方法,从而提升自身解决复杂控制问题的能力。 其他说明:文中所涉及的内容不仅限于理论讲解,还包括了大量的实战经验分享,有助于读者快速上手并在实践中不断改进自己的设计方案。同时鼓励读者积极尝试不同的参数配置,以便找到最适合特定应用场景的最佳解决方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值