スポンサーリンク

【Swift】mapviewで2点間に直線を引く方法。〜 線色、太さ調整 〜

Swift
スポンサーリンク

今回の記事は、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関連の記事をたくさん記載しているので気になる方はご参照ください。

本記事を読んでいただき感謝です。サイトを訪れていただいた方はプログラミング勉強中かと思いますのでプログラミング勉強のコツを合わせてご紹介。

スポンサーリンク
スポンサーリンク
スポンサーリンク

ブログに関しては500円程度かかりますが、それ以外は無料です。知識の吸収と並行してアウトプットは非常に効率が良いです。テックアカデミーに関しては講座レベルが高いにも関わらず、無料体験や人気口座も大幅値下げがあるので、重点的に学びたいものを無料体験してみてください。

転職時にも、エンジニアからテックアカデミー・Paizaは認知度が高いので、未経験入社採用を行う際履歴書で目に留まります。特にPaizaのスキルレベルA・SなどはIT業界でも評価されます。

テックアカデミー・Paizaの無料登録ができる期間中にぜひご利用してみてください。私も活用経験ありです。

Swift
スポンサーリンク
スポンサーリンク

コメント

タイトルとURLをコピーしました