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.

227 lines
7.8 KiB

2 years ago
//
// GoogleMapView.m
// LekangGuard
//
// Created by ecell on 2022/11/18.
//
#import "GoogleMapView.h"
@interface GoogleMapView ()<GMSMapViewDelegate>
@property (nonatomic,strong) GMSMapView *GmapView;//地图
@property (nonatomic,strong) GMSMarker *marker;//大头针
@property (nonatomic,assign) CLLocationCoordinate2D coordinate2D;
@property (nonatomic,strong) GMSPlacesClient * placesClient;//可以获取某个地方的信息
@end
@implementation GoogleMapView
- (instancetype)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self)
{
self.backgroundColor = KKClearColor;
[self subViews];
}
return self;
}
- (void)setLaloModel:(LatestLocationModel *)laloModel
{
_laloModel = laloModel;
CLLocationCoordinate2D d2 = CLLocationCoordinate2DMake(laloModel.latitude.doubleValue, laloModel.longitude.doubleValue);
_coordinate2D = d2;///[JZLocationConverter wgs84ToGcj02:d2];
_GmapView.camera = [GMSCameraPosition cameraWithTarget:_coordinate2D zoom:15];
[self mapView:self.GmapView idleAtCameraPosition:_GmapView.camera];
}
- (void)subViews
{
self.laloModel = APIManager.sharedManager.laloModel;
GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:self.laloModel.latitude.doubleValue
longitude:self.laloModel.longitude.doubleValue
zoom:15];
self.GmapView = [GMSMapView mapWithFrame:self.bounds camera:camera];
self.GmapView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
[self.GmapView setMapType:kGMSTypeNormal];//地图类型
//设置缩放级别限制
// [mapView setMinZoom:10 maxZoom:15];
self.GmapView.myLocationEnabled = YES;//我的定位poi
self.GmapView.indoorEnabled = NO;//室内地图.
self.GmapView.delegate = self;
[self addSubview:self.GmapView];
self.marker = [[GMSMarker alloc] init];
self.marker.tracksViewChanges = YES;
}
#pragma 缩小地图
- (void)setMapZoom:(CLLocationCoordinate2D)centerCoordinate
{
@try {
if (CLLocationCoordinate2DIsValid(centerCoordinate))
{
_coordinate2D = centerCoordinate;/// [JZLocationConverter wgs84ToGcj02:centerCoordinate];
_GmapView.camera = [GMSCameraPosition cameraWithTarget:_coordinate2D zoom:15];
[self mapView:self.GmapView idleAtCameraPosition:_GmapView.camera];
}
} @catch (NSException *exception) {
} @finally {
}
}
- (void)onReGeocodeSearchDone:(AMapReGeocodeSearchRequest *)request response:(AMapReGeocodeSearchResponse *)response
{
if (response.regeocode != nil)
{
NSString *name = response.regeocode.formattedAddress;
//解析response获取地址描述,具体解析见 Demo
//获取市
// NSString *city = response.regeocode.addressComponent.city;
// NSString *province = response.regeocode.addressComponent.province;
// if(city && city.length>0){
// name = [name componentsSeparatedByString:city].lastObject;
// if([city isEqualToString:province]){
// //直辖市
// name = [NSString stringWithFormat:@"%@ %@",name,city];
// }else{
// //普通市
// name = [NSString stringWithFormat:@"%@ %@ %@",name,city,province];
// }
// }
//self.locationAddressLabel.text = name;
}
}
- (void)mapViewDidFinishTileRendering:(GMSMapView *)mapView
{
}
//地图移动后的代理方法,我这里的需求是地图移动需要刷新网络请求,
- (void)mapView:(GMSMapView*)mapView idleAtCameraPosition:(GMSCameraPosition*)position
{
// //点击一次先清除上一次的大头针
[self.marker.map clear];
self.marker.map = nil;
if (self.laloModel)
{
self.marker = [GMSMarker markerWithPosition:_coordinate2D];
self.marker.iconView = [self markView];
self.marker.map = self.GmapView;
[self getPlace:mapView.camera.target];
}
}
- (UIView *)markView
{
UIView *view = [UIView new];
view.frame = CGRectMake(0, 0, 41, 60);
UIImageView *bgImg = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"宝贝-无头像"]];
bgImg.contentMode = UIViewContentModeScaleAspectFit;
bgImg.frame = CGRectMake(0, 3, 41, 57);
[view addSubview:bgImg];
UIImageView *iconImg = [[UIImageView alloc] init];
NSString *imageName = @"设备默认头像";
if(APIManager.sharedManager.deviceModel.sex == 0)
2 years ago
{
//
imageName = @"icon_head_girl";
}
else
{
//
imageName = @"icon_head_boy";
}
[iconImg sd_setImageWithURL:[NSURL URLWithString:APIManager.sharedManager.deviceModel.image] placeholderImage:[UIImage imageNamed:imageName]];
iconImg.frame = CGRectMake(7, 15, 27, 27);
[view addSubview:iconImg];
return view;
}
-(void)getPlace:(CLLocationCoordinate2D)coordinate2D
{
[[GMSGeocoder geocoder] reverseGeocodeCoordinate:CLLocationCoordinate2DMake(coordinate2D.latitude, coordinate2D.longitude) completionHandler:^(GMSReverseGeocodeResponse * _Nullable response, NSError * _Nullable error) {
if(!error){
GMSAddress* addressObj = response.firstResult;
NSLog(@"coordinate.latitude=%f", addressObj.coordinate.latitude);
NSLog(@"coordinate.longitude=%f", addressObj.coordinate.longitude);
NSLog(@"thoroughfare=%@", addressObj.thoroughfare);
NSLog(@"locality=%@", addressObj.locality);
NSLog(@"subLocality=%@", addressObj.subLocality);
NSLog(@"administrativeArea=%@", addressObj.administrativeArea);
NSLog(@"postalCode=%@", addressObj.postalCode);
NSLog(@"country=%@", addressObj.country);
NSLog(@"lines=%@", addressObj.lines);
// NSString *name = addressObj.administrativeArea;
// //解析response获取地址描述,具体解析见 Demo
// //获取市
// NSString *city = addressObj.locality;
// NSString *province = addressObj.subLocality;
// NSString *lines = addressObj.lines.count > 0 ? addressObj.lines[0] : @"";
// if(city && city.length>0)
// {
// name = [name componentsSeparatedByString:city].lastObject;
// if([city isEqualToString:province]){
// //直辖市
// name = [NSString stringWithFormat:@"%@ %@",name,city];
// }else{
// //普通市
// name = [NSString stringWithFormat:@"%@ %@ %@ %@",name,city,province,lines];
// }
// }
// self.locationAddressLabel.text = addressObj.lines.count > 0 ? addressObj.lines[0] : @"";
}else{
NSLog(@"地理反编码错误");
}
}];
}
//选择了位置后的回调方法
- (void)viewController:(GMSAutocompleteViewController*)viewController didAutocompleteWithPlace:(GMSPlace*)place
{
//移动地图中心到选择的位置
_GmapView.camera = [GMSCameraPosition cameraWithTarget:place.coordinate zoom:15];
[viewController dismissViewControllerAnimated:YES completion:nil];
}
//失败回调
- (void)viewController:(GMSAutocompleteViewController *)viewController
didFailAutocompleteWithError:(NSError *)error
{
[viewController dismissViewControllerAnimated:YES completion:nil];
}
//取消回调
- (void)wasCancelled:(GMSAutocompleteViewController *)viewController
{
[viewController dismissViewControllerAnimated:YES completion:nil];
}
/*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect {
// Drawing code
}
*/
@end