iOS:在地图上显示基于json的不同引脚

时间:2014-07-20 03:26:43

标签: ios json annotations mapkit

我有一个json文件,在这个json中我有不同的纬度和经度和状态。我想检查一下我的状态,并根据我的地图上的lat和long show status pin。我的意思是如果我的状态是活动的:如果我的状态已过期,则为绿色引脚显示如果我的状态为机密,则为红色,显示灰色引脚。

这是我的json:

[
{
"status": "active",
"latitude": 56.715866,
"longitude": -118.281757
},
{
"status": "expired",
"latitude": 56.715860,
"longitude": -118.281757
},
{
"status": "confidential",
"latitude": 56.715111,
"longitude": -118.281117
 }]

我可以在我的日志上打印所有json这是我的方法:

-(void)getPin
{
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setURL:[NSURL URLWithString:BASED_URL]];
[request setHTTPMethod:@"GET"];
[request setValue:@"/json;charset=UTF-8" forHTTPHeaderField:@"Content-Type"];

NSURLResponse *response;
NSData *GETReply = [NSURLConnection sendSynchronousRequest:request 
returningResponse:&response error:nil];
NSString *theReply = [[NSString alloc] initWithBytes:[GETReply bytes] length:[GETReply
length] encoding: NSASCIIStringEncoding];



NSLog(@"Reply: %@", theReply);
}

我的xcode中有3针图像我也有mapView。我的问题是如何根据我在地图上的json显示这3个引脚?

提前致谢! 感谢您能否提供代码

1 个答案:

答案 0 :(得分:0)

我为你做了这个demo project

为了显示您自己的注释,您首先需要创建一个确认MKAnnotation协议的类。我们称这个班为Location。您需要将此类的实例添加到地图中,以告知地图注释的位置。您可以选择在此类中添加title和subtile,以告诉地图注释的标题和副标题。

@interface Location : NSObject<MKAnnotation>

@property (nonatomic, readonly) CLLocationCoordinate2D coordinate;
@property (nonatomic, readonly, copy) NSString *title;
@property (nonatomic, readonly, copy) NSString *subtitle;

- (instancetype)initWithCoordinate:(CLLocationCoordinate2D)coordinate title:(NSString *)title subTitle:(NSString *)subTitle;

@end

现在转到包含地图的视图控制器。在地图中创建并添加注释。另外,将地图的代理设置为self

Location * myLocation = [[Location alloc]initWithCoordinate:CLLocationCoordinate2DMake(56.715866, -118.281757) title:@"My Land" subTitle:@"haha~"];
[_mapView addAnnotation:myLocation];
_mapView.delegate = self;

控制器应向MKMapViewDelegate确认以显示自定义注释。告诉地图查看如何显示注释的方法是:

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id < MKAnnotation >)annotation
{
    MKAnnotationView * view = [[MKAnnotationView alloc]initWithAnnotation:annotation reuseIdentifier:@"Location"];
    view.image = [UIImage imageNamed:@"someImage"];
    view.canShowCallout = YES;
    return view;
}

您可以设置view.canShowCallout = YES;,这样当您触摸注释时,它会在annotation中显示标题和子标题。

如果您有多个注释,则可以方便地将属性@property (nonatomic, strong) UIImage * image添加到Location类中。哪个可以保存注释的图像,并在mapView:viewForAnnotation:设置view.image = annotation.image