如何创建自己的GMSMarker? (GoogleMaps,iOS) – 斯威夫特

我想创建自己的标记,因为我需要跟踪有关它们的额外信息(例如,添加日期,标记ID)…

所以我创建了另一个类,如下所示:

class myMarker: GMSMarker { var markerID: Int var addedDate: NSDate } 

但我不知道下一步该做什么…我应该创建一个“init”方法来填充我的markerId和addedDate吗? 或者我应该覆盖GMSMarker构造函数(它不是“init”)它可以

  class myMarker: GMSMarker { var markerID: Int var addedDate: NSDate var myMarker: GMSMarker init(marID: Int, date: NSDate, GMSMarker: markerwithoutDateNorId){ self.markerID = marID self.addedDate = date self.myMarker = markerwithoutDateNorId } } 

我真的不知道如何实现这一点。 也许我甚至不需要实现构造函数,但使用GMSMarker构造函数(我相信我inheritance了)然后使用set方法设置标记ID和日期?

或者我可以覆盖GMSMarker构造函数,然后使用super(what-is-expecting-here)然后我会添加日期和标记ID。

我真的需要创建我自己的标记类型,因为我需要跟踪这些事情…例如,我希望将来删除所有超过1周的标记…如果我不喜欢跟踪标记日期,这是不可能的。

我真的需要Swift和编程。 我真的很感谢你的帮助:)

还有另一种方法,GMSMarker具有userData属性,可以接受AnyObject。

 var info: Dictionary? info[“markerID”] = 0 info[“addedDate”] = NSDate() let marker = GMSMarker() marker.position = CLLocationCoordinate2D(latitude:latitude, longitude:longitude) marker.map = nil marker.tracksInfoWindowChanges = false marker.map = self.mapView marker.userData = info 

根据此文档 ,创建GMSMarker对象以添加包含positiontitle的标记,并设置其map 。 下面是一个演示如何将标记添加到现有GMSMapView对象的示例。 标记在坐标10,10处创建,并在单击时在信息窗口中显示字符串“Hello world”。

 let position = CLLocationCoordinate2DMake(10, 10) let marker = GMSMarker(position: position) marker.title = "Hello World" marker.map = mapView 

在本教程中,Google Maps SDK中的标记是GMSMarker类的对象。 初始化此类对象时,必须指定以CLLocationCoordinate2D类型表示的经度和纬度。

 let coordinate = CLLocationCoordinate2D(latitude: self.mapTasks.fetchedAddressLatitude, longitude: self.mapTasks.fetchedAddressLongitude) 

初始化标记对象并且地图SDK知道放置它的位置后,则需要指定要添加标记的地图对象。

检查这些相关的线程:

  • Swift – 如何在Google Maps SDK中为标记添加自定义字段?
  • 如何在swift的谷歌地图sdk for ios中为地图视图添加标记

希望这可以帮助!

扩展GMSMarker类

 extension GMSMarker{ fileprivate struct AssociatedKeys{ static var anyExtraData : AnyObject? } var anyExtraData: AnyObject? { get { return objc_getAssociatedObject(self, &AssociatedKeys.anyExtraData) as? AnyObject) } set (newValue){ if let newValue = newValue { objc_setAssociatedObject( self, &AssociatedKeys.anyExtraData, newValue as AnyObject?, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC) } } } } 

然后,您可以在GMSMarker对象中使用它:

 let marker = GMSMarker() marker.iconView = //Your UIView to resemble the new custom Marker. marker.anyExtraData = //AnyObject 

//来自可变数组的地图上的过去标记我们必须用于声明

//创建标记让标记= GMSMarker()

因为我在0 ..

// possitioning marker,here mark,mrk,name是mutable arrays marker.position = CLLocationCoordinate2D(latitude:self.mark [i] as!CLLocationDegrees,longitude:self.mrk [i] as!CLLocationDegrees)//可变数组标记。 title =“”marker.snippet = self.name [i] as! String // mutable array marker.map = self.mapView}