代码如下:

//
//  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];      }

@end

iOS 利用CoreLocation和MapKit开发搜索附近的商场功能的更多相关文章

  1. (IOS)CoreLocation 和 MapKit 的应用

    CoreLocation是控制GPS硬件获取地理坐标信息的系统类库,而MapKit是系统地图的工具包,将两者结合使用可以实现不同的地图功能. 1.CoreLocation 在CoreLocation中 ...

  2. 【高德API】如何利用MapKit开发全英文检索的iOS地图

    原文:[高德API]如何利用MapKit开发全英文检索的iOS地图 制作全英文地图的展示并不困难,但是要制作全英文的数据检索列表,全英文的信息窗口,你就没办法了吧.告诉你,我有妙招!使用iOS自带的M ...

  3. [iOS 利用MapKit和CoreLocation框架打造精简的定位和导航]

    运行效果:            一.利用<CoreLocation/CoreLocation.h>定位 创建变量 CLLocationManager *locationManager , ...

  4. 利用WordPress REST API 开发微信小程序从入门到放弃

    自从我发布并开源WordPress版微信小程序以来,很多WordPress网站的站长问有关程序开发的问题,其实在文章:<用微信小程序连接WordPress网站>讲述过一些基本的要点,不过仍 ...

  5. 《iOS开发全然上手——使用iOS 7和Xcode 5开发移动与平板应用》之Objective-C新手训练营

    编写Hello World应用程序通常被觉得,是学习不论什么编程语言的第一步.在这一章,你将创建iOS版的Hello World应用程序作为起步,高速了解Xcode这个开发iOS应用程序的主要工具. ...

  6. 转载:如何利用Vim进行Erlang开发

    转自:http://ovalpo.info/how_to_use_vim_for_erlang_dev/ 如何利用Vim进行Erlang开发 by Martin J. Logan on Septemb ...

  7. Xamarin.iOS - 利用Settings插件与EAIntroView制作App的欢迎界面

    Xamarin.iOS - 利用Settings插件与EAIntroView制作App的欢迎界面 关于欢迎界面 很多App第一次启动都会有一个欢迎界面,欢迎界面往往决定这用户对App的第一映像,所以欢 ...

  8. iOS学习笔记-地图MapKit入门

    代码地址如下:http://www.demodashi.com/demo/11682.html 这篇文章还是翻译自raywenderlich,用Objective-C改写了代码.没有逐字翻译,如有错漏 ...

  9. C#设计模式总结 C#设计模式(22)——访问者模式(Vistor Pattern) C#设计模式总结 .NET Core launch.json 简介 利用Bootstrap Paginator插件和knockout.js完成分页功能 图片在线裁剪和图片上传总结 循序渐进学.Net Core Web Api开发系列【2】:利用Swagger调试WebApi

    C#设计模式总结 一. 设计原则 使用设计模式的根本原因是适应变化,提高代码复用率,使软件更具有可维护性和可扩展性.并且,在进行设计的时候,也需要遵循以下几个原则:单一职责原则.开放封闭原则.里氏代替 ...

随机推荐

  1. Gamma Gamma~!!!

    左图是没有进行gamma矫正的,右图是进行了gamma矫正的.以前一直以为是Tone Map的公式计算有问题,后来看PBR的paper时候,终于明白了gamma的重要性,一改,果然发现颜色不想以前那么 ...

  2. php分享三十三:常量

    一:常量定义 1:在脚本执行期间该值不能改变(除了所谓的魔术常量,它们其实不是常量) 2:常量默认为大小写敏感 3:命名规则:用正则表达式是这样表达的:[a-zA-Z_\x7f-\xff][a-zA- ...

  3. 基于tiny4412的Linux内核移植 --- aliases节点解析

    作者信息 作者: 彭东林 邮箱:pengdonglin137@163.com QQ:405728433 平台简介 开发板:tiny4412ADK + S700 + 4GB Flash 要移植的内核版本 ...

  4. Hadoop第4周练习—HDFS读写文件操作

    1    运行环境说明... 3 :编译并运行<权威指南>中的例3.2. 3 内容... 3 2.3.1   创建代码目录... 4 2.3.2   建立例子文件上传到hdfs中... 4 ...

  5. [C] static和extern的作用

    static: 当用于函数定义或者代码块之外的变量声明时,static关键字用于修改标识符的链接属性,从external改为internal. 当用于代码块内部的变量声明时,static关键字用于修改 ...

  6. sql server 随机读取数据

    --sql server 随机读取数据 * FROM [tablename] ORDER BY NEWID() pk from [tablename] ORDER BY NEWID()) --这两个方 ...

  7. C#ASP.NET 通用扩展函数之 IsWhat 简单好用

    好东西都需要人去整理.分类 注意:需要引用命名空间 SyntacticSugar 用法: /***扩展函数名细***/ //[IsInRange] int num = 100; //以前写法 if ( ...

  8. mysql 线上not in查询中的一个坑

    今天早上开发又过来说,怎么有个语句一直没有查询出结果,数据是有的呀,并发来了如下的sql(为了方法说明,表名及查询均做了修改): select * from t2 where t2.course no ...

  9. [C#] CSharp 基本语法

    CSharp Language Specification 一.基础 1.规范: 除常量外,所有变量用驼峰命名方式,其它用帕斯卡命名方式. 2.编译: 首先由csc.exe将cs文件编译成MSIL.当 ...

  10. 计算html标签textarea字符长度

    今天学习jQuery,做练习计算html标签textarea字符长度,先添加一个视图操作(Action): 创建一个视图,并按下面顺序标记1,2,3进行写html或javascript脚本: 其中标记 ...