-2

大家好,我有一个地图视图,我必须根据纬度和经度在地图上放置图钉地图上应仅通过 Web 服务反映在 Web 应用程序中的任何图钉。

4

2 回答 2

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;
}
于 2012-05-23T11:58:07.650 回答
0

向地图添加注释的清单

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

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

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

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

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

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

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

请参阅此处以获取完整参考。

于 2012-05-23T11:41:37.367 回答