今回の記事は、mapviewでルート表示を行う際になどに2点間に直線をひく処理方法をご紹介します。
処理としては非常に簡単で、delegateによって直線処理の関数を回すのみとなっております。
Xcode側の設定は以前のmapview関連の記事を参照してまずは地図を表示させ、2点間にピンを配置するところまでは準備ください。
参考記事。
では地図を表示までは完成したということで話を進めていきます。
mapviewで2点間に直線をひく方法
2点間の座標同士をせんで結ぶSwiftコードは下記のようになっているはずです。
import UIKit
import MapKit
import CoreLocation
class customPin: NSObject, MKAnnotation {
var coordinate: CLLocationCoordinate2D
var title: String?
var subtitle: String?
init(pinTitle:String, pinSubTitle:String, location:CLLocationCoordinate2D) {
self.title = pinTitle
self.subtitle = pinSubTitle
self.coordinate = location
}
}
class MapViewController: UIViewController,CLLocationManagerDelegate,MKMapViewDelegate {
@IBOutlet weak var map: MKMapView!
var locationManager: CLLocationManager!
let annotation = MKPointAnnotation()
override func viewDidLoad() {
super.viewDidLoad()
map.setRegion(region,animated:true)
// ロケーションマネージャーのセットアップ
locationManager = CLLocationManager()
locationManager.delegate = self
locationManager!.requestWhenInUseAuthorization()
// 現在地取得、ピンを生成、タイトル・位置情報をセット、ピンを表示
let coordinate = map.userLocation.coordinate//
let pin = MKPointAnnotation()
let spot1 = CLLocationCoordinate2D(latitude:45, longitude: 135)
let spot2 = CLLocationCoordinate2D(latitude:44, longitude: 134)
let my_Pin = customPin(pinTitle:"1",pinSubTitle:"11",location:spot1)
let to_Pin = customPin(pinTitle:"2",pinSubTitle:"22",location:spot2)
self.map.addAnnotation(my_Pin)
self.map.addAnnotation(to_Pin)
map.delegate = self
}
}
//ルートの色をつけるメソッド
func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {
let renderer = MKPolylineRenderer(overlay: overlay)
renderer.strokeColor = UIColor.init(red:0.56, green: 0.77, blue: 0.12, alpha: 1.0)
renderer.lineWidth = 4.0
return renderer
}
func locationManager(_ manager: CLLocationManager,didChangeAuthorization status: CLAuthorizationStatus) {// 許可を求めるためのdelegateメソッド
switch status {
case .notDetermined:// 許可されてない場合
manager.requestWhenInUseAuthorization()// 許可を求める
case .restricted, .denied:// 拒否されてる場合
break// 何もしない
case .authorizedAlways, .authorizedWhenInUse: // 許可されている場合
manager.startUpdatingLocation()// 現在地の取得を開始
break
default:
break
}
}
}
解説を行っていきます。
//ルートの色をつけるメソッド
func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {
let renderer = MKPolylineRenderer(overlay: overlay)
renderer.strokeColor = UIColor.init(red:0.56, green: 0.77, blue: 0.12, alpha: 1.0)
renderer.lineWidth = 4.0
return renderer
}
この部分の関数がdelegetaの処理として回されます。線に関しては通常のオブジェクトのように色を変換してりすることができますのでその辺りを調節して書いてみてください。
今回の記事は以上です。これは私の作成したアプリ内の一部を改変しているのでまれにエラーが亜hっせいする箇所があるかもしれませんが、皆様の現在作っているmapviewコードに簡単にいうと上記の関数を付け加えれば完了します。他にもSwiftのmapview関連の記事をたくさん記載しているので気になる方はご参照ください。
コメント