iOS_地图之显示附近微博

效果图:定位: 显示天安门附近微博:   自定义大头针: 

1、首先需要新建一个MKMapView地图对象,在storyBoard中拖拽一个,在工程中导入MapKit.framework;

2、遵守MKMapViewDelegate协议,设定显示地图的显示内容和范围;下面使用的为天安门的经纬度;注意因为中国的地图有偏移,所以在地图上会定位到天安门附近;

viewController的viewdidLoad方法中进行设定

 1 self.mapView.delegate = self;
 2     //116°23′29.29,经度
 3     double longitude = 116+23.0/60+29.29/60/60;
 4     //39°54′24.15,纬度
 5     double latitude = 39+54.0/60+24.15/60/60;
 6    // 注意region为结构体,不能直接赋值;
 7     MKCoordinateRegion region;
 8     region.center.longitude = longitude;
 9     region.center.latitude = latitude;
10     region.span.latitudeDelta = 0.005;
11     region.span.longitudeDelta = 0.005;
12
13     self.mapView.region = region;

3、创建大头针对象的类。只要遵守了 <MKAnnotation>协议的对象,实现[self.mapView addAnnotation:<#(id<MKAnnotation>)#>]即可作为大头针添加到地图上。新建一个WeiBo类来作为大头针对象;实现3个属性的getter方法,确定了大头针的标题描述和位置

weibo.m:

 1 #import <Foundation/Foundation.h>
 2 #import <MapKit/MapKit.h>
 3 @interface WeiBo : NSObject<MKAnnotation>
 4 @property (nonatomic, strong) NSString * userName;
 5 @property (nonatomic , strong) UIImage * userImage;
 6 @property (nonatomic , strong) NSString *text;
 7 /**
 8  *  latitude 纬度
 9     longitude 经度
10  */
11 @property (nonatomic , strong) NSDictionary * location;
12 @end
13 -(NSString *)title
14 {
15     returnself.userName;
16 }
17
18 -(NSString *)subtitle
19 {
20     returnself.text;
21 }
22
23 -(CLLocationCoordinate2D)coordinate
24 {
25     CLLocationCoordinate2D co2D;
26     double latitude = [self.location[@"latitude"] doubleValue];
27     double longitude = [self.location[@"longitude"] doubleValue];
28     co2D.latitude = latitude;
29     co2D.longitude = longitude;
30     return co2D;
31 }

4、新建一个manager类来获取数据,想新浪发送网络请求附近地点的微博,并把请求到的数据解析出来,赋值给weibo对象存到一个数组中返回;

manager.h:

 1 #import <Foundation/Foundation.h>
 2 #import "AFNetworking.h"
 3
 4 typedefvoid(^ReturnValueBlock)(NSArray * value);
 5
 6 @interface Manager : NSObject
 7
 8 + (instancetype)shared;
 9
10 - (void)requestNearbyWeiBoWithLat:(CGFloat)lattude
11                           andLong:(CGFloat)longitude
12                          andRange:(NSInteger)range
13                          andCount:(NSInteger)count
14                          andValue:(ReturnValueBlock)value;
15 @end

manager.m

 1 #define Token @"2.002PAyaD0jZRAv478009fa180Dydir"
 2 #define PlaceURL @"https://api.weibo.com/2/place/nearby_timeline.json"
 3 #import "Manager.h"
 4 #import "WeiBo.h"
 5
 6 @interfaceManager ()
 7
 8 @property (nonatomic, strong) AFHTTPRequestOperationManager * afManager;
 9
10 @end
11
12 @implementation Manager
13
14 + (instancetype)shared
15 {
16     staticManager * m = nil;
17     staticdispatch_once_t onceToken;
18     dispatch_once(&onceToken, ^{
19         m = [[Manageralloc] init];
20     });
21     return m;
22 }
23
24 - (instancetype)init
25 {
26     self = [superinit];
27     if (self) {
28         self.afManager = [[AFHTTPRequestOperationManageralloc] init];
29         self.afManager.responseSerializer = [AFHTTPResponseSerializerserializer];
30     }
31     returnself;
32 }
33
34 -(void)requestNearbyWeiBoWithLat:(CGFloat)lattude andLong:(CGFloat)longitude andRange:(NSInteger)range andCount:(NSInteger)count andValue:(ReturnValueBlock)value
35 {
36     NSDictionary * dic = @{@"access_token":Token,@"lat":@(lattude),@"long":@(longitude),@"count":@(count),@"range":@(range)};
37
38     [self.afManagerGET:PlaceURLparameters:dic success:^void(AFHTTPRequestOperation * op, NSData * data) {
39         NSDictionary * dicData = [NSJSONSerializationJSONObjectWithData:data options:NSJSONReadingAllowFragmentserror:nil];
40         NSArray * arr = dicData[@"statuses"];
41         NSLog(@"请求结果:%ld",arr.count);
42         NSMutableArray * arrWeiBo = [NSMutableArrayarrayWithCapacity:arr.count];
43         for (NSDictionary * dic in arr)
44         {
45             WeiBo * weiBoObj = [selffetchWeiBoModelWithDic:dic];
46             [arrWeiBo addObject:weiBoObj];
47         }
48         value([NSArrayarrayWithArray:arrWeiBo]);
49
50     } failure:^void(AFHTTPRequestOperation * op, NSError * error)
51     {
52         NSLog(@"%@",error.localizedDescription);
53     }];
54
55 }
56
57 - (WeiBo *)fetchWeiBoModelWithDic:(NSDictionary *)dic
58 {
59     WeiBo * weibo = [[WeiBoalloc] init];
60     weibo.userName = dic[@"user"][@"name"];
61     weibo.text = dic[@"text"];
62     NSURL * imageURL = [NSURLURLWithString:dic[@"user"][@"profile_image_url"]];
63     NSData * data = [NSDatadataWithContentsOfURL:imageURL];
64     UIImage * image = [UIImageimageWithData:data];
65     weibo.userImage = image;
66
67     weibo.location = @{@"longitude":dic[@"geo"][@"coordinates"][1],@"latitude":dic[@"geo"][@"coordinates"][0]};
68     return weibo;
69 }

5、在viewController中请求微博数据,并在地图上显示;通过weibo中的3个getter方法就将数据传给大头针了;

1    [self.managerrequestNearbyWeiBoWithLat:latitude andLong:longitude andRange:200andCount:20andValue:^(NSArray *value) {
2         self.arrWeiBo = value;
3         for (WeiBo * wbObj in value)
4         {
5             WeiBo * wb = wbObj;
6             [self.mapViewaddAnnotation:wb];
7         }
8     }];

6、实现代理方法自定义大头针,显示用户头像;在vc中添加了一个int型成员变量 _count来更换用户头像;

 1 -(MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation
 2 {
 3     MKAnnotationView * view = [mapView dequeueReusableAnnotationViewWithIdentifier:@"wb"];
 4     if (view == nil)
 5     {
 6         view = [[MKAnnotationViewalloc] initWithAnnotation:annotation reuseIdentifier:@"wb"];
 7     }
 8     WeiBo * wb = self.arrWeiBo[_count];     使用了自己封装的一个方法来生成一个圆形带边框的头像;
 9     view.image = [UIImagegetCircleIconWithImage:wb.userImageandRadius:20andBorder:3andColor:[UIColorblueColor]];
10
11     UIImageView * imageV = [[UIImageViewalloc]initWithFrame:CGRectMake(0, 0, 30, 30)];
12     imageV.image = wb.userImage;
13     view.leftCalloutAccessoryView = imageV;
14     是否可以点击大头针显示详细信息;
15     view.canShowCallout = YES;
16     //[view setSelected:YES animated:NO];
17
18     _count ++;
19     return view;
20 }
时间: 2024-10-16 06:49:53

iOS_地图之显示附近微博的相关文章

IOS_地图_定位_天气预报_Block回调_单例

H:/1021/00_block回调.h /* 通过block回调 定义block代码块,目的是解析完成之后调用 返回值是 void 参数是 数组,里面的每个成员是一个NSString*/ typedef void(^WeatherFinishedBlock)(NSArray *dataList); @interface WeatherXMLPaser : NSObject // 解析器解析数据,参数1是要解析的数据,参数2是解析完毕回调的代码块 - (void)parserWeatherDat

iOS地图的显示(大头针)

1 1.导入主头文件 2 #import <MapKit/MapKit.h> 3 MapKit框架使用须知 4 MapKit框架中所有数据类型的前缀都是MK 5 MapKit有一个比较重要的UI控件:MKMapView,专门用于地图显示 6 7 2.跟踪显示用户的位置 8 9 设置MKMapView的userTrackingMode属性可以跟踪显示用户的当前位置 10 MKUserTrackingModeNone :不跟踪用户的位置 11 MKUserTrackingModeFollow :跟

Android 百度地图只显示 网格?

最近写百度地图,显示的 时候 只显示 我那个不显示具体的数据? 这是为什么呢? 原来是因为:  自己的Key错了. Key 是唯一的: 之前的 Key : 是  MD5 :包名 这是错误的格式! Key : 应该是  SHA1 ; 包名: 解决方案: 创新建一个 APP .重新设置 Key!

IOS中MapKit框架使用地图的显示

1.导入主头文件 #import <MapKit/MapKit.h> MapKit框架使用须知 MapKit框架中所有数据类型的前缀都是MK MapKit有一个比较重要的UI控件 :MKMapView,专门用于地图显示 2. 设置MKMapView的userTrackingMode属性可以跟踪显示用户的当前位置 MKUserTrackingModeNone :不跟踪用户的位置 MKUserTrackingModeFollow :跟踪并在地图上显示用户的当前位置 MKUserTrackingMo

IOS_地图与定位

知识点介绍 一. 定位 实现一次定位 CLLocation对象介绍 实现持续定位 请求用户授权 二. 地理编码 正地理编码 反地理编码 三. 地图的基本使用 显示用户位置 设置地图显示类型 根据用户位置显示对应的大头针信息 设置以用户所在位置为中心点 监听地图显示区域改变 iOS9新特性-显示交通状况 / 显示比例 / 显示指南针 四. 大头针的使用 添加大头针 自定义大头针1, 更改颜色, 设置掉落效果 自定义大头针2-更改大头针的图像 自定义大头针的代码封装 一. CoreLocation实

百度地图如何引用到自己网站,并在地图上显示企业的相关信息

步骤一: 打开下面这个地址:http://api.map.baidu.com/lbsapi/creatmap/index.html 步骤二:定位中心点 在打开的页面左侧,输入企业的详细地址,然后点查找,即可在右侧的地图中显示企业的具体位置. 步骤三:设置地图 主要是设置地图的尺寸大小,其它的按照默认即可,比如我们要调用的地图大小宽度为600像素,高度为500像素 步骤四:添加标注 这是关键的一步,点开后,我们点选那个绿色的小点图标,然后在地图上企业所在的位置点击一下,即可标注好地点,标记好了之后

百度地图API显示多个标注点带提示的代码

效果如图: 代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>百度地图API显示多个

flex 地图居中显示

第一步调用类方法: MapUni.dataExtent([cityGra],map,0.003); layerxuanran.add(cityGra); 第二步导入类  (MapUni.as类) package com.mapUni.BaseClass { import com.esri.ags.Graphic; import com.esri.ags.Map; import com.esri.ags.SpatialReference; import com.esri.ags.geometry.

html5定位并在百度地图上显示

在开发移动端 web 或者webapp时,使用百度地图 API 的过程中,经常需要通过手机定位获取当前位置并在地图上居中显示出来,这就需要用到html5的地理定位功能. navigator.geolocation.getCurrentPosition(callback); 在获取坐标成功之后会执行回调函数 callback; callback 方法的参数就是获取到的坐标点:然后可以初始化地图,设置控件.中心点.缩放等级,然后给地图添加point的overlay: var map = new BM