GoogleMaps踏坑之旅(三)

GoogleMaps踏坑之旅(一)

GoogleMaps踏坑之旅(二)

GoogleMaps踏坑之旅(三)

大家端午节过得如何?有没有看魔兽大电影啊?有没有吃粽子呢?又是喜欢甜粽子还是咸粽子呢?这我都不知道啊,比较端午三天假期,我都是在躺尸,所以我都不知道哈哈。好了,回归正题,前两节我们开始在GoogleMaps里踏坑,然后基础的呢,我们都已经实现了。然后现在准备来踏深一点咯。
上回说到我们实现了定位,已经大头针的显示啊什么的。然后现在呢,我们来进行一个非常好玩的东西——选点。相信大家做过或者用过导航的都知道,如果我们要导航的话,肯定要有个终点的,然后才能有路线的规划什么的,从而才能导航。当然啦,选点的话,也有两个方法,第一个呢,就是我们直接在地图上拖拉拽,选点;当然这样的选点的话,在小范围内的话,不是很麻烦,范围要是大一点的话呢,可能就要多缩放或者拖拉几次了。第二个呢,就是我们直接输入地点,然后直接搜索出来,这个的话,相对简单一点,那我们就先从这个开始吧。接下来就是代码片段。


- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.

//首先,我们先定义一个按钮,实现点击按钮之后,跳到搜索地点的界面
    UIButton *btnEnd = [[UIButton alloc] initWithFrame:CGRectMake(12, 90, 60, 30)];
    [btnEnd setTitle:@"选择终点" forState:0];
    btnEnd.backgroundColor = [UIColor blueColor];
    [btnEnd addTarget:self action:@selector(btnEndAction:) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:btnEnd];
}

//注意看,重点来了
- (void)btnEndAction:(UIButton *)sender {

    //事实上,也就只要这么几句代码就可以了,然后我们来实现它的代理
    GMSAutocompleteViewController *acController = [[GMSAutocompleteViewController alloc] init];
    acController.delegate = self;
    [self presentViewController:acController animated:YES completion:nil];

}

//代理
- (void)viewController:(GMSAutocompleteViewController *)viewController
didAutocompleteWithPlace:(GMSPlace *)place {
    // Do something with the selected place.

    //这个地方呢,我们就可以拿到你选择哪个点的一些信息了,这个时候你就可以进行路线规划什么的了。
    NSLog(@"SearchPalce ===== %@",place);
    NSLog(@"Place name %@", place.name);
    NSLog(@"Place address %@", place.formattedAddress);
    NSLog(@"Place latitude %f", place.coordinate.latitude);
    NSLog(@"Place longitude %f", place.coordinate.longitude);

    //移动镜头
    [mapView animateToLocation:place.coordinate];

    //这是大头针,上次好像忘了说,如果你想用自己的大头针的话,很容易的
    GMSMarker *marker = [[GMSMarker alloc] init];
    marker.position = place.coordinate;
    marker.title = place.name;
    //这样就可以将大头针的样式换成你想要的图片了
    marker.icon = [UIImage imageNamed:@"bigLoc"];
    marker.snippet = place.formattedAddress;
    marker.map = mapView;
    [self dismissViewControllerAnimated:YES completion:nil];
}

到这个时候呢,我们的第二步,跳到地图选点就可以完成了。大家可以试一下,我这里就不传图了(其实我不会传GIF图,哈哈)。
然后接下来我们就要说一下第一点,直接在地图上进行拖拉选点了。
拖拉选点其实很简单,无非也就是实现地图的代理就可以了,所以呢,我们还是继续贴代码

-(void)viewDidLoad{
    [super viewDidLoad];

    //判断是否授权
    if ([CLLocationManager locationServicesEnabled]) {
        //开始定位用户的位置
        [self.myLocation startUpdatingLocation];
        self.myLocation.distanceFilter = kCLDistanceFilterNone;
        self.myLocation.desiredAccuracy = kCLLocationAccuracyBest;
    }

    //13.758422,100.507333 //这个经纬度是曼谷的,原因就不解释了
    //开启地图相机
    camera = [GMSCameraPosition cameraWithLatitude:13.758422
                                         longitude:100.507333
                                              zoom:13];

    //开启地图
    _mapView = [GMSMapView mapWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height) camera:camera];
    //出现我的位置
    //    mapView.settings.myLocationButton = YES;
    //是否显示我的位置,蓝色的小圆圈
    //    _mapView.myLocationEnabled = YES;
    _mapView.delegate = self;
    [self.myMapView addSubview: _mapView];
}

//地图代理
- (void)mapView:(GMSMapView *)mapView willMove:(BOOL)gesture{
    NSLog(@"gesture === %@",[NSNumber numberWithBool:gesture]);
}

//这个代理方法主要作用就是当你移动镜头也就是拖动地推的时候,就会调用这个方法
- (void)mapView:(GMSMapView *)mapView didChangeCameraPosition:(GMSCameraPosition *)position{
    NSLog(@"didChangeCameraPosition ==== %@",position);
}

//这个代理方法你就可以拿到屏幕中心点的位置的经纬度了,这是一个很简单的方法。当然,这个方法是有缺陷的,就是我们只能拿到经纬度,却拿不到经纬度所对应的地址之类的一些信息。
- (void)mapView:(GMSMapView *)mapView idleAtCameraPosition:(GMSCameraPosition *)position{

    NSLog(@"idleAtCameraPosition ==== %@",position);
    NSLog(@"target ==== %f,%f",position.target.latitude,position.target.longitude);

    //这个方法是清理掉地图上所有的东西,包括什么大头针之类的,这里的目的是为了使地图上只有一个大头针  
    [_mapView clear];
    marker = [[GMSMarker alloc] init];
    marker.position = CLLocationCoordinate2DMake(position.target.latitude, position.target.longitude);
   marker.icon = [UIImage imageNamed:@"bigLoc"];
   marker.map = _mapView;
}

//这个三个代理方法要怎么解释我就真不知道了,大家伙可以试试
- (void)mapViewDidStartTileRendering:(GMSMapView *)mapView{
    NSLog(@"mapViewDidStartTileRendering ==== %@",mapView);
}
- (void)mapViewDidFinishTileRendering:(GMSMapView *)mapView{
    NSLog(@"mapViewDidFinishTileRendering ==== %@",mapView);
}
- (void)mapViewSnapshotReady:(GMSMapView *)mapView{
    NSLog(@"mapViewSnapshotReady ==== %@",mapView);
}

//这个代理方法的主要作用就是,当你点击地图上的某一点时,你可以得到它的经纬度,但是呢,具体的地址还是得不到的
- (void)mapView:(GMSMapView *)mapView didTapAtCoordinate:(CLLocationCoordinate2D)coordinate{
    NSLog(@"didTapAtCoordinate ==== %f,%f",coordinate.latitude,coordinate.longitude);
}

当然,代理方法不单单只有这么一点,还有其他的一些奇奇怪怪,各式各样的,但是在这里的话,我们的需求也就是这么几个了,然后呢。基本上这几个方法就已经足够满足我们的一些需求了。
到这里的话呢,我们已经是可以拿到我们所需要目的地的经纬度了,这个时候呢,我们就可以进行进一步的操作了,我们可以进行路线规划,在地图上画出一条路线图来。这个时候呢,我找遍了谷歌的文档,发现只能通过谷歌提供的接口来进行路线的请求。具体怎么操作呢。我们下个文章再说。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值