@interface GroupReportViewController () <BMKMapViewDelegate,BMKLocationServiceDelegate,BMKGeoCodeSearchDelegate,UITableViewDataSource,UITableViewDelegate>

{

BOOL isFirstLocation;

}

@property(nonatomic,strong)BMKMapView* mapView;

@property(nonatomic,strong)BMKLocationService* locService;

@property(nonatomic,strong)BMKGeoCodeSearch* geocodesearch;

@property(nonatomic,strong)UITableView *tableView;

@property(nonatomic,strong)NSMutableArray *dataSource;

@property(nonatomic,assign)CLLocationCoordinate2D currentCoordinate;

@property(nonatomic,assign)NSInteger currentSelectLocationIndex;

@property(nonatomic,strong)UIImageView *centerCallOutImageView;

@property(nonatomic,strong)UIButton *currentLocationBtn;

@end

@implementation GroupReportViewController

- (void)viewDidLoad

{

[super viewDidLoad];

[self.view setBackgroundColor:[UIColor whiteColor]];

[self setTitle:@"定位demo"];

[self configUI];

[self startLocation];

}

-(void)configUI

{

self.mapView = [[BMKMapView alloc]initWithFrame:CGRectMake(0, 0, kSCREENWIDTH, 300)];

self.mapView.delegate = self;

[self.view addSubview:self.mapView];

self.centerCallOutImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 30, 30)];

self.centerCallOutImageView.center = self.mapView.center;

self.centerCallOutImageView.backgroundColor = [UIColor redColor];

[self.view addSubview:self.centerCallOutImageView];

[self.view bringSubviewToFront:self.centerCallOutImageView];

[self.mapView layoutIfNeeded];

self.tableView = [[UITableView alloc]initWithFrame:CGRectMake(0, 300, kSCREENWIDTH, 200)];

self.tableView.delegate = self;

self.tableView.dataSource = self;

[self.view addSubview:self.tableView];

[self.tableView registerClass:[LocationCell class] forCellReuseIdentifier:@"LocationCell"];

self.currentLocationBtn =[UIButton buttonWithType:UIButtonTypeCustom];

[self.currentLocationBtn setImage:[UIImage imageNamed:@"location_back_icon"] forState:UIControlStateNormal];

[self.currentLocationBtn setImage:[UIImage imageNamed:@"location_blue_icon"] forState:UIControlStateSelected];

[self.currentLocationBtn addTarget:self action:@selector(startLocation) forControlEvents:UIControlEventTouchUpInside];

[self.view addSubview:self.currentLocationBtn];

[self.view bringSubviewToFront:self.currentLocationBtn];

}

-(void)startLocation

{

isFirstLocation=YES;//首次定位

self.currentSelectLocationIndex=0;

self.currentLocationBtn.selected=YES;

[self.locService startUserLocationService];

self.mapView.showsUserLocation = NO;//先关闭显示的定位图层

self.mapView.userTrackingMode = BMKUserTrackingModeFollow;//设置定位的状态

self.mapView.showsUserLocation = YES;//显示定位图层

}

-(void)startGeocodesearchWithCoordinate:(CLLocationCoordinate2D)coordinate

{

BMKReverseGeoCodeOption *reverseGeocodeSearchOption = [[BMKReverseGeoCodeOption alloc]init];

reverseGeocodeSearchOption.reverseGeoPoint = coordinate;

BOOL flag = [_geocodesearch reverseGeoCode:reverseGeocodeSearchOption];

if(flag)

{

NSLog(@"反geo检索发送成功");

}

else

{

NSLog(@"反geo检索发送失败");

}

}

-(void)setCurrentCoordinate:(CLLocationCoordinate2D)currentCoordinate

{

_currentCoordinate=currentCoordinate;

[self startGeocodesearchWithCoordinate:currentCoordinate];

}

-(void)viewWillAppear:(BOOL)animated

{

[self.mapView viewWillAppear];

self.mapView.delegate = self; // 此处记得不用的时候需要置nil,否则影响内存的释放

self.locService.delegate = self;

self.geocodesearch.delegate = self;

}

-(void)viewWillDisappear:(BOOL)animated

{

[self.mapView viewWillDisappear];

self.mapView.delegate = nil; // 不用时,置nil

self.locService.delegate = nil;

self.geocodesearch.delegate = nil;

}

- (void)didReceiveMemoryWarning

{

[super didReceiveMemoryWarning];

// Dispose of any resources that can be recreated.

}

- (void)dealloc

{

if (_mapView)

{

_mapView = nil;

}

if (_geocodesearch)

{

_geocodesearch = nil;

}

if (_locService)

{

_locService=nil;

}

}

#pragma mark - BMKMapViewDelegate

/**

*在地图View将要启动定位时,会调用此函数

*@param mapView 地图View

*/

- (void)willStartLocatingUser

{

NSLog(@"start locate");

}

/**

*用户方向更新后,会调用此函数

*@param userLocation 新的用户位置

*/

- (void)didUpdateUserHeading:(BMKUserLocation *)userLocation

{

[self.mapView updateLocationData:userLocation];

//    NSLog(@"heading is %@",userLocation.heading);

}

/**

*用户位置更新后,会调用此函数

*@param userLocation 新的用户位置

*/

- (void)didUpdateBMKUserLocation:(BMKUserLocation *)userLocation

{

isFirstLocation=NO;

self.currentLocationBtn.selected=NO;

[self.mapView  updateLocationData:userLocation];

self.currentCoordinate=userLocation.location.coordinate;

if (self.currentCoordinate.latitude!=0)

{

[self.locService stopUserLocationService];

}

}

/**

*在地图View停止定位后,会调用此函数

*@param mapView 地图View

*/

- (void)didStopLocatingUser

{

NSLog(@"stop locate");

}

/**

*定位失败后,会调用此函数

*@param mapView 地图View

*@param error 错误号,参考CLError.h中定义的错误号

*/

- (void)didFailToLocateUserWithError:(NSError *)error

{

NSLog(@"location error");

}

- (void)mapView:(BMKMapView *)mapView onClickedMapBlank:(CLLocationCoordinate2D)coordinate

{

NSLog(@"map view: click blank");

}

- (void)mapView:(BMKMapView *)mapView regionDidChangeAnimated:(BOOL)animated

{

if (!isFirstLocation)

{

CLLocationCoordinate2D tt =[mapView convertPoint:self.centerCallOutImageView.center toCoordinateFromView:self.centerCallOutImageView];

self.currentCoordinate=tt;

}

}

#pragma mark - BMKGeoCodeSearchDelegate

/**

*返回地址信息搜索结果

*@param searcher 搜索对象

*@param result 搜索结BMKGeoCodeSearch果

*@param error 错误号,@see BMKSearchErrorCode

*/

- (void)onGetGeoCodeResult:(BMKGeoCodeSearch *)searcher result:(BMKGeoCodeResult *)result errorCode:(BMKSearchErrorCode)error

{

NSLog(@"返回地址信息搜索结果,失败-------------");

}

/**

*返回反地理编码搜索结果

*@param searcher 搜索对象

*@param result 搜索结果

*@param error 错误号,@see BMKSearchErrorCode

*/

- (void)onGetReverseGeoCodeResult:(BMKGeoCodeSearch *)searcher result:(BMKReverseGeoCodeResult *)result errorCode:(BMKSearchErrorCode)error

{

if (error == BMK_SEARCH_NO_ERROR)

{

[self.dataSource removeAllObjects];

[self.dataSource addObjectsFromArray:result.poiList];

if (isFirstLocation)

{

//把当前定位信息自定义组装 放进数组首位

BMKPoiInfo *first =[[BMKPoiInfo alloc]init];

first.address=result.address;

first.name=@"[当前位置]";

first.pt=result.location;

first.city=result.addressDetail.city;

[self.dataSource insertObject:first atIndex:0];

}

[self.tableView reloadData];

}

}

#pragma mark - TableViewDelegate

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

{

return self.dataSource.count;

}

-(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

{

LocationCell*cell =[tableView dequeueReusableCellWithIdentifier:@"LocationCell" ];

BMKPoiInfo *model=[self.dataSource objectAtIndex:indexPath.row];

cell.textLabel.text=model.name;

cell.detailTextLabel.text=model.address;

cell.detailTextLabel.textColor=[UIColor grayColor];

if (self.currentSelectLocationIndex==indexPath.row)

cell.accessoryType=UITableViewCellAccessoryCheckmark;

else

cell.accessoryType=UITableViewCellAccessoryNone;

return cell;

}

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

{

BMKPoiInfo *model=[self.dataSource objectAtIndex:indexPath.row];

BMKMapStatus *mapStatus =[self.mapView getMapStatus];

mapStatus.targetGeoPt=model.pt;

[self.mapView setMapStatus:mapStatus withAnimation:YES];

self.currentSelectLocationIndex=indexPath.row;

[self.tableView reloadData];

}

#pragma mark - InitMethod

-(BMKMapView*)mapView

{

if (_mapView==nil)

{

_mapView =[BMKMapView new];

_mapView.zoomEnabled=NO;

_mapView.zoomEnabledWithTap=NO;

_mapView.zoomLevel=17;

}

return _mapView;

}

-(BMKLocationService*)locService

{

if (_locService==nil)

{

_locService = [[BMKLocationService alloc]init];

}

return _locService;

}

-(BMKGeoCodeSearch*)geocodesearch

{

if (_geocodesearch==nil)

{

_geocodesearch=[[BMKGeoCodeSearch alloc]init];

}

return _geocodesearch;

}

-(UITableView*)tableView

{

if (_tableView==nil)

{

_tableView=[UITableView new];

_tableView.delegate=self;

_tableView.dataSource=self;

}

return _tableView;

}

-(UIImageView*)centerCallOutImageView

{

if (_centerCallOutImageView==nil)

{

_centerCallOutImageView=[UIImageView new];

[_centerCallOutImageView setImage:[UIImage imageNamed:@"location_green_icon"]];

}

return _centerCallOutImageView;

}

-(NSMutableArray*)dataSource

{

if (_dataSource==nil) {

_dataSource=[[NSMutableArray alloc]init];

}

return _dataSource;

}

@end

ios 微信发送位置的更多相关文章

  1. 利用百度地图Android sdk高仿微信发送位置功能

    接触了百度地图开发平台半个月了,这2天试着模仿了微信给好友发送位置功能,对百度地图的操作能力又上了一个台阶 (假设须要完整demo.请评论留下邮箱) (眼下源代码已经不发送,假设须要源代码.加qq31 ...

  2. iOS 发送位置消息

    发送地理位置在社交应用里面是很常用的需求.最近也需要在自己的应用里面加入这个功能 首先我们需要获取自己的地理位置,这里用到 CLLocationManager 这个类,调用如下代码 locationM ...

  3. iOS微信第三方登录实现

    iOS微信第三方登录实现   一.接入微信第三方登录准备工作.移动应用微信登录是基于OAuth2.0协议标准构建的微信OAuth2.0授权登录系统.在进行微信OAuth2.0授权登录接入之前,在微信开 ...

  4. IOS微信分享功能简单实现

    PS:此文以简单实现功能为主,不足之前还望指点,大神勿喷. 在此之前如何申请微信认证的Key就不说了,公司一般会有人搞 1.首先下载微信SDK:微信SDK下载地址(更多关于微信SDK信息文档请访问官方 ...

  5. zabbix使用企业微信发送告警信息

    用qq邮箱发送告警信息一点都不方便,看到网上说也可以使用微信发送告警信息,所以就试了一下. 首先先试着在虚拟主机上给微信发送信息. 我们需要注册企业微信,注册时有一个地方需要注意,就是注册时选择组织, ...

  6. iOS微信实现第三方登录的方法

    这篇文章主要介绍了iOS微信第三方登录实现的全过程,一步一步告诉大家iOS微信实现第三方登录的方法,感兴趣的小伙伴们可以参考一下   一.接入微信第三方登录准备工作.移动应用微信登录是基于OAuth2 ...

  7. iOS微信支付集成

    概述 iOS微信支付集成 详细 代码下载:http://www.demodashi.com/demo/10735.html 支付宝和微信都是业界的老大哥,相信大家都有所觉得文档.SDK都是各种坑吧(纯 ...

  8. 【转】odoo 10的企业微信发送程序介绍

    本文介绍的微信发送程序不是独立的模块,是某企业应用的一部分, 源码可在京津冀odoo技术交流群的群共享中下载.   [1]基本配置 在work.weixin.qq.com上注册一个企业后,会得到企业的 ...

  9. ios xmpp 发送语音图片解决方案

    ios xmpp 发送语音,图片解决方案,有需要的朋友可以参考下. 目前做IM多是用的xmpp. 因为项目需求需要实现语音和图片的发送. 发送语音图片有三种方法. 1,xmpp smack.文件传输方 ...

随机推荐

  1. php代码中使用换行及(\n或\r\n和br)的应用

    浏览器识别不了\n或\r\n,这两个换行符是文本换行符,文本文件有效;假设须要将结果输出到浏览器或打印到显示器,代码中使用br;假设仅仅是在源码中换行.则使用\n或\r\n,感兴趣的朋友能够了解下,也 ...

  2. 详解zabbix安装部署(Server端篇) (转)

    Linux下常用的系统监控软件有Nagios.Cacti.Zabbix.Monit等,这些开源的软件,可以帮助我们更好的管理机器,在第一时间内发现,并警告系统维护人员. 今天开始研究下Zabbix,使 ...

  3. java游戏开发基础Swing之JRadioButton

    © 版权声明:本文为博主原创文章,转载请注明出处 1.按钮(JButton) Swing中的按钮是JButton,它是javax.swing.AbstractButton类的子类,Swing中的按钮可 ...

  4. php序列化&反序列化坑

    一: 在php中如果我们统一编码是没有什么问题了,但是很多朋友会发现一个问题就是utf8和gbk编码中返回的值会有所区别: php 在utf8和gbk编码下使用serialize和unserializ ...

  5. Windows进程间通信--共享内存映射文件(FileMapping)--VS2012下发送和接收

    之前以为两个互不相关的程序a.exe b.exe通信就只能通过网络,人家说可以通过发消息,我还深以为不然,对此,我表示万分惭愧. 之前课本上说的进程间通信,有共享内存.管道等之类的,但没有自己操刀写过 ...

  6. Maven项目Update Project...后JRE System Library会自动变回1.5解决办法

    <build> <finalName>pay</finalName> <plugins> <plugin> <groupId>o ...

  7. 【JMeter4.0学习(六)】之逻辑控制器说明

    主要demo例子在: 链接: https://pan.baidu.com/s/1OFdsrNG7PTOYQ8TdjiVtBQ 密码: tkd2 汇总参考文档:<Jmeter之逻辑控制器(Logi ...

  8. linux 上安装apache 出现 configure: error: APR not found. Please read the documentation错误

    今日编译apache时出错: #./configure --prefix……检查编辑环境时出现: checking for APR... noconfigure: error: APR not fou ...

  9. Java学习笔记之equals和Objects.equals

    equals 相信大家就知道,就是比较,我们平时也会在自己定义的类中加入自己重写的equals用来比较两个类是否相同,例如这样 public class Person { private String ...

  10. 国家制定人工智能(AI)发展战略的决策根据

    在今年两会上,李彦宏的提案有何道理?提案的依据是什么?这个问题必须说清楚,对社会公众有个交代. 回想过去,早在上世纪九十年代,用"电子网络"模拟人脑的想法已经出现.这样的" ...