私はグーグルマップSDKを統合しています。そのすべてが正常に動作します。しかし、2番目が表示されたときに特定のマーカー(ピンポイント)を削除する方法(私はMapkitを使用していません)
私は以下が欲しい:
地図をタップすると、その場所に1つのマーカーピンが生成されます。地図上の別の場所をタップすると、2つのピンが表示されますが、古いマーカーピンを削除したいと思います。
私も使っています、
[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;
この問題を解決するのを手伝ってください.. !!
前もって感謝します..:)
はい、私はその解決策を得ました。次のようにピンを追加します。
- (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];
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_;
}];
}
そして私のためにうまくいきました!
これをチェックして、コードで試してください
マップ内のすべてのマーカーをループし、タイトルまたはスニペットを使用して、削除するマーカーを決定できます
map.markersはgooglemap ios sdkで使用されなくなったため、ループの目的ですべてのマーカーを格納するためにnsmutablearrayが必要です。
また、マーカーのuserData、marker.userDataを利用できます。これは、タイトルの名前が重複しないようにするために、マーカーに辞書情報を格納することを好みます。
乾杯。
これは私のために働いた-
func removeMarkers(mapView: GMSMapView){
for (index, _) in markers.enumerate() {
//print("Item \(index): \(element)")
self.markers[index].map = nil
}
}
どこ
var markers = [GMSMarker]()
マーカーには、mapViewのすべてのマーカーオーバーレイが含まれます
特定のマーカーをタップすると、そのマーカーが削除されます
- (BOOL)mapView:(GMSMapView *)mapView didTapMarker:(GMSMarker *)marker {
marker.map = nil;
return YES;
}
スウィフト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
}