谷歌地图标记不删除iOS

时间:2013-05-15 07:58:05

标签: iphone ios objective-c google-maps-sdk-ios

我正在运行一个线程来每10秒获取一次驱动程序位置,并希望从地图中删除添加的标记,但它不起作用..

我的代码:

-(void)APiResponse:(id)returnJson
{        
        [googleMapsDriverPin setMap:nil];
        googleMapsDriverPin = nil;

        NSMutableArray *driverPins = [[NSMutableArray alloc]init];
        for (int x = 0; x < [[returnJson valueForKey:@"drivers"] count]; x++) {
            CLLocation *driverLocations = [[CLLocation alloc]initWithLatitude:[[[[returnJson valueForKey:@"drivers"] objectAtIndex:x] valueForKey:@"driver_latitude"] doubleValue] longitude:[[[[detail valueForKey:@"drivers"] objectAtIndex:x] valueForKey:@"driver_longitude"] doubleValue]];
            [driverPins addObject:driverLocations];
        }

        for (CLLocation *newLocation in driverPins) {
            googleMapsDriverPin = [[GMSMarker alloc] init];
            [googleMapsDriverPin setPosition:newLocation.coordinate];
            [googleMapsDriverPin setAnimated:YES];
            [googleMapsDriverPin setTitle:@"title"];
            [googleMapsDriverPin setSnippet:@"snippet"];
            [googleMapsDriverPin setIcon:[GMSMarker markerImageWithColor:[UIColor blackColor]]];
            [googleMapsDriverPin setMap:googleMaps];
         }
}

它只是每隔10秒添加和添加而不是删除,请帮忙! 谢谢!

5 个答案:

答案 0 :(得分:5)

它是一种快速而又脏的选项,但是如果你想这样,GMSMarker有一个userData属性,你可以使用它来标记驱动程序引脚

- (void)apiResponse:(id)returnJson
{        
    for (GMSMarker *pin in self.googleMaps.markers) {
        if (pin.userData == @"Driver Pin"){ 
            pin.map = nil; 
        }
    }

    ...

    for (CLLocation *newLocation in driverPins) {
        googleMapsDriverPin = [[GMSMarker alloc] init];
        ...
        [googleMapsDriverPin setUserData:@"Driver Pin"];
    }
}

<强>更新

[self.googleMapsView clear];

答案 1 :(得分:2)

在基于引脚ID的基础上,您还可以删除引脚。 这里deletePinId整数用于选定的引脚ID。

for(GMSMarker *pin in self.mapView_.markers) {
NSLog(@"pin.userData : %@",pin.userData);
int pinId1 = [[pin.userData valueForKey:@"pin_id"] integerValue];
if(deltePinId == pinId1 ){
    pin.map = nil;
 }

}

答案 2 :(得分:1)

你目前只存储一个标记,但你想添加N个标记 - 所以(正如saxon所说)你需要一个数组来保存所有的引脚:)

@interface YouClass

...

@property(nonatomic, retain) NSMutableArray *googleMapsDriverPins;
@end

@implementation YourClass

...

-(void)APiResponse:(id)returnJson
{    
    for(GMSMarker *pin in self.googleMapsDriverPins) {
        pin.map = nil;
    }    
    self.googleMapsDriverPins = nil;

    NSMutableArray *driverPins = [[NSMutableArray alloc]init];
    for (int x = 0; x < [[returnJson valueForKey:@"drivers"] count]; x++) {
        CLLocation *driverLocations = [[CLLocation alloc]initWithLatitude:[[[[returnJson valueForKey:@"drivers"] objectAtIndex:x] valueForKey:@"driver_latitude"] doubleValue] longitude:[[[[detail valueForKey:@"drivers"] objectAtIndex:x] valueForKey:@"driver_longitude"] doubleValue]];
        [driverPins addObject:driverLocations];
    }

    self.googleMapsDriverPins = [NSMutableArray arrayWithCapacity:driverPins.count];
    for (CLLocation *newLocation in driverPins) {
        GMSMarker *googleMapsDriverPin = [[GMSMarker alloc] init];
        [googleMapsDriverPin setPosition:newLocation.coordinate];
        [googleMapsDriverPin setAnimated:YES];
        [googleMapsDriverPin setTitle:@"title"];
        [googleMapsDriverPin setSnippet:@"snippet"];
        [googleMapsDriverPin setIcon:[GMSMarker markerImageWithColor:[UIColor blackColor]]];
        [googleMapsDriverPin setMap:googleMaps];
        [self.googleMapsDriverPins addObject:googleMapsDriverPin];
     }
 }
 @end

答案 3 :(得分:0)

看起来你有一个循环添加多个驱动程序,每个驱动程序都分配给成员变量googleMapsDriverPin。然后下次删除googleMapsDriverPin - 但这只是你添加的最后一个引脚,而不是所有引脚。

为此,您需要将循环中的每个标记添加到数组中,然后在下次更新时从地图中删除所有标记。

答案 4 :(得分:0)

在Swift 2中:

为地图创建一个插座:

@IBOutlet weak var mapView: GMSMapView!

创建一个数组来存储所有标记

var markers = [GMSMarker]()

创建这样的标记:

    func funcName() {    
        let position = CLLocationCoordinate2DMake(lat, lon)
        let marker = GMSMarker(position: position)

        for pin: GMSMarker in self.markers {
             if pin.userData as! String == "from" {
                   pin.map = nil
             }
        }

        marker.icon = UIImage(named: "navigation-red")
        marker.userData = "from"
        marker.map = self.mapView
        self.markers.append(marker)
    }

您可以将userData属性设置为您想要的任何内容,然后使用该字符串删除该标记。当执行funcName函数时,将从地图中删除userData为“from”的所有标记。让我知道您是否有任何疑问。