Browse Source

IPU框架标准版:新增原生定位插件sysLocation

liufl5 4 years ago
parent
commit
3b3645b923

+ 19 - 0
IPUMobileFunc/IPUMobileFunc/IPUSysLocationPlugin.h

1
//
2
//  IPUSysLocationPlugin.h
3
//  WadeMobileFunc
4
//
5
//  Created by Mac on 2020/1/9.
6
//  Copyright © 2020 asiainfo. All rights reserved.
7
//
8
9
#import <IPUMobile/IPUMobile.h>
10
11
@interface IPUSysLocationPlugin : IPUPlugin
12
13
/*
14
 系统定位功能(苹果原生)
15
 */
16
-(void)sysLocation:(NSArray *)param;
17
18
@end
19

+ 44 - 0
IPUMobileFunc/IPUMobileFunc/IPUSysLocationPlugin.m

1
//
2
//  IPUSysLocationPlugin.m
3
//  WadeMobileFunc
4
//
5
//  Created by Mac on 2020/1/9.
6
//  Copyright © 2020 asiainfo. All rights reserved.
7
//
8
9
#import "IPUSysLocationPlugin.h"
10
#import "IPUSysLocationUtil.h"
11
12
@implementation IPUSysLocationPlugin
13
14
-(void)sysLocation:(NSArray *)param{
15
    __block NSInteger result = 0;
16
    [[IPUSysLocationUtil sharedInstance] getLocationWithCompletion:^(BOOL isSuccess) {
17
        if (result==0) {
18
            if (isSuccess) {
19
                IPUDataMap *result = [[IPUDataMap alloc] init];
20
                [result put:@"latitude"  object:[IPUSysLocationUtil sharedInstance].latitude];
21
                [result put:@"longitude" object:[IPUSysLocationUtil sharedInstance].longitude];
22
                [result put:@"altitude"  object:[IPUSysLocationUtil sharedInstance].altitude];
23
                [result put:@"timestamp" object:[IPUSysLocationUtil sharedInstance].timestamp];
24
                [result put:@"integrity" object:[IPUSysLocationUtil sharedInstance].simulateLocationCode];
25
                [self callback:[result toString]];
26
            }
27
        }
28
        result = 1;
29
    }];
30
    
31
//    [[IPUSysLocationUtil sharedInstance] getLocationWithCompletion:^(BOOL isSuccess) {
32
//        if (isSuccess) {
33
//            WDDataMap *result = [[WDDataMap alloc] init];
34
//            [result put:@"latitude"  object:[IPUSysLocationUtil sharedInstance].latitude];
35
//            [result put:@"longitude" object:[IPUSysLocationUtil sharedInstance].longitude];
36
//            [result put:@"altitude"  object:[IPUSysLocationUtil sharedInstance].altitude];
37
//            [result put:@"timestamp" object:[IPUSysLocationUtil sharedInstance].timestamp];
38
//            [result put:@"integrity" object:[IPUSysLocationUtil sharedInstance].simulateLocationCode];
39
//            [self callback:[result toString]];
40
//        }
41
//    }];
42
}
43
44
@end

+ 38 - 0
IPUMobileFunc/IPUMobileFunc/Utils/IPUSysLocationUtil.h

1
//
2
//  IPUSysLocationUtil.h
3
//  WadeMobileFunc
4
//
5
//  Created by Mac on 2020/1/9.
6
//  Copyright © 2020 asiainfo. All rights reserved.
7
//
8
9
#import <Foundation/Foundation.h>
10
#import <CoreLocation/CoreLocation.h>
11
12
@interface IPUSysLocationUtil : NSObject<CLLocationManagerDelegate>
13
{
14
    CLLocationManager *locationmanager;//定位服务
15
}
16
@property(nonatomic,copy)void(^locationCompletion)(BOOL isSuccess);
17
@property(nonatomic,strong)NSString *longitude;//经度
18
@property(nonatomic,strong)NSString *latitude;//维度
19
@property(nonatomic,strong)NSString *altitude;//海拔高度
20
@property(nonatomic,strong)NSString *verticalAccuracy;//垂直精度
21
@property(nonatomic,strong)NSString *horizontalAccuracy;//水平精度
22
@property(nonatomic,strong)NSString *timestamp;
23
@property(nonatomic,strong)NSString * simulateLocationCode;//0:使用模拟定位;其余为未使用模拟定位
24
25
//@property(nonatomic,strong)NSString *country;//国家
26
//@property(nonatomic,strong)NSString *countryCode;//国家编码
27
//@property(nonatomic,strong)NSString *province;//省份
28
//@property(nonatomic,strong)NSString *city;//城市
29
//@property(nonatomic,strong)NSString *district;//区
30
//@property(nonatomic,strong)NSString *adCode;//邮政编码
31
//@property(nonatomic,strong)NSString *street;//街道
32
//@property(nonatomic,strong)NSString *locationDesc;//位置描述
33
34
+(instancetype) sharedInstance;
35
-(void)getLocationWithCompletion:(void(^)(BOOL isSuccess))completion;
36
37
@end
38

+ 121 - 0
IPUMobileFunc/IPUMobileFunc/Utils/IPUSysLocationUtil.m

1
//
2
//  IPUSysLocationUtil.m
3
//  WadeMobileFunc
4
//
5
//  Created by Mac on 2020/1/9.
6
//  Copyright © 2020 asiainfo. All rights reserved.
7
//
8
9
#import "IPUSysLocationUtil.h"
10
11
@implementation IPUSysLocationUtil
12
13
+ (instancetype) sharedInstance{
14
    static IPUSysLocationUtil* instance;
15
    static dispatch_once_t onceToken;
16
    dispatch_once(&onceToken, ^{
17
        instance = [[IPUSysLocationUtil alloc] init];
18
    });
19
    return instance;
20
}
21
22
-(void)getLocationWithCompletion:(void(^)(BOOL isSuccess))completion
23
{
24
    //判断定位功能是否打开
25
    if ([CLLocationManager locationServicesEnabled]) {
26
        locationmanager = [[CLLocationManager alloc]init];
27
        locationmanager.delegate = self;
28
        [locationmanager requestAlwaysAuthorization];
29
        [locationmanager requestWhenInUseAuthorization];
30
        
31
        //设置寻址精度
32
        locationmanager.desiredAccuracy = kCLLocationAccuracyBest;
33
        locationmanager.distanceFilter = 5.0;
34
        [locationmanager startUpdatingLocation];
35
        self.locationCompletion = completion;
36
    }
37
}
38
39
#pragma mark CoreLocation delegate (定位失败)
40
//定位失败后调用此代理方法
41
-(void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error
42
{
43
    if (self.locationCompletion) {
44
        self.locationCompletion(NO);
45
    }
46
}
47
48
49
#pragma mark 定位成功后则执行此代理方法
50
-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations
51
{
52
    [locationmanager stopUpdatingHeading];
53
    CLLocation *currentLocation = [locations lastObject];
54
    self.simulateLocationCode = [NSString stringWithFormat:@"%@",[currentLocation valueForKey:@"integrity"]];
55
    self.altitude = [NSString stringWithFormat:@"%.2f",currentLocation.altitude];
56
    self.verticalAccuracy = [NSString stringWithFormat:@"%.2f",currentLocation.verticalAccuracy];
57
    self.horizontalAccuracy = [NSString stringWithFormat:@"%.2f",currentLocation.horizontalAccuracy];
58
    self.longitude = [NSString stringWithFormat:@"%f",currentLocation.coordinate.longitude];
59
    self.latitude = [NSString stringWithFormat:@"%f",currentLocation.coordinate.latitude];
60
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
61
    [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
62
    self.timestamp = [dateFormatter stringFromDate:currentLocation.timestamp];
63
    
64
//    NSLog(@"海拔高度:%@",self.altitude);
65
//    NSLog(@"经度:%@",self.longitude);
66
//    NSLog(@"维度:%@",self.latitude);
67
//    NSLog(@"水平精度:%@",self.horizontalAccuracy);
68
//    NSLog(@"垂直精度:%@",self.verticalAccuracy);
69
//    NSLog(@"时间:%@",self.timestamp);
70
    
71
    if (self.locationCompletion) {
72
        self.locationCompletion(YES);
73
    }
74
    
75
//    //反地理编码
76
//    CLGeocoder *geoCoder = [[CLGeocoder alloc]  init];
77
//    [geoCoder reverseGeocodeLocation:currentLocation completionHandler:^(NSArray<CLPlacemark *> * _Nullable placemarks, NSError * _Nullable error) {
78
//        if (error != nil || placemarks.count==0) {
79
//            NSLog(@"reverseGeocodeLocation err:%@",error.localizedFailureReason);
80
//            return ;
81
//        }
82
//        CLPlacemark *placemark = placemarks[0];
83
//        NSLog(@"placemark.country------------------%@",placemark.country);//国家
84
//        NSLog(@"placemark.ISOcountryCode------------------%@",placemark.ISOcountryCode);//国家简称
85
//        NSLog(@"placemark.administrativeArea------------------%@",placemark.administrativeArea);//省份
86
//        NSLog(@"placemark.subAdministrativeArea------------------%@",placemark.subAdministrativeArea);
87
//        NSLog(@"placemark.locality------------------%@",placemark.locality);//市
88
//        NSLog(@"placemark.subLocality------------------%@",placemark.subLocality);//区
89
//        NSLog(@"placemark.thoroughfare------------------%@",placemark.thoroughfare);//街道
90
//        NSLog(@"placemark.subThoroughfare------------------%@",placemark.subThoroughfare);
91
//        NSLog(@"placemark.name------------------%@",placemark.name);//名称,eg:长沙智造协作机器人联合实验室
92
//        NSLog(@"placemark.postalCode------------------%@",placemark.postalCode);//邮政编码
93
//        NSLog(@"placemark.inlandWater------------------%@",placemark.inlandWater);
94
//        NSLog(@"placeMark.ocean------------------%@",placemark.ocean);
95
//        NSLog(@"placemark.areasOfInterest------------------%@",placemark.areasOfInterest);
96
//
97
//        self.country = [NSString stringWithFormat:@"%@",placemark.country];
98
//        self.countryCode = [NSString stringWithFormat:@"%@",placemark.ISOcountryCode];
99
//        self.province = [NSString stringWithFormat:@"%@",placemark.administrativeArea];
100
//        self.city = [NSString stringWithFormat:@"%@",placemark.locality];
101
//        if (self.province==nil || [self.province isEqualToString:@"(null)"] || [self.province isEqualToString:@""]) {//避免直辖市省份为空
102
//            self.province = self.city;
103
//        }
104
//        self.district = [NSString stringWithFormat:@"%@",placemark.subLocality];
105
//        self.street = [NSString stringWithFormat:@"%@",placemark.thoroughfare];
106
//        self.locationDesc = [NSString stringWithFormat:@"%@",placemark.name];
107
//        self.adCode = [NSString stringWithFormat:@"%@",placemark.postalCode];
108
//    }];
109
    
110
}
111
112
113
114
115
116
117
118
119
120
121
@end