地图定位新版

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.geocoder = [[CLGeocoder alloc]init];
    // 设置地图可缩放
    self.mapView.zoomEnabled = YES;
    // 设置地图可滚动
    self.mapView.scrollEnabled = YES;
    // 设置地图不可旋转
    self.mapView.rotateEnabled = NO;
    // 设置显示用户当前位置
    self.mapView.showsUserLocation = YES;
    // 设置地图的类型
    self.mapView.mapType = MKMapTypeStandard;
    // 为了方便测试,直接设置搜索框的文本内容
    self.searchBar.text =@"北京动物园";
    self.searchBar.delegate = self;
}
// 当用户单击虚拟键盘上的“搜索”按钮时激发该方法
- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar
{
    // 调用searchBar方法进行搜索
    [self doSearch:searchBar];
}
// 当用户单击“取消”按钮时激发该方法
// 由于我们重定义了该控件的外观——将取消按钮的文本改成了“搜索”,因此单击取消按钮也执行搜索
- (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar
{
    // 调用searchBar方法进行搜索
    [self doSearch:searchBar];
}
// 执行搜索的方法
- (void)doSearch:(UISearchBar *)searchBar
{
    // 关闭searchBar关联的虚拟键盘
    [self.searchBar resignFirstResponder];
    NSString* searchText = self.searchBar.text;
    if(searchText != nil && searchText.length > 0)
    {
        [self locateAt:searchText];
    }
}
// 当用户在搜索框内输入文本时激发该方法
- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar
{
    // 显示取消按钮
    searchBar.showsCancelButton = YES;
    // 通过遍历找到该搜索框内的取消按钮,并将取消按钮的文本设为“搜索”
    for (id cc in [searchBar.subviews[0] subviews])
    {
        if ([cc isKindOfClass:[UIButton class]])
        {
            UIButton *button = (UIButton *)cc;
            [button setTitle:@"搜索" forState:UIControlStateNormal];
        }
    }
}
// 将字符串地址转换为经度、纬度信息,并执行定位
-(void)locateAt:(NSString*)address
{
    [self.geocoder geocodeAddressString:address completionHandler:
         ^(NSArray *placemarks, NSError *error)
        {
            if ([placemarks count] > 0 && error == nil)
            {
                NSLog(@"搜索到匹配%lu条地址数据.", (unsigned long)placemarks.count);
                // 处理第一个地址
                CLPlacemark * placemark = [placemarks objectAtIndex:0];
                NSLog(@"经度 = :%f", placemark.location.coordinate.longitude);
                NSLog(@"纬度 = :%f", placemark.location.coordinate.latitude);
                NSLog(@"国家 = %@", placemark.country);
                NSLog(@"邮编 = %@", placemark.postalCode);
                NSLog(@"位置 = %@", placemark.locality);
                // 设置地图显示的范围
                MKCoordinateSpan span;
                // 地图显示范围越小,细节越清楚
                span.latitudeDelta = 0.01;
                span.longitudeDelta = 0.01;
                MKCoordinateRegion region = {placemark.location.coordinate,span};
                // 设置地图中心位置为搜索到的位置
                [self.mapView setRegion:region];  // ①
                // 创建一个MKPointAnnotation,该对象将作为地图锚点
                MKPointAnnotation *point = [[MKPointAnnotation alloc]init];
                // 设置地图锚点的坐标
                point.coordinate = placemark.location.coordinate;
                // 设置地图锚点的标题
                point.title = placemark.name;
                // 设置地图锚点的副标题
                point.subtitle = [NSString stringWithFormat:@"%@-%@-%@-%@",
                    placemark.country , placemark.administrativeArea,
                    placemark.locality , placemark.subLocality];
                // 将地图锚点添加到地图上
                [self.mapView addAnnotation:point];
                // 选中指定锚点
                [self.mapView selectAnnotation:point animated:YES];
            }
            else
            {
                NSLog(@"没有搜索到匹配数据");
            }
        }];
}

转载于:https://my.oschina.net/suyongchen/blog/652605

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值