您的位置:首页 > 编程语言 > Go语言

GoogleMaps踏坑之旅(三)

2016-06-12 17:56 363 查看

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);
}


当然,代理方法不单单只有这么一点,还有其他的一些奇奇怪怪,各式各样的,但是在这里的话,我们的需求也就是这么几个了,然后呢。基本上这几个方法就已经足够满足我们的一些需求了。

到这里的话呢,我们已经是可以拿到我们所需要目的地的经纬度了,这个时候呢,我们就可以进行进一步的操作了,我们可以进行路线规划,在地图上画出一条路线图来。这个时候呢,我找遍了谷歌的文档,发现只能通过谷歌提供的接口来进行路线的请求。具体怎么操作呢。我们下个文章再说。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: