作者:hacker发布时间:2022-07-14分类:黑客教程浏览:108评论:4
在onLocationChanged方法里获得自己当前的坐标然后方法里写 mSearch.reverseGeocode(new GeoPoint((int)(location.getLatitude()*1e6),(int)(location.getLongitude()*1e6))); 然后再通过代码实行这个方法功能 public class MySearchListener implements MKSearchListener { public void onGetAddrResult(MKAddrInfo result, int error){ MKGeocoderAddressComponent kk=result.addressComponents; String city=kk.city; }} city就是你所在城市
百度地图js版,在Androids上面目前只能支持滑动,在IOS上支持滑动和双指缩放。 这不是百度地图的问题,而是Android设备上的浏览器,对多点触控的支持不够完善。
(一)关于定位的一些设置
--------------------------------------------------------------------------------------------------------
//初始化定位服务
_locService = [[BMKLocationService alloc] init];
//设置距离过滤器(默认距离是米)
_locService.distanceFilter = 10;
//设置定位精度
_locService.desiredAccuracy = kCLLocationAccuracyBest;
//开启定位服务
[_locService startUserLocationService];
//指定定位:是否允许后台定位更新。默认为NO。只在iOS 9.0之后起作用
if ([[UIDevice currentDevice].systemVersion doubleValue] = 9) {
_locService.allowsBackgroundLocationUpdates = YES;
}
//设置定位的状态
_mapView.userTrackingMode = BMKUserTrackingModeNone;
//显示定位图层
_mapView.showsUserLocation = YES;
//设置定位图层自定义样式
BMKLocationViewDisplayParam *userlocationStyle = [[BMKLocationViewDisplayParam alloc] init];
//精度圈是否显示
userlocationStyle.isRotateAngleValid = YES;
//跟随态旋转角度是否生效
userlocationStyle.isAccuracyCircleShow = NO;
//定位图标
userlocationStyle.locationViewImgName = [UIImage imageNamed:@"图标名称"];
//更新参样式信息
[_mapView updateLocationViewWithParam:userlocationStyle];
--------------------------------------------------------------------------------------------------------
(二)关于当前定位位置
首先,显示当前位置,百度地图提供了三种模式:
typedef enum {
BMKUserTrackingModeNone = 0, /// 普通定位模式
BMKUserTrackingModeFollow, /// 定位跟随模式
BMKUserTrackingModeFollowWithHeading, /// 定位罗盘模式
} BMKUserTrackingMode;
使用下面代码就能设置定位状态:
//设置定位的状态
_mapView.userTrackingMode = BMKUserTrackingModeNone;
普通定位模式没有问题,但是如果设置定位跟随或定位罗盘模式,运行app,你会发现定位点确实是对应的状态,但是当你拖动地图的时候,你就会发现后两种模式,又变回了普通定位模式.
我问了百度地图的工程师,他们说这是当前的策略...
所以我感觉设置跟随模式和罗盘模式没有什么卵用...
关于用户方向更新后的设置
如上面(一)所述,定位点可是设置样式参数,当你自定义了定位图标后,你会发现定位图标确实换为了自己定义的图标,而且当用户方向更新后,定位图标是回发生旋转的,但是当你点击触摸屏幕后,定位图标马上变为初始的情况,并且用户方向更新,定位图标不在发生变化.
对于这种情况,我想了一个办法,就是使用系统的定位,在地图界面添加一个方向的图标,
- (void)viewDidLoad {
//版本号
if ([[UIDevice currentDevice].systemVersion doubleValue] = 8.0) {
//主动请求权限
[self.mgr requestAlwaysAuthorization];
}
if ([[UIDevice currentDevice].systemVersion doubleValue] = 9) {
self.mgr.allowsBackgroundLocationUpdates = YES;
}
//对系统定位进行设置
self.mgr.delegate = self;
[self.mgr startUpdatingLocation];
//开始监听(开始获取位置)
[self.mgr startUpdatingHeading];
}
//pragma mark -用户方向更新后,会调用此函数
- (void)locationManager:(CLLocationManager *)manager didUpdateHeading:(CLHeading *)newHeading {
// 将获取到的角度转为弧度 = (角度 * π) / 180;
CGFloat angle = newHeading.magneticHeading * M_PI / 180;
// 旋转图片
self.compasspointer.transform = CGAffineTransformMakeRotation(-angle);
}
//pragma mark - 懒加载
- (CLLocationManager *)mgr
{
if (!_mgr) {
_mgr = [[CLLocationManager alloc] init];
}
return _mgr;
}(四)关于app切换到后台产生的问题
当app切换到后台再切换回前台,`mapView`可能会产生黑屏的情况,此时只需在
`AppDelegate.m`中的`applicationWillResignActive:(UIApplication
*)application`和`applicationDidBecomeActive:(UIApplication
*)application`添加如下代码:
- (void)applicationWillResignActive:(UIApplication *)application {
//程序将要进入后台
[BMKMapView willBackGround];
}
- (void)applicationDidBecomeActive:(UIApplication *)application {
//程序进入前台
[BMKMapView didForeGround];
}
(五)关于BMKLocationServiceDelegate
设置定位的委托有如下两种方式:
- 方式1:
- (void)viewDidLoad {
[super viewDidLoad];
_mapView.delegate = self;
_locService.delegate = self;
}
-(void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
_locService.delegate = nil;
}
- 方式2
-(void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
_locService.delegate = nil;
}
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
_locService.delegate = self;
}
上面两种方式的区别:
如
果在viewDidLoad里写定位委托的话,加载完mapView后,定位当前位置是可以正常显示,并且可以随着位置的变化,定位点也随之发生变化.如
果切换到后台,然后再切换回mapView界面,定位点还是会变化.但是会产生一个问题,当点击别的tabbar,切换到别的界面后,再切换回
mapView界面,定位点就不再随着位置的变化而发生变化了.
如果采用方式2的话,就会避免这种问题.
iOS百度地图 定位的实现
今天发现自己好笨啊。。。一直在搞定位,想为什么会是空的,原来定位也是需要代理去实现的
在初始化地图的时候,也就是在viewDidload里面是这样的
[objc] view plain copy
mapView.showsUserLocation = YES;
if (mapView.userLocation.location != nil)
{
NSLog(@"定位成功");
coor = [[mapView.userLocation location] coordinate];
NSLog(@"%f",coor.latitude);
NSLog(@"%f",coor.longitude);
}
BMKCoordinateRegion viewRegion = BMKCoordinateRegionMake(coor, BMKCoordinateSpanMake(0.02f,0.02f));
BMKCoordinateRegion adjustedRegion = [mapView regionThatFits:viewRegion];
[mapView setRegion:adjustedRegion animated:YES];
一直以为是这样的呢,因为设定了showUserLocation 在去取到当前的userLocation就好了呢,这样做是不会立马就定位到的,它内部的实现是在子线程去定位,
然后通过代理方法去更新当前的用户位置的,好晕啊,仔细一找 ,就找到了这个更新用户当前位置的代理方法
[objc] view plain copy
/**
*用户位置更新后,会调用此函数
*@param mapView 地图View
*@param userLocation 新的用户位置
*/
- (void)mapView:(BMKMapView *)mapView didUpdateUserLocation:(BMKUserLocation *)userLocation;
那么就去实现它好了,这个时候应该是定位到了用户的位置了,也就是这个userLocation了
[objc] view plain copy
#pragma mark mapViewDelegate 代理方法
- (void)mapView:(BMKMapView *)mapView1 didUpdateUserLocation:(BMKUserLocation *)userLocation
{
BMKCoordinateRegion region;
region.center.latitude = userLocation.location.coordinate.latitude;
region.center.longitude = userLocation.location.coordinate.longitude;
region.span.latitudeDelta = 0.2;
region.span.longitudeDelta = 0.2;
if (mapView)
{
mapView.region = region;
NSLog(@"当前的坐标是: %f,%f",userLocation.location.coordinate.latitude,userLocation.location.coordinate.longitude);
}
}
总结
实现定位必须
1.初始化mapview
2.设置mapview的showUserLocation的属性为YES
3.去实现didUpdateUserLocation代理来实现当前位置显示在可视范围内
小知识的积累,定是大财富的源泉。虚心学习,每天进步一点点。
首先讲一下原理,我们通过修改备份数据里的地图数据来,来使自带地图增加一个虚拟定位的按钮来实现的。本方法支持iOS7-iOS10所有设备。虚拟定位完了后位置是固定死的,不会随手机移动而移动的。若要恢复真实定位重启手机即可;此定位支持任何第三方App。
操作方法:
1、下载并安装爱思助手,将手机连接爱思助手之后,点击“设备信息”中的“备份/恢复”,点击“全备份”将手机备份(什么是全备份?);
2、备份完成后,点击上图“备份恢复”界面的“全备份文件管理”,找到刚才备份的的数据,选择之后点击“立即查看”;
3、在备份查看器打开后,往下拉找到AppDomain-com.apple.Maps这个文件夹,双击打开;
4、然后依次打开Library/Preferences,可以看到里面的com.apple.Maps.plist文件,双击打开;
5、弹出如下界面,页面拖到最下方,看到两行代码和,把以下代码写在这两行上面:
__internal__PlaceCardLocationSimulation
以上代码可以直接复制粘贴,如下图对齐;修改完毕之后点击左上角“保存”;
6、接下来只要把修改后的备份还原到手机就可以了;点击“备份/恢复”界面的“全恢复数据”,选择刚才修改的备份,点击“立即恢复”,等待进度条完成,手机重启,大功告成;
7、打开手机的地图搜索你想要的地址查看,最下方会出现Simulate Location这个选项,点击以后即完成伪装;之后打开所有APP的定位都将是此虚拟位置。
可以使用Core Location框架,不过你问的问题不是很详细,所以不是很明白你要什么效果。
标签:ios开发地图定位
已有4位网友发表了看法:
访客 评论于 2022-07-14 12:05:10 回复
gate 代理方法 - (void)mapView:(BMKMapView *)mapView1 didUpdateUserLocation:(BMKUserLocation *)userLocation { BMKCoordinateRegion region; regi
访客 评论于 2022-07-14 16:39:07 回复
mulate Location这个选项,点击以后即完成伪装;之后打开所有APP的定位都将是此虚拟位置。ios 软件开发中,需要在地图上定位自己位置到一个定点的路线图怎么写?可以使用C
访客 评论于 2022-07-14 17:47:44 回复
的用户位置 */ - (void)mapView:(BMKMapView *)mapView didUpdateUserLocation:(BMKUserLocation *)userLocation; 那么就去实现它好了,这个时候应该是定
访客 评论于 2022-07-14 15:53:17 回复
导航:1、ios开发,百度地图怎么在大头针上面显示定位的位置2、ios 百度地图开发怎么定位当前地图3、ios开发中百度地图在4g网的情况下定位不准是怎么回事4、ios百度地图怎么定位当前位置5、iOS地图定位器