谷歌地图:如何向谷歌地图添加多个标记

时间:2017-02-04 18:52:53

标签: google-maps swift3 google-places-api

我搜索了很多但是没有得到任何关于Swift 3上下文问题的确切解决方案。我需要在我的应用程序中绘制多个标记(GMSMarker类型)。我的代码如下。

var markerDict: [Int: GMSMarker] = [:]
var custlatt = [13.093781,13.034893,13.034893]
var custlong = [77.576284,77.596372, 77.596372]

override func viewDidLoad() {
    super.viewDidLoad()

    for i in 0...2{
        let camera = GMSCameraPosition.camera(withLatitude:custlatt[i], longitude: custlong[i], zoom: 10.0)
        let mapView = GMSMapView.map(withFrame: CGRect.zero, camera: camera)
        view = mapView

        markerDict[i] = GMSMarker()
        markerDict[i]?.position = CLLocationCoordinate2D(latitude:custlatt[i], longitude: custlong[i])
        markerDict[i]?.title = "NAGAVARA"
        markerDict[i]?.snippet = "Bengaluru"
        markerDict[i]?.map = mapView
    }

即使我使用标记数组,也只标记了一个位置(custlatt的最后一个值,custlong数组)。任何人都可以建议我哪里出错了吗?或者还有其他实施方法吗?

2 个答案:

答案 0 :(得分:0)

你在哪里

markerDict[0] = GMSMarker()   

不应该

markerDict[i] = GMSMarker()

为此以及接下来的4行?

我想你只看到最后一个标记的原因是之前的标记被垃圾收集,因为你在循环的下一次迭代中覆盖它们的唯一引用。

答案 1 :(得分:0)

在for循环之外实例化GmsMapview解决你的问题!!!

class MapVC:UIViewController{

    var markerDict: [String: GMSMarker] = [:]
    var custlatt = [13.093781,13.034893,13.034893]
    var custlong = [77.576284,77.596372, 77.596372]
    var mapView:GMSMapView!

  override func viewDidLoad() {
    super.viewDidLoad()
    mapView = GMSMapView()
    mapView.frame = self.view.frame
    setupViews()
    for (i, element) in (["first","second","third"]).enumerated(){
        let camera = GMSCameraPosition.camera(withLatitude:custlatt[i], longitude: custlong[i], zoom: 10.0)
        mapView.camera = camera

        markerDict[element] = GMSMarker()
        markerDict[element]?.position = CLLocationCoordinate2D(latitude:custlatt[i], longitude: custlong[i])
        markerDict[element]?.title = element
        markerDict[element]?.snippet = element
        markerDict[element]?.map = mapView
}
    }