iOS 利用CoreLocation和MapKit开发搜索附近的商场功能
代码如下:
// SearchNearbyShopViewController.m
// SearchNearbyShop
//
// Created by Linzhixiao on 16/2/14.
// Copyright © 2016年 B5m. All rights reserved.
//
#import "SearchNearbyShopViewController.h"
#import <CoreLocation/CoreLocation.h>
#import <MapKit/MapKit.h>
#define KSearchAreaMeters 100
@interface SearchNearbyShopViewController () <CLLocationManagerDelegate,MKMapViewDelegate>
{
MKCoordinateRegion currentRegion;
}
@property (nonatomic, strong) CLLocationManager *locationManager;
@property (nonatomic, strong) MKMapView *mapView;
@property (nonatomic, strong) CLGeocoder *geocoder;
@property (nonatomic,strong) NSMutableArray *nearbyInfoArray;
@end
@implementation SearchNearbyShopViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.title = @"搜索附近商场";
self.view.backgroundColor = [UIColor whiteColor];
[self configNavigation];
[self locationManager];
[self requestLocationAutoorize];
[self GetCurrentLocation];
[self geocoder];
[self.view addSubview:self.mapView];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
#pragma mark - Custom Accessors
- (CLLocationManager *)locationManager {
if (!_locationManager) {
_locationManager = [[CLLocationManager alloc] init];
_locationManager.delegate = self;
}
return _locationManager;
}
- (MKMapView *)mapView {
if (!_mapView) {
_mapView = [[MKMapView alloc] initWithFrame:self.view.bounds];
_mapView.mapType = MKMapTypeStandard;
_mapView.userTrackingMode = MKUserTrackingModeFollow;
_mapView.delegate = self;
}
return _mapView;
}
- (CLGeocoder *)geocoder {
if (!_geocoder) {
_geocoder = [[CLGeocoder alloc] init]; } return _geocoder;}#pragma mark - Private- (void)configNavigation { UIButton *topSearchButton = [UIButton buttonWithType:UIButtonTypeSystem]; topSearchButton.frame = CGRectMake(0, 0, 50, 50); [topSearchButton setTitle:@"搜索" forState:UIControlStateNormal]; [topSearchButton addTarget:self action:@selector(searchNearbyShopAction:) forControlEvents:UIControlEventTouchUpInside]; UIBarButtonItem *rightButtonItem = [[UIBarButtonItem alloc] initWithCustomView:topSearchButton]; self.navigationItem.rightBarButtonItem = rightButtonItem;}- (void)requestLocationAutoorize { CGFloat systemVersion = [[UIDevice currentDevice].systemVersion floatValue]; if (systemVersion >= 8) { [_locationManager requestAlwaysAuthorization]; }}- (void)GetCurrentLocation { if ([CLLocationManager locationServicesEnabled]) { NSLog(@"定位服务已开启"); [_locationManager startUpdatingLocation]; self.locationManager.distanceFilter = kCLDistanceFilterNone; }else { NSLog(@"定位功能不能开启"); } }- (void)searchNearbyShopWithRegion: (MKCoordinateRegion )region { // 获得附近的信息 self.nearbyInfoArray = [NSMutableArray array]; MKLocalSearchRequest *request = [[MKLocalSearchRequest alloc] init]; request.region = region; request.naturalLanguageQuery = @"school"; MKLocalSearch *localSearch = [[MKLocalSearch alloc] initWithRequest:request]; [localSearch startWithCompletionHandler:^(MKLocalSearchResponse * _Nullable response, NSError * _Nullable error) { if (!error) { [self.nearbyInfoArray addObjectsFromArray:response.mapItems]; for (MKMapItem *item in _nearbyInfoArray) { NSLog(@"name = %@, ",item.name); } }else { NSLog(@"搜索错误, %@",error); } }];}#pragma mark - IBActions- (void)searchNearbyShopAction: (UIButton *)searchButton { NSLog(@"重新搜索附近商场"); if (currentRegion.span.latitudeDelta == 0.0) { return; }else { [self searchNearbyShopWithRegion:currentRegion]; }}#pragma mark - CLLocationManagerDelegate//- (void)locationManager:(CLLocationManager *)manager// didUpdateLocations:(NSArray<CLLocation *> *)locations {// CLLocation *location = [locations firstObject];// NSLog(@"纬度=%f, 精度=%f",location.coordinate.latitude,location.coordinate.longitude);//}#pragma mark - MKMapViewDelegate- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation { [self.geocoder reverseGeocodeLocation:userLocation.location completionHandler:^(NSArray<CLPlacemark *> * _Nullable placemarks, NSError * _Nullable error) { CLPlacemark *placeMark = [placemarks firstObject]; NSLog(@"获取地理位置成功 name = %@, locality = %@",placeMark.name,placeMark.locality); userLocation.title = placeMark.name; userLocation.subtitle = placeMark.locality; }]; // 当前位置显示到地图 CLLocationCoordinate2D center = userLocation.location.coordinate; MKCoordinateSpan span = MKCoordinateSpanMake(0.009310, 0.007812); MKCoordinateRegion region = MKCoordinateRegionMake(center, span); MKCoordinateRegion searchRegion = MKCoordinateRegionMakeWithDistance(userLocation.coordinate, KSearchAreaMeters,KSearchAreaMeters); currentRegion = searchRegion; [self.mapView setRegion:region animated:YES]; }
iOS 利用CoreLocation和MapKit开发搜索附近的商场功能的更多相关文章
- (IOS)CoreLocation 和 MapKit 的应用
CoreLocation是控制GPS硬件获取地理坐标信息的系统类库,而MapKit是系统地图的工具包,将两者结合使用可以实现不同的地图功能. 1.CoreLocation 在CoreLocation中 ...
- 【高德API】如何利用MapKit开发全英文检索的iOS地图
原文:[高德API]如何利用MapKit开发全英文检索的iOS地图 制作全英文地图的展示并不困难,但是要制作全英文的数据检索列表,全英文的信息窗口,你就没办法了吧.告诉你,我有妙招!使用iOS自带的M ...
- [iOS 利用MapKit和CoreLocation框架打造精简的定位和导航]
运行效果: 一.利用<CoreLocation/CoreLocation.h>定位 创建变量 CLLocationManager *locationManager , ...
- 利用WordPress REST API 开发微信小程序从入门到放弃
自从我发布并开源WordPress版微信小程序以来,很多WordPress网站的站长问有关程序开发的问题,其实在文章:<用微信小程序连接WordPress网站>讲述过一些基本的要点,不过仍 ...
- 《iOS开发全然上手——使用iOS 7和Xcode 5开发移动与平板应用》之Objective-C新手训练营
编写Hello World应用程序通常被觉得,是学习不论什么编程语言的第一步.在这一章,你将创建iOS版的Hello World应用程序作为起步,高速了解Xcode这个开发iOS应用程序的主要工具. ...
- 转载:如何利用Vim进行Erlang开发
转自:http://ovalpo.info/how_to_use_vim_for_erlang_dev/ 如何利用Vim进行Erlang开发 by Martin J. Logan on Septemb ...
- Xamarin.iOS - 利用Settings插件与EAIntroView制作App的欢迎界面
Xamarin.iOS - 利用Settings插件与EAIntroView制作App的欢迎界面 关于欢迎界面 很多App第一次启动都会有一个欢迎界面,欢迎界面往往决定这用户对App的第一映像,所以欢 ...
- iOS学习笔记-地图MapKit入门
代码地址如下:http://www.demodashi.com/demo/11682.html 这篇文章还是翻译自raywenderlich,用Objective-C改写了代码.没有逐字翻译,如有错漏 ...
- C#设计模式总结 C#设计模式(22)——访问者模式(Vistor Pattern) C#设计模式总结 .NET Core launch.json 简介 利用Bootstrap Paginator插件和knockout.js完成分页功能 图片在线裁剪和图片上传总结 循序渐进学.Net Core Web Api开发系列【2】:利用Swagger调试WebApi
C#设计模式总结 一. 设计原则 使用设计模式的根本原因是适应变化,提高代码复用率,使软件更具有可维护性和可扩展性.并且,在进行设计的时候,也需要遵循以下几个原则:单一职责原则.开放封闭原则.里氏代替 ...
随机推荐
- Asp.net Mvc4 使用Cas单点登录
因项目需要,使用了耶鲁大学的Cas单点登录方案,在java中使用一直正常,但是在.Net中碰到了循环重定向的问题,反复测试后,总算解决了,最终的配置如下: <?xml version=" ...
- 快乐的JS正则表达式(一)
上一篇介绍了为什么需要正则,那从这一篇开始我们就去学习如何使用正则. 在js中有两种方式创建正则表达式: var reg = new RegExp("表达式","可选规则 ...
- web.config中httpRunTime的属性
配置httpRuntime也可以让FileUpload上传更大的文件,不过设置太大了会因用户将大量文件传递到该服务器而导致的拒绝服务攻击(属性有说明) <httpRuntime> < ...
- EB-SAM9G45裸机程序下载方法
开发板:EB-SAM9G45 这里提供一种裸程序下载的方法. 在官方提供的下载方法中有手动下载和自动下载,它们都离不开SAM-BA软件,而该软件使用比较麻烦,而且操作不当很容易导致电脑蓝屏,还有一个很 ...
- ASP.NET 图片上传工具类 upload image简单好用功能齐全
使用方法: UploadImage ui = new UploadImage(); /***可选参数***/ ui.SetWordWater = "哈哈";//文字水印 // ui ...
- sqlite3存储格式
本篇介绍sqlite3数据库文件的存储格式.通过阅读源读源代码可以知道sqlite的设计思想.一个sqlite数据库文件对应着一个数据库.sqlite将数据库文件划分大小一致的存储(以区分内存)页面, ...
- Sprint回顾-0525
1.回顾组织 主题:“我们下次怎么样才能更加认真对待?” 时间:设定为1小时. 参与者:整个团队. 场所:宿舍走廊. 秘书:团队队长秘书,筹备.记录.整理. 2.回顾流程 Sprint总结: ...
- 轻松解决MYSQL数据库连接过多的错误
1.数据库系统允许的最大可连接数max_connections.这个参数是可以设置的.如果不设置,默认是100.最大是16384. 2.数据库当前的连接线程数threads_connected.这是动 ...
- Windows 64位操作系统和32位操作系统在注册表上的有一点不一样
Windows 64位操作系统为提供对32位应用程序的兼容,在“C:\Windows\SysWOW64”目录下保留了很多32位的工具(如CMD.exe是32位的).在Windows 64位操作系统上跑 ...
- SVN 忽略文件但不删除文件
SVN忽略一些不必要的文件但不删除 如果svn仓库中有一些不希望被别人提交的文件 该如何忽略掉对这个文件的更改但又不删除这个文件呢? 在找了一堆解决方案后得出了如下结论 去除要被忽略文件的版本控制 基 ...