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

}

}];

}

iOS 根据字符串来定位地址的更多相关文章

  1. IOS NS 字符串 数组 字典 文件 动态 静态 操作

    ios 常用字符串的操作   //将NSData转化为NSString        NSString* str = [[NSString alloc] initWithData:response e ...

  2. iOS 获取字符串中的单个字符

    要取到单个字符,就要知道字符串的编码方式,这样才能够定位每个字符在内存中的位置.但是,iOS的字符串编码是不固定的,因此,需要设置一个统一的编码格式,将所有其他格式的字符串都转化为统一的格式,然后就可 ...

  3. 【iOS】7.4 定位服务->2.1.3.1 定位 - 官方框架CoreLocation 功能1:地理定位

    本文并非最终版本,如果想要关注更新或更正的内容请关注文集,联系方式详见文末,如有疏忽和遗漏,欢迎指正. 本文相关目录: ================== 所属文集:[iOS]07 设备工具 === ...

  4. QT通过IP地址定位地址(用get方法取数据)

    通过IP地址定位地址,是要通过查询数据库,如果自己做一个这样的数据库工作量就比较大,所以在网上找了一个查询IP地址的网址,通过调用这个网址查询来实现,但是这个有一定的弊端,如果没有网络或者这个网址不可 ...

  5. iOS依据字符串计算UITextView高度

    iOS计算字符串高度,有须要的朋友能够參考下. 方法一:ios7.0之前适用 /** @method 获取指定宽度width,字体大小fontSize,字符串value的高度 @param value ...

  6. 【iOS】7.4 定位服务->2.1.3.2 定位 - 官方框架CoreLocation 功能2:地理编码和反地理编码

    本文并非最终版本,如果想要关注更新或更正的内容请关注文集,联系方式详见文末,如有疏忽和遗漏,欢迎指正. 本文相关目录: ================== 所属文集:[iOS]07 设备工具 === ...

  7. 【iOS】7.4 定位服务->3.1 地图框架MapKit 功能1:地图展示

    > 本文并非最终版本,如果想要关注更新或更正的内容请关注文集,联系方式详见文末,如有疏忽和遗漏,欢迎指正. --- > 本文相关目录: ================== 所属文集:[[ ...

  8. IOS免越狱虚拟定位修改工具共享 Jocation

    Jocation IOS虚拟定位修改器 具体使用方法可以按照 location cleaned软件相同的操作. 主要是因为本人有一部 IphoneX 和Iphone Xs Max 网上的locatio ...

  9. iOS开发--地图与定位

    概览 现在很多社交.电商.团购应用都引入了地图和定位功能,似乎地图功能不再是地图应用 和导航应用所特有的.的确,有了地图和定位功能确实让我们的生活更加丰富多彩,极大的改变了我们的生活方式.例如你到了一 ...

随机推荐

  1. Android屏幕适配建议

    一.关于布局适配 1.不要使用绝对布局 2.尽量使用match_parent 而不是fill_parent . 3.能够使用权重的地方尽量使用权重(android:layout_weight) 4.如 ...

  2. PDF出力相关资料

    http://itext.2136553.n4.nabble.com/iText-SetFieldProperty-method-not-working-for-some-parameters-set ...

  3. ZK框架的分析与应用

    前言:本文是在下的在学习ZK官方文档时整理出来的初稿.本来里面有很多的效果图片和图片代码的.奈何博客园中图片不能粘贴上去,所以感兴趣的筒子们就将就吧.内容中,如有不好的地方,欢迎斧正! ZK框架的分析 ...

  4. wireshark1.8捕获无线网卡的数据包——找不到无线网卡!

    问题说明:奇怪的是,我线网卡明明有的,是interl的型号,可是wireshark总是找不到,如下: 奇了怪了,没有!原来是如下的: 实际上这块无线网卡是存在的,只不过由于兼容或驱动的原因无法显示型号 ...

  5. js 倒计时(转)

    第一个(毫秒级): <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://w ...

  6. 光流算法:灰度恒常约束,LK算法,HS算法

    关于如何提高计算精度和增加搜索范围,见:http://www.cnblogs.com/dzyBK/p/4982420.html

  7. C#局域网聊天工具_UDP广播

    接上一讲,程序启动就要发送广播消息,如何发送广播消息,这一讲将给大家好好讲讲网络广播的知识,以及C#如何实现广播. 第一部分.什么是广播地址,以及广播地址怎么计算 1.1 广播地址是什么? 主机号全为 ...

  8. python中报错总结

    python标准异常 异常名称 描述     BaseException 所有异常的基类 SystemExit 解释器请求退出 KeyboardInterrupt 用户中断执行(通常是输入^C) Ex ...

  9. LeetCode 67. Add Binary

    Given two binary strings, return their sum (also a binary string). For example,a = "11"b = ...

  10. (easy)LeetCode 237.Delete Node in a Linked List

    Write a function to delete a node (except the tail) in a singly linked list, given only access to th ...