13

我正在集成谷歌地图 SDK。它一切正常。但是如何在第二个出现时删除特定的标记(针点)。(我没有使用 Mapkit)

我想要以下内容:

如果我点击地图,则现在在该位置生成一个标记针,如果我点击地图上的另一个位置,则会显示两个针,但我想删除旧的标记针。

我也用,

[self.mapView clear];

但很明显 GMSMapview 中的所有其他标记点。

以下是在 Map 上添加 pin 的代码:

            GMSMapView *mapView;
            GMSMarker *currLocMarker = [[GMSMarker alloc] init];
            currLocMarker.map  = nil;
            [currLocMarker setTitle:NSLocalizedString(@"current_location_title", nil)];
            currLocMarker.icon = [UIImage imageNamed:@"pin_fetch_location.png"];
            currLocMarker.position = CLLocationCoordinate2DMake(pCoordinate.latitude, pCoordinate.longitude);
            currLocMarker.map = self.mapView;

请帮我解决这个问题..!!

提前致谢..:)

4

9 回答 9

28

要从 GMSMapView 中删除特定引脚,请保留引脚的引用(如果有多个则使用数组),然后使用此代码

currLocMarker.map  = nil;

要从 GMSMapView 中删除包括引脚折线在内的所有内容,请使用此代码

[ _mapView clear];
于 2015-01-21T06:19:55.697 回答
2

我做了这样的:

GMSMarker *myMarker;

- (void)mapView:(GMSMapView *)mapView didTapAtCoordinate:(CLLocationCoordinate2D)coordinate
{
    [[NSOperationQueue mainQueue] addOperationWithBlock:^{
        if (myMarker) {
            myMarker.map = nil;
            myMarker = nil;
        }
        myMarker = [[GMSMarker alloc] init];
        myMarker.position = CLLocationCoordinate2DMake(coordinate.latitude, coordinate.longitude);
        myMarker.title = @"title";
        myMarker.map = mapView_;
    }];
}

对我来说效果很好!

于 2015-01-27T13:03:32.713 回答
2

这对我有用 -

func removeMarkers(mapView: GMSMapView){
    for (index, _) in markers.enumerate() {
        //print("Item \(index): \(element)")
                    self.markers[index].map = nil
    }
}

在哪里

    var markers = [GMSMarker]()

标记包含地图视图的所有标记覆盖

于 2016-01-06T04:13:43.373 回答
1

检查这个并在您的代码中尝试

删除 Google Maps sdk 中的标记

于 2014-01-18T07:03:28.637 回答
1

循环地图中的所有标记,您可以使用标题或片段来决定删除哪个标记

由于 map.markers 不再在 google map ios sdk 中使用,您需要有一个 nsmutablearray 来存储所有标记以用于循环目的

并且您可以使用标记的 userData,marker.userData,我更喜欢在标记中存储一个 nsdictionary 信息,以防止标题的重复名称。

干杯。

于 2014-05-03T05:56:36.360 回答
0

是的,我得到了那个解决方案。添加如下图钉:

- (void)mapView:(GMSMapView *)mapView didTapAtCoordinate:(CLLocationCoordinate2D)coordinates {

pCoordinate.latitude =coordinates.latitude;
pCoordinate.longitude =coordinates.longitude;

[[GMSGeocoder geocoder] reverseGeocodeCoordinate:CLLocationCoordinate2DMake(coordinates.latitude, coordinates.longitude) completionHandler:^(GMSReverseGeocodeResponse *resp, NSError *error)
                {
     [currLocMarker setTitle:NSLocalizedString(@"current_location_title", nil)];
     currLocMarker.icon = [UIImage imageNamed:@"pin.png"];
     currLocMarker.position = CLLocationCoordinate2DMake(coordinates.latitude,       coordinates.longitude);
     currLocMarker.map = self.mapView;} ] ;}

如果您在上面使用过,请删除以下行:

GMSMarker *currLocMarker = [[GMSMarker alloc] init];
于 2014-03-26T10:42:41.943 回答
0

如果您有不同的标记,并且您只想从地图中删除特定标记,那么您必须保留该标记对象。

say if you have 
var removableMarkers: [GMSMarker]?

you have to append those markers in the above array when adding markers to map

Now, when you want to remove those markers:
  _ = self.removableMarkers.map({
            $0.map = nil
        })
self.RemovableMarkers = []

而已!

于 2020-09-29T20:14:45.903 回答
0

迅速 5

func mapView(_ mapView: GMSMapView, didTap marker: GMSMarker) -> Bool
{
    let alertcontrolserver = UIAlertController.init(title : nil, message : "Are you sure you want to Remove ! ", preferredStyle: .alert)
        let okbtn = UIAlertAction(title: "Yes", style: .default, handler: { UIAlertAction in  marker.map = nil
             })
    let cancelbtn = UIAlertAction(title: "No", style: .default, handler: nil)
        alertcontrolserver.addAction(okbtn)
       alertcontrolserver.addAction(cancelbtn)
        self.present(alertcontrolserver, animated: true, completion: nil)
    return true
}
于 2019-11-26T10:19:16.643 回答
0

当您点击特定标记时,这将删除该标记

- (BOOL)mapView:(GMSMapView *)mapView didTapMarker:(GMSMarker *)marker {

    marker.map = nil;
    return YES;
}
于 2018-02-09T08:58:22.917 回答