Swift

Swift:地図の検索

iOSのサンプルはいっぱいあったのですが、OS Xが見あたりませんでした。

追記(1/11/2016):検索結果がnilでないことを確認しないと落ちます。赤い文字の箇所。

見よう見まねでやって、何とかなりました。最初の検索結果だけ使えばいいようなので、ほかは採用せず、またピンを立てる必要もなかったので、このようにしました。ExecSetBaseLocationでは、座標の更新をしているだけです(スクリーンショットを参照)。サンプルコードとしては、ExecSetBaseLocationを削除し、この箇所で座標をプリントするようにすればいいです。

参照:
1. 正ジオコーディング
2. swiftで現在地と目的地を結ぶ経路を地図に表示する

@IBOutlet var   zOutMapSearch:NSSearchField!
@IBOutlet var   zOutMap:MKMapView!

@IBAction func ExecIBMapSearch(sender : AnyObject) {//地図を検索
if zOutMapSearch.stringValue.characters.count > 0 { ExecMapSearch(zOutMapSearch.stringValue ) }
}

func ExecMapSearch(pKeyword:String) {//検索とロケーション変更
var wBool:Bool  = true//最初のヒットした座標を表示させる。
let wGeocoder = CLGeocoder()// 目的地の文字列から座標検索
zOutMapSearch.resignFirstResponder() //地図を検索する。
var wLati:Double = 0   //緯度
var wLong:Double = 0 //経度

wGeocoder.geocodeAddressString(pKeyword, completionHandler: { (wPlaceArray, error) -> Void in
if wPlaceArray != nil {

for wPlace in wPlaceArray!
let wAddr: CLLocation = wPlace.location!
wLati       = wAddr.coordinate.latitude //緯度
wLong       = wAddr.coordinate.longitude//経度
if wBool == true {
wBool   = false
break
 }
else { }
} else { }
 }   

if wBool == false {
self.ExecSetBaseLocation(wLati, pLong:wLong, pKeyword:pKeyword)
let wAddr = CLLocationCoordinate2DMake(wLati, wLong)
self.zOutMap.setCenterCoordinate(wAddr, animated:true)
 }  
})   
}

Screenshot 2016-01-08 02.19.34Screenshot 2016-01-08 02.21.05

Categories: Swift, 技術