iOS(使用百度地图)-仿美团地图功能 - 简书
下载简书移动应用
写了741字,被5人关注,获得了15个喜欢
iOS(使用百度地图)-仿美团地图功能
公司项目需要有地图定位的功能,经同事推荐准备仿照美团地图的样式来做。功能实现思路:通过百度定位获取用户当前坐标,在地图上用大头针显示出来且固定不变,在地图下方列表中展示当前坐标和周边信息;拖动地图时以地图中心点为新的用户坐标,停止拖动时在地图下方列表中刷新展示的当前坐标和周边信息。在输入框中输入时依靠百度POI检索功能获取和输入的关键字有关的地址信息。返回时通过block将‘地址’、‘建筑物名称’、‘经度’、‘纬度’、‘城市’等信息传回到上个界面。功能实现的核心是地理编码和反地理编码。因为使用的是百度地图API,所以准备工作按照百度官方文档一步一步来就行。链接:/index.php?title=iossdk 在AppDelegate.m文件中添加对BMKMapManager的初始化,并填入申请的授权Key(官方文档里有写)
核心实现代码:
-百度POI检索:
总结:虽然是第一次写地图类demo,不过按照官方文档写基本没有遇到什么棘手的问题。在功能方面没有什么问题,不过在代码方面还不够完美,很多地方还需要优化。最后附上demo:http://www.oschina.net/code/snippet_18
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
被以下专题收入,发现更多相似内容:
如果你是程序员,或者有一颗喜欢写程序的心,喜欢分享技术干货、项目经验、程序员日常?事等等,欢迎投稿《程序员》专题。
专题主编:小...
? 175226人关注
收集 iOS && Android 开发的知识,解决大家遇到的问题,讨论移动前端开发的前沿,欢迎大家投稿~
投稿须知:
? 401人关注
收集一些可以装逼的例子
? 137人关注
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
选择支付方式:美团、糯米、点评合作前请先进行地图标注-专业地图标注服务的博客 - 我的地球城
专业地图标注服务
被访问过 115 次
美团、糯米、点评合作前请先进行地图标注
台球馆在很多城市都比较流行,尤其在一些娱乐场所比较少的地方,打台球往往是很多年轻人的爱好。王老板就是看中了这一点,在几年前就开了一家台球馆,当时规模还比较小,就3张台球桌,虽然经济不景气,但这几年发展的都还算顺利,今年时候,桌球馆扩大了规模,也改了一个名字,叫杆超力桌球馆,比起原来那个福祥桌球馆,感觉洋气了很多。 在新店装修完成后,王老板做了很多宣传。有一天,有个美团的销售找到了王老板,想让王老板进行一下团购合作,王老板平时也一直在用美团,也想尝试通过团购拉来一些新客户。很快王老板就和美团签了协议,在准备资料时,王老板突然发现自己的杆超力桌球馆在地图上搜不到,因为后台需要在地图中找到自己的桌球馆进行定位,然后美团才能进行审核,这可怎么办好呢。 王老板后来很快找到了我们,在了解到这种情况后,我们提供了快速标注业务。因为王老板的杆超力桌球馆今年刚改了名字,在地图上都没有显示,地图上老位置显示的还是原来的福祥桌球馆。如果不及时标注,很多人在团购后,在地图上搜杆超力桌球馆都搜不到,这样对团购用户的体验会造成很大的影响。 目前美团调用的是高德地图,糯米调用的是百度地图,大众点评调用的是腾讯地图,正好是目前国内用户最常用的3个地图。为了方便王老板以后也在糯米和大众点评上做团购,我们让王老板把这3个地图都进行。后来王老板发现美团团购为自己的桌球馆带来很多用户,就陆续和糯米和大众点评也进行了团购合作。 在移动互联网时代,地图的用途其实不仅仅只是查个位置,在很多场景下,都会用到地图应用。团购就是最常见的使用常用,当用户要进行团购时,商家位置是很重要的考虑因素,一般都会先看一下商家位置,如果地图上找不到商家,那用户肯定会很疑惑,可能就不会进行团购了。如果你想把你的店铺开到到地图上,让你的店铺获得亿万用户的曝光,那就快点联系我们吧。
我要评论:
文章日志分类像美团网的google地图标注点是如何实现的呢
[问题点数:40分,结帖人wangdetian168]
像美团网的google地图标注点是如何实现的呢
[问题点数:40分,结帖人wangdetian168]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
2014年1月 荣获微软MVP称号2012年1月 荣获微软MVP称号
2010年11月 挨踢职涯大版内专家分月排行榜第一2010年10月 挨踢职涯大版内专家分月排行榜第一
2014年1月 荣获微软MVP称号2012年1月 荣获微软MVP称号
2010年11月 挨踢职涯大版内专家分月排行榜第一2010年10月 挨踢职涯大版内专家分月排行榜第一
2010年 总版技术专家分年内排行榜第一2009年 总版技术专家分年内排行榜第一
2011年 总版技术专家分年内排行榜第二
2014年1月 荣获微软MVP称号2012年1月 荣获微软MVP称号
2010年11月 挨踢职涯大版内专家分月排行榜第一2010年10月 挨踢职涯大版内专家分月排行榜第一
2012年2月 挨踢职涯大版内专家分月排行榜第三2011年11月 挨踢职涯大版内专家分月排行榜第三2011年10月 挨踢职涯大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。引入头文件
#import &CoreLocation/CoreLocation.h&
#import &MapKit/MapKit.h&
#import "MapViewController.h"
#import "AnnotationModel.h"
@interface MapViewController ()&CLLocationManagerDelegate,MKMapViewDelegate&
@property (nonatomic, strong) CLLocationManager *
@property (nonatomic, strong) MKMapView *mapV
@property (nonatomic, strong) CLGeocoder *myG
@property (nonatomic, strong) MKAnnotationView *
// 用于显示目的地详情,及导航按钮
@property (nonatomic, strong) UIView *viewL
// 导航按钮
@property (nonatomic, strong) UIButton *guidanceB
@property (nonatomic ,assign) CLLocationCoordinate2D ToC
@property (nonatomic ,assign) CLLocationCoordinate2D FromC
_manager = [[CLLocationManager alloc]init];
_manager.delegate =
[_manager requestAlwaysAuthorization];
[_manager startUpdatingLocation];
_mapView = [[MKMapView alloc]initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, SCREENHEIGHT)];
_mapView.delegate =
_mapView.showsUserLocation = YES;
_mapView.userTrackingMode = MKUserTrackingModeF
_viewLabel = [[UIView alloc] initWithFrame:CGRectMake(0, SCREEN_HEIGHT - 80-64, SCREEN_WIDTH, 80)];
_viewLabel.backgroundColor = [UIColor whiteColor];
[_mapView addSubview:_viewLabel];
_guidanceBtn = [[UIButton alloc]initWithFrame:CGRectMake(SCREEN_WIDTH - 52, 5, 50, 30)];
_guidanceBtn.backgroundColor = [UIColor orangeColor];
[_guidanceBtn setTitle:@"导航" forState:UIControlStateNormal];
[_viewLabel addSubview:_guidanceBtn];
[_guidanceBtn addTarget:self action:@selector(btnClick) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:self.mapView];
_mapView.delegate =
设置定位精确度
_manager.desiredAccuracy = kCLLocationAccuracyB
地理编码获取目的地经纬度
_myGeocoder = [[CLGeocoder alloc]init];
[self.myGeocoder geocodeAddressString:@"光谷国际广场"
completionHandler:^(NSArray *placemarks,NSError *error){
if(nil == error && [placemarks count] & 0){
CLPlacemark *pm = [placemarks objectAtIndex:0];
CLLocationCoordinate2D coords=
CLLocationCoordinate2DMake(pm.location.coordinate.latitude,
pm.location.coordinate.longitude);
self.ToCoords =
// 自定义的大头针
AnnotationModel *anno = [[AnnotationModel alloc]init];
anno.iconName = @"category_2";
anno.coordinate = CLLocationCoordinate2DMake(pm.location.coordinate.latitude, pm.location.coordinate.longitude);
NSLog(@"%f,%f",anno.coordinate.latitude,anno.coordinate.longitude);
// 地图显示精度
float zoomLevel = 0.01;
MKCoordinateRegion region = MKCoordinateRegionMake(coords, MKCoordinateSpanMake(zoomLevel, zoomLevel));
[_mapView setRegion:region animated:YES];
[_mapView addAnnotation:anno];
}else if([placemarks count] == 0 && error == nil){
NSLog(@"找不到给定地址的经纬度");
#pragma mark - CLLocationManager的代理方法
/** 用户拒绝或同意授权后调用*/
- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status
- (void)locationManager:(CLLocationManager *)manager
didUpdateLocations:(NSArray&CLLocation *& *)locations
NSLog(@"--%f",manager.location.coordinate.latitude);
NSLog(@"--%f",manager.location.coordinate.longitude);
self.FromCoords = manager.location.
[self.manager stopUpdatingLocation];
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:
(id&MKAnnotation&)annotation
if ([annotation isKindOfClass:[MKUserLocation class]])
_annotation = [self.mapView dequeueReusableAnnotationViewWithIdentifier:@"ID"];
if (_annotation == nil) {
_annotation = [[MKAnnotationView alloc]initWithAnnotation:annotation
reuseIdentifier:@"ID"];
_annotation.canShowCallout = YES;
// 根据模型对象,决定本大头针显示的图片样式。
NSString *iconName = ((AnnotationModel *)annotation).iconN
_annotation.image = [UIImage imageNamed:iconName];
调用苹果自带地图导航
- (void)btnClick
//当前的位置
MKMapItem *currentLocation = [MKMapItem mapItemForCurrentLocation];
//MKMapItem *currentLocation = [[MKMapItem alloc] initWithPlacemark:[[MKPlacemark alloc] initWithCoordinate:coords1 addressDictionary:nil]];
//目的地的位置
MKMapItem *toLocation = [[MKMapItem alloc] initWithPlacemark:[[MKPlacemark alloc] initWithCoordinate:self.ToCoords addressDictionary:nil]];
toLocation.name = @"目的地";
NSArray *items = [NSArray arrayWithObjects:currentLocation, toLocation, nil];
NSDictionary *options = @{ MKLaunchOptionsDirectionsModeKey:MKLaunchOptionsDirectionsModeDriving, MKLaunchOptionsMapTypeKey: [NSNumber numberWithInteger:MKMapTypeStandard], MKLaunchOptionsShowsTrafficKey:@YES };
//打开苹果自身地图应用,并呈现特定的item
[MKMapItem openMapsWithItems:items launchOptions:options];
AnnotationModel.h
#import &Foundation/Foundation.h&
#import &MapKit/MapKit.h&
@interface AnnotationModel : NSObject &MKAnnotation&
@property (nonatomic, copy) NSString *iconN
@property (nonatomic, assign) CLLocationCoordinate2D
@property(nonatomic, readonly, copy) NSString *
@property(nonatomic, readonly, copy) NSString *
AnnotationModel.m
#import "AnnotationModel.h"
@implementation AnnotationModel
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:137次
排名:千里之外