objective-c高德地图时时定位
本人开发的开发者技术变现资源聚集地,大家支持下,下面是网址
https://www.baiydu.com
这篇随笔是对上一遍servlet接口的实现。
一、项目集成高德地图
应为我这个项目使用了cocopods这个第三方库管理工具,所以只需要很简单的步骤,就能将高德地图集成到项目中,如果你没使用过这工具,那就直接下载对应的sdk导入即可,因为这个工具的安装还是比较麻烦的,需要翻墙。 既然我用的这种方式,下面我就贴相关的使用接图。
如果你项目中已经安装好了cocopods那么你只需直接在podfile中增加 pod 'Amap2DMap' 和 pod 'AmapSearch' 这两句即可, 第一个涉及到的地图功能主要是定位,地图展示...
第二个涉及到的主要功能是GPS定位,这里为什么要使用第二个? 因为我们传递参数时需要给servlet传递一个当前城市的名称,就需要它来执行一个逆地理编码获取城市名,
然后在打开打开终端 cd 拖入项目文件夹 pod install稍等即可安装。
二、时时定位
引入高德地图两个类。
#import <AMapSearchKit/AMapSearchAPI.h>
#import <MAMapKit/MAMapKit.h>
下面截图所需代理及涉及到的参数。。
上面截图中关于我们实现这个功能需要使用到的代理只有一个高德地图的:MAMapViewDelegate
1、在didFinishLaunchingWithOptions授权高德地图
[MAMapServices sharedServices].apiKey = (NSString *)APIKey;
2、启动时时定位,间隔时间为15秒 类中有时时定位的代理,但是被我使用代码控制了的,因为系统自带的不能控制定位间隔时间
_nstimer=[NSTimer scheduledTimerWithTimeInterval:15 target:self selector:@selector(timerFired:) userInfo:nil repeats:NO];
3、MAMapViewDelegate 代理实现的方法,服务人员时时定位,经纬度提交高德云图库
↓下面这个方法提示使用APP的人员是否允许该应用使用定位功能。
- (void)mapViewWillStartLocatingUser:(MAMapView *)mapView
{ if(![CLLocationManager locationServicesEnabled]){
UIAlertView * alertView = [[UIAlertView alloc]initWithTitle:@"定位失败" message:@"请在手机设置中开启定位功能\n开启步骤:设置 > 隐私 > 位置 > 定位服务" delegate:self cancelButtonTitle:@"确定" otherButtonTitles:nil, nil];
[alertView show]; return;
}else{ if ([CLLocationManager authorizationStatus] != kCLAuthorizationStatusAuthorizedAlways) {
UIAlertView * alertView = [[UIAlertView alloc]initWithTitle:@"定位失败" message:@"请在手机设置中开启定位功能\n开启步骤:设置 > 隐私 > 位置 > 定位服务下《***》应用" delegate:self cancelButtonTitle:@"确定" otherButtonTitles:nil, nil];
[alertView show]; return;
}
}
}
↓下面的代码是时时定位的,15秒一次,并且将定位后的经纬度提交到高德云图库中去
- (void)mapView:(MAMapView *)mapView didUpdateUserLocation:(MAUserLocation *)userLocation
{ _mapView=nil;
[_nstimer invalidate];
if ([WDUser currentUser].userType==) { longitude=[NSString stringWithFormat:@"%f%@", mapView.userLocation.coordinate.longitude,@","];//@"106.546128";//
latitude= [NSString stringWithFormat:@"%f", mapView.userLocation.coordinate.latitude];
locationGroup=[NSString stringWithFormat:@"%@%@",longitude,latitude];
NSString *healtherName=[NSString stringWithFormat:@"%d,康复师",[WDUser currentUser].healterLoginTypes]; NSMutableDictionary *postParameterDic=[[NSMutableDictionary alloc]init];
[postParameterDic setObject:@"?" forKey:@"tableid"];
[postParameterDic setObject:@"?" forKey:@"key"]; NSMutableDictionary *dataDictionary=[[NSMutableDictionary alloc]init]; NSString *yunClouldReturnId=[NSString stringWithFormat:@"%d",[WDUser currentUser].healtherClouldMapId];
[dataDictionary setObject:yunClouldReturnId forKey:@"_id"];
[dataDictionary setObject:healtherName forKey:@"_name"];
[dataDictionary setObject:locationGroup forKey:@"_location"];//点后6位 格式示例:104.394729,31.125698 NSString *dateStr=[AFDataDefine shareGetStr:dataDictionary]; [postParameterDic setObject:dateStr forKey:@"data"]; // 设置返回格式
AFHTTPRequestOperationManager *postManager = [AFHTTPRequestOperationManager manager];
postManager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"text/html",@"charset=UTF-8",@"Content-Type",@"application/x-www-form-urluncoded",nil];;
postManager.requestSerializer = [AFJSONRequestSerializer serializer];
postManager.responseSerializer = [AFHTTPResponseSerializer serializer]; [postManager GET:@"http://yuntuapi.amap.com/datamanage/data/update" parameters:postParameterDic success:^(AFHTTPRequestOperation *operation, id responseObject) {
// NSString *result = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding]; [_nstimer invalidate]; _nstimer=[NSTimer scheduledTimerWithTimeInterval: target:self selector:@selector(timerFired:) userInfo:nil repeats:NO]; } failure:^(AFHTTPRequestOperation *operation, NSError *error) { // NSLog(@"1");
[_nstimer invalidate];
_nstimer=[NSTimer scheduledTimerWithTimeInterval: target:self selector:@selector(timerFired:) userInfo:nil repeats:NO]; } ];
} else
{
[_nstimer invalidate];
_nstimer=[NSTimer scheduledTimerWithTimeInterval: target:self selector:@selector(timerFired:) userInfo:nil repeats:NO]; } }
↓下面的代码是timer控件调用的方法
-(void)timerFired:(NSTimer *)timer{ [_nstimer invalidate];
_mapView=[[MAMapView alloc]init];
_mapView.userTrackingMode = ,
_mapView.showsUserLocation = YES;
_mapView.userTrackingMode = MAUserTrackingModeNone;
_mapView.delegate=self; }
↓下面的代码是应用进入后台,以及从后台进入前台时的定位处理
- (void)applicationDidEnterBackground:(UIApplication *)application {//在后台
_mapView=nil;
UIApplication *app = [UIApplication sharedApplication];
__block UIBackgroundTaskIdentifier bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
dispatch_async(dispatch_get_main_queue(), ^{
if (bgTask != UIBackgroundTaskInvalid) {
[app endBackgroundTask:bgTask];
bgTask = UIBackgroundTaskInvalid;
}
});
}];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, ), ^{
[_nstimer invalidate];
_nstimer=[NSTimer scheduledTimerWithTimeInterval: target:self selector:@selector(timerFired:) userInfo:nil repeats:NO]; [[NSRunLoop currentRunLoop] addTimer:_nstimer forMode:NSRunLoopCommonModes]; [[NSRunLoop currentRunLoop] run]; dispatch_async(dispatch_get_main_queue(), ^{
if (bgTask != UIBackgroundTaskInvalid) {
[app endBackgroundTask:bgTask];
bgTask = UIBackgroundTaskInvalid;
}
});
}); } - (void)applicationWillEnterForeground:(UIApplication *)application {//在前台
_mapView=nil;
[_nstimer invalidate];
_nstimer=[NSTimer scheduledTimerWithTimeInterval: target:self selector:@selector(timerFired:) userInfo:nil repeats:NO];
[[NSRunLoop currentRunLoop] addTimer:_nstimer forMode:NSRunLoopCommonModes]; }
上面的方法实现的主要功能就是时时定位,然后网高德云图中传递服务人员的位置经纬度,它们针对的是服务人员。
4:被服务人员跳转服务人员页面,提交经纬度和地理位置给 servlet接口处理。
这个方法针对的是被服务人员,因为被服务人员也需要提供自己当前经纬度,但是不是时时提供,只是跳转到服务人员页面时,才提供,而且是直接调用servlet写的接口,
而且被服务人员还需要提供当前城市的名称,所以这里还需要使用一个GPS定位,通过经纬度去查询地理位置名称。
↓下面的代码是申明高德地图
_longitude=[[NSString alloc]init];
_latitude=[[NSString alloc]init];
computeFrame=self.LeftButton.frame;
self.mapView=[[MAMapView alloc]initWithFrame:CGRectMake(, , , )];
self.mapView.userTrackingMode = ,
_mapView.showsUserLocation = YES;
self.mapView.userTrackingMode = MAUserTrackingModeNone;
self.mapView.delegate=self;
↓下面的代码主要是GPS定位获取城市名称。
- (void)mapViewDidStopLocatingUser:(MAMapView *)mapView
{ _longitude=[NSString stringWithFormat:@"%f",mapView.userLocation.location.coordinate.longitude];//@"106.546128";//
_latitude= [NSString stringWithFormat:@"%f",mapView.userLocation.location.coordinate.latitude]; //@"29.559153"; [WDUser currentUser].longitude=_longitude;
[WDUser currentUser].latitude=_latitude;
[[WDUser currentUser] saveUserInfo]; _search = [[AMapSearchAPI alloc] initWithSearchKey:@"?" Delegate:self];
AMapReGeocodeSearchRequest *regeoRequest = [[AMapReGeocodeSearchRequest alloc] init];
regeoRequest.searchType = AMapSearchType_ReGeocode; regeoRequest.location =[AMapGeoPoint locationWithLatitude:[_latitude floatValue] longitude:[_longitude floatValue]];
regeoRequest.radius = ;
regeoRequest.requireExtension = YES; //发起逆地理编码
[_search AMapReGoecodeSearch: regeoRequest]; }
//逆编码查询代理
- (void)onReGeocodeSearchDone:(AMapReGeocodeSearchRequest *)request response:(AMapReGeocodeSearchResponse *)response
{ if(response.regeocode != nil)
{ _compantAddress=response.regeocode.addressComponent; _currentCityName=_compantAddress.province; _currentCityName= [_currentCityName stringByReplacingOccurrencesOfString:@"市" withString:@""];
_currentCityName= [_currentCityName stringByReplacingOccurrencesOfString:@"省" withString:@""]; [ WDUser currentUser].currentCity=_currentCityName;
[[WDUser currentUser] saveUserInfo]; [SVProgressHUD dismiss];
}
else{
showMessage(@"请检查网是否畅通!");
} }
- (void)mapView:(MAMapView *)mapView didUpdateUserLocation:(MAUserLocation *)userLocation
{ mapView.showsUserLocation = NO; }//联系客户
最后服务人员将这些获取的参数提交到servlet处理。
本人创业做的一款androidApp, 下载量已经有2000多万,各种当前热门的网络手机奖励红包全部集成,另外还有热门电影和淘宝高额优惠券!很适合各类型的用户。
objective-c高德地图时时定位的更多相关文章
- Android Studio之高德地图实现定位和3D地图显示
在应用开发中,地图开发是经常需要使用的“组件”,国内比较出名的是就是百度地图和高德地图. 此博客讲的是高德地图实现定位和3D地图显示,并标注相应位置,话不多说,先看看效果,在上代码. 效果如图: 首先 ...
- [OC][地图] 高德地图之定位初探(一)
使用前的说明 高德地图开放平台的iOS定位模块网址-->http://lbs.amap.com/api/ios-location-sdk/summary/ 高德地图有Web端.android平台 ...
- Unity与Android交互-Unity接入高德地图实现定位以及搜索周边的功能(使用Android Studio)详细操作
刚进公司给安排的任务就是Unity接入高德地图,算是踩了不少坑总算做出来了,抽点时间写个博客记录一下 废话不多说 先上效果图 获取定位并根据手机朝向显示周边信息 使用的Unity ...
- vue2使用高德地图vue-amap定位以及AMapUI标注
前言 最近在vue里使用了高德地图vue-amap以及AMapUI,我在这里就说下如何在vue2里引入vue-amap和AmapUI以及使用定位 (在这里默认你已经安装了vue-cli) 安装 npm ...
- iOS高德地图SDK定位和搜索附近信息的具体使用
1.显示地图.定位.显示当前位置. 导入你需要的功能的头文件,申明全局变量,代理方法等等. 初始化地图,在控制器即将显示额时候打开定位和跟踪用户,这里对参数不懂的话康忙进去都有注释. 对了.i ...
- js高德地图手机定位
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <hea ...
- cordova 配置 高德地图sdk定位
获取 sha1 打开 cmd 1. cd .android 2. keytool -list -v -keystore debug.keystore 3. 输入密钥: android 4. 复制 sh ...
- Android学习十一:高德地图使用
写这篇文章主要有三个目的: 1.使用高德地图api定位 2.获取天气数据 3.编程练手 文件结构 清单文件信息说明: <?xml version="1.0" encoding ...
- 高德地图添加marker及反地理编码获取POI
项目中集成百度.高德.腾讯地图已是司空见惯的事情,今天我总结了一下项目中用到的高德地图常用的功能: 1.展示高德地图并定位显示定位图标: 2.添加实时大头针: 3.反地理编码获取周围兴趣点 效果如下: ...
随机推荐
- 我心中的核心组件(可插拔的AOP)~第十五回 我的日志组件Logger.Core(策略,模版方法,工厂,单例等模式的使用)
回到目录 之前的讲过两篇关于日志组件的文章,分别是<第一回 日志记录组件之自主的Vlog>和<第三回 日志记录组件之log4net>,而今天主要说一下我自己开发的另一种日志 ...
- iOS-ARC项目使用非ARC文件 MRC项目使用ARC文件
SDK4.0引入了ARC,到现在已经好几年了,开始发现有很多项目会混合使用这两个方案.比如: 1.自己的旧项目没有使用ARC,但是引入的第三方库却是使用了ARC的. 2.自己的新项目使用了ARC,但是 ...
- IOS开发之控件篇UITabBarControllor第二章 - 遮掩TableView问题
在IOS7.0以后UITabBar 里面放入一个UITableView会出现一个问题,Table会被TabBar掩盖了,当移动到最后一项的时候,永远看不到,如下面的例子,总共是99项,但是只能显示到9 ...
- 在忘记root密码的情况下如何修改linux系统的root密码
1.系统启动时长按shift键后可以看到如下界面: 2.找到 recovery mode 那一行, 按下[e]键进入命令编辑状态,到 linux /boot/vmlinuz-....... r ...
- 快速入门系列--NOSQL--05Redis也木有那么“高富帅”
由于工作慢慢从原来的少量用户的企业内部应用慢慢转化为了大量用户的企业内部应用或者直接转为了线上高并发应用,因而也渐渐的开始使用memcached.Redis等缓存服务器,为了便于自身的学习和记忆,特此 ...
- OpenCascade Tcl vs. ACIS Scheme
OpenCascade Tcl vs. ACIS Scheme eryar@163.com 摘要Abstract:本文通过OpenCascade的Tcl/Tk和ACIS的Scheme的对比来说明脚本语 ...
- WPF自定义控件与样式(12)-缩略图ThumbnailImage /gif动画图/图片列表
一.前言 申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等,若有不明白的地方可以参考本系列前面的文章,文末附有部分文章链接. 本文主要针对WPF项目 ...
- c#方法重载,可选参数,命名参数。
其实这里没什么可说哦,c++的语法大同小异.先看一段代码. class Program { public static void Test(int a) { Console.WriteLine(&qu ...
- MFC 字符串类CString 源代码
原文:http://blog.csdn.net/benny5609/article/details/1926088 CString使用的是引用技术,可以共享数据(这个大家都知道),另外空的CStirn ...
- 使用office制作图章公章
制作公章的软件非常多,随便到网上一搜就有成千成百的软件或小工具,常用的有PS.Coreldraw.Ai.Word等,拥有一款office可以使用word来制作,方法挺简单,功能挺强大.寥寥数笔难以形容 ...