2017-05-27 57 views
0

因此,我試圖使用MapKit將一系列點放入地圖中。最後,我將從csv獲取數據點列表,並將它們加載到位置類中,然後將它們從類中讀取爲MapView註釋。這個工作在這裏單獨繪製2點手動...但我不知道如何正確加載和訪問許多項目的位置類(例如10個位置點)快速寫入和訪問類對象

這是我的班級文件

import Foundation 
import MapKit 

class Location: NSObject, MKAnnotation{ 
    let title: String? 
    let locationName: String 
    let discipline: String 
    let coordinate: CLLocationCoordinate2D 

    init(title: String, locationName: String, lat: String, lon: String){ 
     self.title = title 
     self.locationName = locationName 
     let latDouble = (lat as NSString).doubleValue 
     let lonDouble = (lon as NSString).doubleValue 
     let latlong = CLLocationCoordinate2D(latitude: latDouble, longitude: lonDouble) 
     self.discipline = locationName 
     self.coordinate = latlong 
     super.init() 
    } 
} 

這裏是ViewController.swift

import UIKit 
import MapKit 

class ViewController: UIViewController, MKMapViewDelegate { 

    //var stops = TransitStop[]() 
    let initialLocation = CLLocation(latitude: 41.880632, longitude: -87.623277) 
    @IBOutlet weak var mapView: MKMapView! 
    let regionRadius: CLLocationDistance = 1000 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     let initial = Location(title: "YOU", locationName: "are here", lat: "41.880632", lon: "-87.623277") 
     let firstStop = Location(title: "ashland", locationName: "ashland", lat: "41.88574", lon: "-87.627835")// Do any additional setup after loading the view, typically from a nib. 
     centerMapOnLocation(location: initialLocation) 

     mapView.addAnnotation(initial) 
     mapView.addAnnotation(firstStop) 
    } 

    func centerMapOnLocation(location: CLLocation) { 
     let coordinateRegion = MKCoordinateRegionMakeWithDistance(location.coordinate, regionRadius * 2.0, regionRadius * 2.0) 
     mapView.setRegion(coordinateRegion, animated: true) 
    } 
} 
+0

我假設你會從你的csv獲取所有必要的信息,包括lat,long和位置的標題。
將所有項目從csv獲取到模型對象數組,然後循環遍歷元素,並從數組值中初始化您的'Location'對象並將它們添加爲註釋。 –

+0

概念上我明白這是我想要做的。但我想我沒有這樣做的正確語法。你能提供一個基於這個代碼的例子嗎? – Lew

回答

0

嘗試是這樣的:

var locationArray: [Location] = [] 
    for line in csvString{ 
     let values:[String] = line.components(separatedBy: ",") 
     let title = values[0] 
     let locationName = values[1] 
     let lat = values[2] 
     let lng = values[3] 

     let latD: Double = Double(lat) 
     let lngD: Double = Double(lng) 

     let location = Location(title: title, locationName: locationName, lat: latD, lng: lngD) 
     locationArray.append(location) 
    } 
    centerMapOnLocation(location: initialLocation) 

    addLocationsToMap(locationArray: locationArray) 

確保在執行之前對值進行驗證(Double)。 然後你就可以讀取該位置與此功能的地圖:

func addLocationsToMap(locationArray: [Location]){ 
    for location in locationArray { 
     mapView.addAnnotation(location) 
    } 
} 

注:我實現了OP並不需要明確定義的變量。我只是認爲這會更容易理解。

我認爲csv值可以從數組中讀取,並且可以很好地定義'title','loacationName'的csv文件中值的位置。

+0

好的,我會接受這個答案,這部分經歷了好的,但點沒有添加到地圖。我認爲我的Class文件存在一些問題,或者我如何格式化或訪問它。 – Lew

+0

檢查CSV文件的格式並確保您的數據(標題,位置,緯度,lng)在您期望的位置,並將值[x]分配給相應的變量。我現在看到你在'Location'類中進行了'Double'的轉換,所以你不需要在我演示的地方進行。確定lat和lng值不會被切換。如果您需要任何進一步的幫助,請告訴我。你可以發佈一個csv文件的例子,我們可以從那裏去。 – Barns