关于应该在iphone中动态显示的地图引脚点

时间:2012-05-23 11:27:44

标签: iphone web-services map

大家好我有一个mapview,我必须根据纬度和经度在地图上放置引脚我曾经从网络服务中获取它可以任何人帮助我如何获取并在地图上绘制它,如果我已经在地图上绘制了任何应该通过网络服务在Web应用程序中反映的图钉。

2 个答案:

答案 0 :(得分:0)

向地图添加注释的核对表

在基于地图的应用程序中实现和使用注释的步骤如下所示。这些步骤假定您的应用程序在其界面的某处包含MKMapView对象。

1。使用以下选项之一定义适当的注释对象:

使用 MKPointAnnotation 类来实现简单的注释。此类注释包含用于指定要在注释的屏幕标注气泡中显示的标题和字幕字符串的属性。 (OR) 定义符合MKAnnotation协议的自定义对象,如“定义自定义注释对象”中所述。这种类型的注释可以存储您想要的任何类型的数据。

2. 定义注释视图以在屏幕上显示数据。如何定义注释视图取决于您的需求,可能是以下之一:

如果注释可以由静态图像表示,则创建MKAnnotationView类的实例并将图像分配给其image属性;请参阅“使用标准注释视图”。 (OR) 如果要使用标准引脚注释,请创建 MKPinAnnotationView 类的实例;请参阅“使用标准注释视图”。 如果静态图像不足以表示注释,则子类MKAnnotationView并实现呈现它所需的自定义绘图代码。

3. 在地图视图委托中实施 mapView:viewForAnnotation:方法。 如果现有注释视图存在或创建新注释视图,则此方法的实现应该将其取列。如果应用程序支持多种类型的注释,则必须在此方法中包含逻辑,以便为提供的注释对象创建适当类型的视图。

4. 使用addAnnotation:或addAnnotations:方法将注释对象添加到地图视图。

请参阅HERE完整参考。

答案 1 :(得分:0)

尝试以下代码: - 在storeListArr中存储来自Web服务的值

-(void)loadingMap
{
    [self.mapView setMapType:MKMapTypeStandard];
    [self.mapView setZoomEnabled:YES];
    [self.mapView setScrollEnabled:YES];

    NSLog(@"storeListArr = %@",storeListArr);

    for(int i=0; i<[storeListArr count];i++)
    {
        MKCoordinateRegion region = { {0.0, 0.0 }, { 0.0, 0.0 } };

        region.center.latitude = [[[storeListArr objectAtIndex:0] objectForKey:@"lat"] floatValue];
        region.center.longitude = [[[storeListArr objectAtIndex:0] objectForKey:@"long"] floatValue];
        region.span.longitudeDelta = .05f;
        region.span.latitudeDelta =  .05f;

        [self.mapView setRegion: region    animated:YES];

        MyAnnotations *ann = [[MyAnnotations alloc] init];
        NSString *str=[[storeListArr objectAtIndex:i] objectForKey:@"store_name"];
         NSLog(@"Address %@",storeAddress);

        ann.title = str;
        ann.coordinate = region.center;
        [self.mapView addAnnotation:ann];
    }

    [self.mapView setDelegate:self];
}

用于呼出

- (MKAnnotationView *)mapView:(MKMapView *)theMapView viewForAnnotation:(id <MKAnnotation>)annotation
{  
     NSLog(@"MKAnnotationView");
    MKPinAnnotationView *pinView = nil;

    if(annotation != mapView.userLocation)
    {
        static NSString *defaultPinID = @"com.invasivecode.pin";
        pinView = (MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:defaultPinID];

        if ( pinView == nil )

        pinView = [[[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:defaultPinID] autorelease];
        pinView.canShowCallout = YES;
        UIImage *flagImage = [UIImage imageNamed:@"MapPin.png"];
        pinView.image = flagImage;
        pinView.opaque = NO;

        UIButton *rightButton = [[UIButton alloc]initWithFrame:CGRectMake(0.0f,0.0f,28.0f,30.0f)];
        [rightButton setImage:[UIImage imageNamed:@"MapArrow"] forState:UIControlStateNormal];

        for (int i =0 ; i< [storeListArr count]; i++) 
        {

            if ([[[storeListArr objectAtIndex:i] objectForKey:@"lat"]  floatValue] == pinView.annotation.coordinate.latitude) 
            {
                UIImageView *img = [[UIImageView alloc]initWithFrame:CGRectMake(0.0f, 0.0f, 30.0f, 30.0f)];
                if([[storeListArr objectAtIndex:i] objectForKey:@"imageUrl"])
                {
                [img setImage:[[storeListArr objectAtIndex:i] objectForKey:@"imageUrl"]];

                }
                pinView.leftCalloutAccessoryView =img;


                [rightButton addTarget:self
                                action:@selector(showStoreDetail:)
                      forControlEvents:UIControlEventTouchUpInside];
                pinView.rightCalloutAccessoryView = rightButton;
            }
        }

    }
    else
        [mapView.userLocation setTitle:@"Current Location"];

       return pinView;
}