Отображение нескольких маркеров на карте Google в Objective C

Как я могу отобразить несколько маркеров на карте Google в iOS? Я использовал следующий подход, но он не сработал.

for (int i = 0; i < [array count]; i++)
{
     pointsToUse[i] = CLLocationCoordinate2DMake([[[[array objectAtIndex:0]  componentsSeparatedByString:@","] objectAtIndex:0] floatValue],[[[[array objectAtIndex:0]  componentsSeparatedByString:@","] objectAtIndex:1] floatValue]);
     [_map animateToLocation:pointsToUse[i]];
      GMSMarkerOptions *options = [[GMSMarkerOptions alloc] init];
      options.position = pointsToUse[i];
    [_map animateToLocation:pointsToUse[i]];
    [_map addMarkerWithOptions:options];
}

person Bryanyan    schedule 25.02.2013    source источник


Ответы (4)


Вы используете [array objectAtIndex:0] (в двух местах), когда я думаю, что вам, вероятно, следует использовать [array objectAtIndex:i]?

Кроме того, вам, вероятно, не нужны вызовы animateToLocation?

person Saxon Druce    schedule 25.02.2013

Я попробовал ваш код. Кажется, это работает нормально. Просто удалите объект с индексом 0 после передачи его значений в pointsToUse.

NSMutableArray *array = [NSMutableArray arrayWithObjects:@"12.981902,80.266333",@"12.982902,80.266363", nil];

CLLocationCoordinate2D pointsToUse[5];

for (int i = 0; i < [array Size]; i++)
{
    pointsToUse[i] = CLLocationCoordinate2DMake([[[[array objectAtIndex:0]  componentsSeparatedByString:@","] objectAtIndex:0] floatValue],[[[[array objectAtIndex:0]  componentsSeparatedByString:@","] objectAtIndex:1] floatValue]);

      [array removeObjectAtIndex:0];

    GMSMarkerOptions *options = [[GMSMarkerOptions alloc] init];
    options.position = pointsToUse[i];
    [mapView_ animateToLocation:pointsToUse[i]];
    [mapView_ addMarkerWithOptions:options];
}
person Manoj    schedule 26.02.2013

Попробуй это:

-(void)plotMutliplePinsonMap
{
    mapView_ = [[GMSMapView alloc]initWithFrame:CGRectMake(0, 96, 320, 450)];
    for(int i=0;i<[arrTobeShown count];i++)
    {
        double_lat = [[[arrTobeShown objectAtIndex:i]valueForKey:@"latitude"] doubleValue];
        double_long = [[[arrTobeShown objectAtIndex:i]valueForKey:@"longitude"] doubleValue];
        GMSMarker *mkr = [[GMSMarker alloc] init];
        if (double_lat !=0 && double_long!=0) 
        {        
            [mkr setPosition:CLLocationCoordinate2DMake(double_lat, double_long)];
            [mkr setTitle:[[arrTobeShown objectAtIndex:i] valueForKey:@"name"]];
            [mkr setSnippet:[[arrTobeShown objectAtIndex:i] valueForKey:@"address"]];
            [mkr setMap:mapView_];

            GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:double_lat longitude:double_long zoom:5];
        mapView_.camera=camera;
        }
    }
    [self.view addSubview:mapView_];
    [mapView_ setHidden:YES];
    [self.view layoutIfNeeded];
}
person Hemant Singh Rathore    schedule 23.09.2013

Да вы оба правы. В соответствии с вашими предложениями я изменил код, и он работает. Но проблема в том, что я ставлю зум, а зум фиксируется. Если два местоположения находятся далеко, я не вижу оба местоположения на одном экране (мне нужно сжать пальцы, чтобы увидеть оба). Как я могу видеть оба места одновременно? Мой код показан ниже.

-(void) displayMapwithPositionfortheArray:(NSMutableArray*) array
{
    CLLocationCoordinate2D firstPoint = CLLocationCoordinate2DMake([[[[array objectAtIndex:0]  componentsSeparatedByString:@","] objectAtIndex:0] floatValue],[[[[array objectAtIndex:0]  componentsSeparatedByString:@","] objectAtIndex:1] floatValue]);
    GMSCameraPosition *currloc = [GMSCameraPosition cameraWithLatitude:firstPoint.latitude
                                                         longitude:firstPoint.longitude
                                                              zoom:8
                                                           bearing:0
                                                      viewingAngle:45];


    _map = [GMSMapView mapWithFrame:CGRectZero camera:currloc];
    _map.myLocationEnabled = YES;
    _map.frame = CGRectMake(0, heightOffset, self.view.frame.size.width, self.view.frame.size.height - heightOffset);
    [self.view addSubview:_map];

    CLLocationCoordinate2D pointsToUse[[array count]];
    for (int i = 0; i < [array count]; i++)
    {
          pointsToUse[i] = CLLocationCoordinate2DMake([[[[array objectAtIndex:i]  componentsSeparatedByString:@","] objectAtIndex:0] floatValue],[[[[array objectAtIndex:i]  componentsSeparatedByString:@","] objectAtIndex:1] floatValue]);

          GMSMarkerOptions *options = [[GMSMarkerOptions alloc] init];
          options.position = pointsToUse[i];
          [_map addMarkerWithOptions:options];
    }
}
person Bryanyan    schedule 26.02.2013
comment
Привет @Bryanyan, я только что увидел этот пост. Вы можете настроить свою камеру для покрытия ограничивающей области (т. е. всех ваших маркеров), используя этот код здесь: stackoverflow.com/questions/15040409/ - person Saxon Druce; 22.03.2013