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); }
当然,代理方法不单单只有这么一点,还有其他的一些奇奇怪怪,各式各样的,但是在这里的话,我们的需求也就是这么几个了,然后呢。基本上这几个方法就已经足够满足我们的一些需求了。
到这里的话呢,我们已经是可以拿到我们所需要目的地的经纬度了,这个时候呢,我们就可以进行进一步的操作了,我们可以进行路线规划,在地图上画出一条路线图来。这个时候呢,我找遍了谷歌的文档,发现只能通过谷歌提供的接口来进行路线的请求。具体怎么操作呢。我们下个文章再说。
相关文章推荐
- django学习之旅 - 基础命令讲解
- Sugon I840-G20安装windows系统
- 用Golang实现基于时间轮算法的定时器
- Mongo expireAfterSeconds 时间设置
- Dashgo D1蓝牙控制移动
- 如何更换Odoo 8的LOGO
- Django中文显示
- poj 1179 Polygon(化环为直+区间dp)
- jump Consistent hash:零内存消耗,均匀,快速,简洁,来自Google的一致性哈希算法
- where are you going ? 反序为:going you are where
- mac go sublime 3
- beego curd 操作遇到的坑
- 使用Google Volley及遇到的坑
- Golang 环境的安装
- django主键的使用
- Django session机制
- Algorithm: 移动盒子
- go text/templete模板
- 关于Goroutine的原理
- Django安装