【问题标题】:Create multiple markers using Google iOS SDK使用 Google iOS SDK 创建多个标记
【发布时间】:2016-09-24 22:39:56
【问题描述】:

我是 Swift 的新手。我在谷歌地图上获得了 2 个标记:

import UIKit
import GoogleMaps

class ViewController: UIViewController {

    // You don't need to modify the default init(nibName:bundle:) method.

    override func loadView() {
        let camera = GMSCameraPosition.cameraWithLatitude(37.0902, longitude: -95.7129, zoom: 3.0)
        let mapView = GMSMapView.mapWithFrame(CGRect.zero, camera: camera)
        mapView.myLocationEnabled = true
        view = mapView

        let state_marker = GMSMarker()
        state_marker.position = CLLocationCoordinate2D(latitude: 61.370716, longitude: -152.404419)
        state_marker.title = "Alaska"
        state_marker.snippet = "Hey, this is Alaska"
        state_marker.map = mapView

        let state_marker1 = GMSMarker()
        state_marker1.position = CLLocationCoordinate2D(latitude: 32.806671, longitude: -86.791130)
        state_marker1.title = "Alabama"
        state_marker1.snippet = "Hey, this is Alabama"
        state_marker1.map = mapView

    }
}

我需要为每个具有不同标题和 sn-p 的州在不同的纬度和经度上再添加 51 个标记。

我大概可以复制这个块 51 次,但是有没有办法优化这个代码?

【问题讨论】:

    标签: ios swift google-maps


    【解决方案1】:

    你应该创建一个这样的结构:

    struct State {
        let name: String
        let long: CLLocationDegrees
        let lat: CLLocationDegrees
    }
    

    然后在你的 VC 中创建这个结构的数组:

    let states = [
        State(name: "Alaska", long: -152.404419, lat: 61.370716),
        State(name: "Alabama", long: -86.791130, lat: 32.806671),
        // the other 51 states here...
    ]
    

    现在您可以遍历数组,在每次迭代中添加标记:

    for state in states {
        let state_marker = GMSMarker()
        state_marker.position = CLLocationCoordinate2D(latitude: state.lat, longitude: state.long)
        state_marker.title = state.name
        state_marker.snippet = "Hey, this is \(state.name)"
        state_marker.map = mapView
    }
    

    您可能还想添加一个字典,将状态名称存储为键,并将相应的GMSMarker 存储为值。这样,您可以稍后修改标记。

    var markerDict: [String: GMSMarker] = [:]
    
    override func loadView() {
    
        for state in states {
            let state_marker = GMSMarker()
            state_marker.position = CLLocationCoordinate2D(latitude: state.lat, longitude: state.long)
            state_marker.title = state.name
            state_marker.snippet = "Hey, this is \(state.name)"
            state_marker.map = mapView
            markerDict[state.name] = state_marker
        }
    
    }
    

    【讨论】:

    • 如果您想稍后访问标记(您可能会这样做),您可以使用字典来访问它:markerDict["Alaska"]。如果您确定不会访问标记,请忽略它。 @当
    • for state in states { let state_marker = GMSMarker() state_marker.position = CLLocationCoordinate2D(latitude: state.lat, longitude: state.long) state_marker.title = state.name state_marker.sn-p = “嘿,这是(state.name)” state_marker.map = mapView } 我在 viewDidLoad 中使用。问题是地图上显示“阿拉巴马”,但阿拉斯加没有显示。请指导我。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-11
    • 2017-07-30
    • 2012-01-09
    • 2016-02-08
    • 1970-01-01
    • 1970-01-01
    • 2017-05-22
    相关资源
    最近更新 更多