You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
305 lines
11 KiB
305 lines
11 KiB
// |
|
// MapReviseViewController.m |
|
// tongxin |
|
// |
|
// Created by ecell on 2023/5/22. |
|
// Copyright © 2023 xTT. All rights reserved. |
|
// |
|
|
|
#import "MapReviseViewController.h" |
|
#import <MAMapKit/MAMapKit.h> |
|
#import <AMapLocationKit/AMapLocationKit.h> |
|
#import <AMapSearchKit/AMapSearchKit.h> |
|
|
|
|
|
@interface MapReviseViewController ()<MAMapViewDelegate,AMapLocationManagerDelegate,AMapSearchDelegate> |
|
|
|
//定位 |
|
@property (nonatomic, strong) AMapLocationManager *locationManager; |
|
//地图 |
|
@property (nonatomic, strong) MAMapView *mapView; |
|
//大头针 |
|
@property (nonatomic, strong) MAPointAnnotation *annotation; |
|
//逆地理编码 |
|
@property (nonatomic, strong) AMapReGeocodeSearchRequest *regeo; |
|
//逆地理编码使用的 |
|
@property (nonatomic, strong) AMapSearchAPI *search; |
|
|
|
/// 定位Btn |
|
@property (nonatomic, weak) UIButton *locationBtn; |
|
|
|
@property (nonatomic ,strong) UIView *bottomView; |
|
|
|
@property (nonatomic ,weak) UILabel *addressLabel; |
|
|
|
|
|
/// |
|
@property (nonatomic ,strong) UIView *topView; |
|
|
|
/// 经度 |
|
@property (nonatomic ,strong) NSString *lon; |
|
|
|
|
|
/// 纬度 |
|
@property (nonatomic ,strong) NSString *lat; |
|
|
|
@end |
|
|
|
@implementation MapReviseViewController |
|
|
|
- (void)viewDidLoad { |
|
[super viewDidLoad]; |
|
// Do any additional setup after loading the view. |
|
self.zx_navTitle = @"位置纠偏"; |
|
[self.view addSubview:self.bottomView]; |
|
[self.bottomView mas_makeConstraints:^(MASConstraintMaker *make) { |
|
make.left.right.equalTo(self.view); |
|
make.bottom.equalTo(self.view.mas_bottom); |
|
make.height.mas_equalTo(Adapted(140)); |
|
}]; |
|
|
|
// //检查隐私合规 |
|
// [MAMapView updatePrivacyShow:AMapPrivacyShowStatusDidShow privacyInfo:AMapPrivacyInfoStatusDidContain]; |
|
// [MAMapView updatePrivacyAgree:AMapPrivacyAgreeStatusDidAgree]; |
|
|
|
//地图 |
|
_mapView = [[MAMapView alloc]initWithFrame:CGRectMake(0, iPhoneX_NavHeight, ScreenWidth, ScreenHeight-iPhoneX_NavHeight-Adapted(140))]; |
|
[self.view addSubview:_mapView]; |
|
_mapView.zoomLevel = 15; |
|
_mapView.showsUserLocation = YES; |
|
_mapView.showsCompass = NO; |
|
_mapView.delegate = self; |
|
_mapView.userTrackingMode = MAUserTrackingModeFollow; |
|
_mapView.showsScale = NO; |
|
[self.view addSubview:self.mapView]; |
|
|
|
UIImageView *centerAnnotationView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"定位"]]; |
|
centerAnnotationView.center = CGPointMake(self.mapView.center.x, self.mapView.center.y - iPhoneX_NavHeight - CGRectGetHeight(centerAnnotationView.bounds) / 2); |
|
[self.mapView addSubview:centerAnnotationView]; |
|
|
|
UIButton *locationBtn = [UICommon ui_buttonSimple:CGRectZero font:Font_(0) normalColor:KKWhiteColorColor normalText:@"" click:^(id x) { |
|
[self actionLocation]; |
|
}]; |
|
[locationBtn setImage:ImageName_(@"icon_chuild_positioning") forState:0]; |
|
self.locationBtn = locationBtn; |
|
[self.view addSubview:locationBtn]; |
|
[locationBtn mas_makeConstraints:^(MASConstraintMaker *make) { |
|
make.top.equalTo(self.view).offset(iPhoneX_NavHeight+10); |
|
make.right.equalTo(self.view.mas_right).inset(10); |
|
make.size.mas_equalTo(CGSizeMake(Adapted(35), Adapted(35))); |
|
}]; |
|
|
|
[self.view addSubview:self.topView]; |
|
[self.topView mas_makeConstraints:^(MASConstraintMaker *make) { |
|
make.top.equalTo(self.view).offset(iPhoneX_NavHeight+10); |
|
make.centerX.equalTo(self.view); |
|
make.size.mas_equalTo(CGSizeMake(270, 32)); |
|
}]; |
|
|
|
|
|
//定位 |
|
[self.locationManager requestLocationWithReGeocode:YES completionBlock:^(CLLocation *location, AMapLocationReGeocode *regeocode, NSError *error) { |
|
|
|
if (error) { |
|
return ; |
|
} |
|
//添加大头针 |
|
self.annotation = [[MAPointAnnotation alloc]init]; |
|
|
|
self.annotation.coordinate = CLLocationCoordinate2DMake(location.coordinate.latitude, location.coordinate.longitude); |
|
[self.mapView addAnnotation:self.annotation]; |
|
[self.mapView setCenterCoordinate:CLLocationCoordinate2DMake(location.coordinate.latitude, location.coordinate.longitude) animated:YES]; |
|
//让地图在缩放过程中移到当前位置试图 |
|
[self.mapView setZoomLevel:16.1 animated:YES]; |
|
|
|
}]; |
|
} |
|
|
|
- (void)actionLocation |
|
{ |
|
if (self.mapView.userTrackingMode == MAUserTrackingModeFollow) |
|
{ |
|
[self.mapView setUserTrackingMode:MAUserTrackingModeNone animated:YES]; |
|
} |
|
else |
|
{ |
|
[self.mapView setCenterCoordinate:self.mapView.userLocation.coordinate animated:YES]; |
|
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0.5 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{ |
|
// 因为下面这句的动画有bug,所以要延迟0.5s执行,动画由上一句产生 |
|
[self.mapView setUserTrackingMode:MAUserTrackingModeFollow animated:YES]; |
|
}); |
|
} |
|
} |
|
|
|
|
|
- (MAAnnotationView *)mapView:(MAMapView *)mapView viewForAnnotation:(id<MAAnnotation>)annotation |
|
{ |
|
|
|
if ([annotation isKindOfClass:[MAPointAnnotation class]]) { |
|
static NSString *reuseIdetifier = @"annotationReuseIndetifier"; |
|
MAAnnotationView *annotationView = (MAAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:reuseIdetifier]; |
|
if (annotationView == nil) { |
|
annotationView = [[MAAnnotationView alloc]initWithAnnotation:annotation reuseIdentifier:reuseIdetifier]; |
|
} |
|
//放一张大头针图片即可 |
|
annotationView.image = [UIImage imageNamed:@"定位点"]; |
|
//annotationView.centerOffset = CGPointMake(0, -18); |
|
return annotationView; |
|
} |
|
|
|
return nil; |
|
} |
|
|
|
#pragma mark - 让大头针不跟着地图滑动,时时显示在地图最中间 |
|
- (void)mapViewRegionChanged:(MAMapView *)mapView |
|
{ |
|
_annotation.coordinate = mapView.centerCoordinate; |
|
} |
|
#pragma mark - 滑动地图结束修改当前位置 |
|
- (void)mapView:(MAMapView *)mapView regionDidChangeAnimated:(BOOL)animated { |
|
self.regeo.location = [AMapGeoPoint locationWithLatitude:mapView.centerCoordinate.latitude longitude:mapView.centerCoordinate.longitude]; |
|
[self.search AMapReGoecodeSearch:self.regeo]; |
|
} |
|
|
|
|
|
- (AMapLocationManager *)locationManager { |
|
if (!_locationManager) { |
|
_locationManager = [[AMapLocationManager alloc]init]; |
|
[_locationManager setDesiredAccuracy:kCLLocationAccuracyHundredMeters]; |
|
_locationManager.locationTimeout = 2; |
|
_locationManager.reGeocodeTimeout = 2; |
|
} |
|
return _locationManager; |
|
} |
|
|
|
- (void)onReGeocodeSearchDone:(AMapReGeocodeSearchRequest *)request response:(AMapReGeocodeSearchResponse *)response { |
|
if (response.regeocode != nil) { |
|
//AMapReGeocode *reocode = response.regeocode; |
|
//地图标注的点的位置信息全在reoceode里面了 |
|
//[_locationManager stopUpdatingLocation]; |
|
[self.mapView setShowsUserLocation:NO]; |
|
NSLog(@"%@",response.regeocode.formattedAddress); |
|
self.addressLabel.text = response.regeocode.formattedAddress; |
|
_annotation.coordinate = CLLocationCoordinate2DMake(request.location.latitude, request.location.longitude); |
|
self.lon = [NSString stringWithFormat:@"%f",request.location.longitude]; |
|
self.lat = [NSString stringWithFormat:@"%f",request.location.latitude]; |
|
} |
|
} |
|
|
|
- (AMapReGeocodeSearchRequest *)regeo { |
|
if (!_regeo) { |
|
_regeo = [[AMapReGeocodeSearchRequest alloc]init]; |
|
_regeo.requireExtension = YES; |
|
} |
|
return _regeo; |
|
} |
|
|
|
- (AMapSearchAPI *)search { |
|
if (!_search) { |
|
_search = [[AMapSearchAPI alloc]init]; |
|
_search.delegate = self; |
|
} |
|
return _search; |
|
} |
|
|
|
|
|
- (UIView *)bottomView |
|
{ |
|
if(!_bottomView) |
|
{ |
|
_bottomView = [UIView new]; |
|
_bottomView.backgroundColor = KKWhiteColorColor; |
|
|
|
UIButton *btns = [UICommon ui_buttonSimple:CGRectZero font:Font_(16) normalColor:KKWhiteColorColor normalText:@"位置纠偏" click:^(id x) { |
|
[self setLocationRectify]; |
|
}]; |
|
btns.layer.cornerRadius = 22; |
|
btns.layer.masksToBounds = YES; |
|
btns.backgroundColor = mainColor; |
|
[_bottomView addSubview:btns]; |
|
CGFloat bb = iPhoneX_TabbarSafeBottomMargin > 0 ? iPhoneX_TabbarSafeBottomMargin : 34; |
|
[btns mas_makeConstraints:^(MASConstraintMaker *make) { |
|
make.left.right.equalTo(_bottomView).inset(20); |
|
make.bottom.equalTo(_bottomView.mas_bottom).inset(bb); |
|
make.height.mas_equalTo(44); |
|
}]; |
|
|
|
UIImageView *iconImg = [UICommon ui_imageView:CGRectZero fileName:@"icon_positioning"]; |
|
[_bottomView addSubview:iconImg]; |
|
[iconImg mas_makeConstraints:^(MASConstraintMaker *make) { |
|
make.left.equalTo(_bottomView).offset(20); |
|
make.top.equalTo(_bottomView).offset(15); |
|
make.size.mas_equalTo(iconImg.image.size); |
|
}]; |
|
|
|
UILabel *addressLabel = [UICommon ui_label:CGRectZero lines:0 align:NSTextAlignmentLeft font:Font_(15) textColor:KKTextColor text:@"" Radius:0]; |
|
self.addressLabel = addressLabel; |
|
[_bottomView addSubview:addressLabel]; |
|
[addressLabel mas_makeConstraints:^(MASConstraintMaker *make) { |
|
make.left.equalTo(iconImg.mas_right).offset(2); |
|
make.right.equalTo(_bottomView.mas_right).inset(20); |
|
make.centerY.equalTo(iconImg); |
|
}]; |
|
} |
|
return _bottomView; |
|
} |
|
|
|
- (UIView *)topView |
|
{ |
|
if(!_topView) |
|
{ |
|
_topView = [UICommon ui_view:CGRectZero backgroundColor:RGBA(0, 0, 0, .4) cornerRadius:16 borderWidth:0 borderColor:KKClearColor]; |
|
|
|
UIImageView *iconImg = [UICommon ui_imageView:CGRectZero fileName:@"comm_ horn"]; |
|
[_topView addSubview:iconImg]; |
|
[iconImg mas_makeConstraints:^(MASConstraintMaker *make) { |
|
make.left.equalTo(_topView).offset(5); |
|
make.centerY.equalTo(_topView); |
|
make.size.mas_equalTo(CGSizeMake(20, 20)); |
|
}]; |
|
|
|
UILabel *titleLabel = [UICommon ui_label:CGRectZero lines:0 align:NSTextAlignmentLeft font:Font_(12) textColor:KKWhiteColorColor text:@"拖动地图选择设备正确位置,纠正设备位置" Radius:0]; |
|
[_topView addSubview:titleLabel]; |
|
[titleLabel mas_makeConstraints:^(MASConstraintMaker *make) { |
|
make.left.equalTo(iconImg.mas_right).offset(5); |
|
make.right.equalTo(_topView.mas_right).inset(5); |
|
make.centerY.equalTo(iconImg); |
|
}]; |
|
|
|
} |
|
return _topView; |
|
} |
|
|
|
- (void)viewWillDisappear:(BOOL)animated |
|
{ |
|
[super viewWillDisappear:animated]; |
|
[self.locationManager stopUpdatingLocation]; |
|
} |
|
|
|
- (void)setLocationRectify |
|
{ |
|
[SVProgressHUD show]; |
|
NSMutableDictionary *parameters = [NSMutableDictionary dictionary]; |
|
[parameters setValue:self.lon forKey:@"lon"]; |
|
[parameters setValue:self.lat forKey:@"lat"]; |
|
[parameters setValue:self.addressLabel.text forKey:@"address"]; |
|
[cUser.cDevice setLocationRectify:parameters success:^(id responseObject) { |
|
[SVProgressHUD dismiss]; |
|
[SVProgressHUD showSuccessWithStatus:@"位置纠偏成功"]; |
|
|
|
} failure:^(id faiObject) { |
|
|
|
}]; |
|
} |
|
|
|
/* |
|
#pragma mark - Navigation |
|
|
|
// In a storyboard-based application, you will often want to do a little preparation before navigation |
|
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { |
|
// Get the new view controller using [segue destinationViewController]. |
|
// Pass the selected object to the new view controller. |
|
} |
|
*/ |
|
|
|
@end
|
|
|