You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
106 lines
4.0 KiB
Objective-C
106 lines
4.0 KiB
Objective-C
//
|
|
// BMFUserLocationModel.m
|
|
// flutter_bmfmap
|
|
//
|
|
// Created by zhangbaojin on 2020/3/01.
|
|
//
|
|
|
|
#import "BMFUserLocationModel.h"
|
|
#import "BMFMapModels.h"
|
|
#import "UIColor+BMFString.h"
|
|
#import "BMFFileManager.h"
|
|
#import <BaiduMapAPI_Map/BMKLocationViewDisplayParam.h>
|
|
|
|
struct BMFHeadingInfo{
|
|
double x;
|
|
double y;
|
|
double z;
|
|
double magneticHeading;
|
|
double trueHeading;
|
|
double accuracy;
|
|
double timestamp;
|
|
};
|
|
typedef struct CG_BOXABLE BMFHeadingInfo BMFHeadingInfo;
|
|
|
|
@implementation BMFUserLocationModel
|
|
- (BMKUserLocation *)toBMKUserLocation{
|
|
BMKUserLocation *userLocation = [BMKUserLocation new];
|
|
userLocation.location = [self.location toCLLocation];
|
|
userLocation.heading = [self.heading toCLHeading];
|
|
userLocation.title = self.title;
|
|
userLocation.subtitle = self.subtitle;
|
|
return userLocation;
|
|
}
|
|
@end
|
|
|
|
@implementation BMFLocationModel
|
|
|
|
- (CLLocation *)toCLLocation{
|
|
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
|
|
[dateFormatter setDateFormat:@"YYYY-MM-dd HH:mm:ss"];
|
|
CLLocation *location = [[CLLocation alloc] initWithCoordinate:[self.coordinate toCLLocationCoordinate2D]
|
|
altitude:self.altitude
|
|
horizontalAccuracy:self.horizontalAccuracy
|
|
verticalAccuracy:self.verticalAccuracy
|
|
course:self.course speed:self.speed
|
|
timestamp:self.timestamp ? [dateFormatter dateFromString:self.timestamp] : [NSDate date]];
|
|
return location;
|
|
}
|
|
|
|
@end
|
|
|
|
|
|
@implementation BMFHeadingModel
|
|
|
|
- (CLHeading *)toCLHeading{
|
|
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
|
|
[dateFormatter setDateFormat:@"YYYY-MM-dd HH:mm:ss"];
|
|
NSDate *date = self.timestamp ? [dateFormatter dateFromString:self.timestamp] : [NSDate date];
|
|
|
|
CLHeading *heading = [CLHeading new];
|
|
BMFHeadingInfo info = {};
|
|
// 磁北 则对应于随时间变化的地球磁场北极
|
|
info.magneticHeading = self.magneticHeading;
|
|
// 真北 始终指向地理北极点
|
|
info.trueHeading = self.trueHeading;
|
|
// 方向值的误差范围
|
|
info.accuracy = self.headingAccuracy;
|
|
// 获取该设备在 X 方向上监听得到的原始磁力值,该磁力值的强度单位是微特斯拉。
|
|
info.x = self.x;
|
|
// 获取该设备在 Y 方向上监听得到的原始磁力值,该磁力值的强度单位是微特斯拉。
|
|
info.y = self.y;
|
|
// 获取该设备在 Z 方向上监听得到的原始磁力值,该磁力值的强度单位是微特斯拉。
|
|
info.z = self.z;
|
|
info.timestamp = [date timeIntervalSince1970] - NSTimeIntervalSince1970;
|
|
|
|
// KVC赋值
|
|
NSValue *value = [NSValue valueWithBytes:&info objCType:@encode(BMFHeadingInfo)];
|
|
// CLHeadingInternal
|
|
id _internal = [[NSClassFromString(@"CLHeadingInternal") alloc] init];
|
|
// NSConcreteValue
|
|
[_internal setValue:value forKey:@"fHeading"];
|
|
[heading setValue:_internal forKey:@"_internal"];
|
|
|
|
return heading;
|
|
}
|
|
|
|
@end
|
|
|
|
@implementation BMFLocationViewDisplayParam
|
|
|
|
- (BMKLocationViewDisplayParam *)toBMKLocationViewDisplayParam{
|
|
BMKLocationViewDisplayParam *param = [BMKLocationViewDisplayParam new];
|
|
param.locationViewOffsetX = self.locationViewOffsetX;
|
|
param.locationViewOffsetY = self.locationViewOffsetY;
|
|
param.isAccuracyCircleShow = self.isAccuracyCircleShow;
|
|
param.accuracyCircleStrokeColor = [UIColor fromColorString:self.accuracyCircleStrokeColor];
|
|
param.accuracyCircleFillColor = [UIColor fromColorString:self.accuracyCircleFillColor];
|
|
param.isRotateAngleValid = self.isRotateAngleValid;
|
|
param.locationViewImage = [UIImage imageWithContentsOfFile:[[BMFFileManager defaultCenter] pathForFlutterImageName:self.locationViewImage]];
|
|
param.canShowCallOut = self.canShowCallOut;
|
|
param.locationViewHierarchy = self.locationViewHierarchy;
|
|
return param;
|
|
}
|
|
|
|
@end
|