使用ios中的Google Map sdk从GMSMapview中删除特定的GMSMarker
我正在整合谷歌地图sdk。 一切正常。 但是当第二个出现时如何删除特定标记(Pin Point)。(我不使用Mapkit)
我想要以下内容:
如果我点击地图然后现在在该位置生成一个标记引脚,如果我点击地图上的另一个位置然后显示两个引脚但我想要移除旧的标记引脚。
我也用,
[self.mapView clear];
但很明显GMSMapview中的所有其他标记点。
以下是在地图上添加图钉的代码:
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;
请帮我解决这个问题.. !!
提前致谢..:)
要从GMSMapView中删除特定引脚,请保留引脚引用(如果有多个则使用数组),然后使用此代码
currLocMarker.map = nil;
要从GMSMapView中删除包括引脚多边形线在内的所有内容,请使用此代码
[ _mapView clear];
我是这样做的:
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_; }]; }
并为我工作得很好!
检查这个并在您的代码中尝试
在Google Maps sdk中删除标记
这对我有用 –
func removeMarkers(mapView: GMSMapView){ for (index, _) in markers.enumerate() { //print("Item \(index): \(element)") self.markers[index].map = nil } }
哪里
var markers = [GMSMarker]()
markers包含mapView的所有标记叠加
是的,我得到了解决方案。 添加如下所示的引脚:
- (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];
循环地图中的所有标记,您可以使用标题或代码段来决定删除哪个标记
由于map.markers不再用于谷歌地图ios sdk,你需要有一个nsmutablearray来存储所有标记用于循环目的
并且您可以使用标记的userData,marker.userData,我更喜欢在标记中存储nsdictionary信息,以防止重复的标题名称。
干杯。
当您点击特定标记时,将删除该标记
- (BOOL)mapView:(GMSMapView *)mapView didTapMarker:(GMSMarker *)marker { marker.map = nil; return YES; }