zoukankan      html  css  js  c++  java
  • 搜索指定字符串地址

    - (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(@"没有搜索到匹配数据");

    }

    }];

    }

  • 相关阅读:
    LeetCode OJ String to Integer (atoi) 字符串转数字
    HDU 1005 Number Sequence(AC代码)
    HDU 1004 Let the Balloon Rise(AC代码)
    HDU 1003 Max Sum(AC代码)
    012 Integer to Roman 整数转换成罗马数字
    011 Container With Most Water 盛最多水的容器
    010 Regular Expression Matching 正则表达式匹配
    007 Reverse Integer 旋转整数
    006 ZigZag Conversion
    005 Longest Palindromic Substring 最长回文子串
  • 原文地址:https://www.cnblogs.com/yevgeni/p/5631793.html
Copyright © 2011-2022 走看看