【Swiftui】マップを表示したい(macos)
2023-07-16
Macos : 13.4.1(c)
Xcode : 14.3.1
Swift : 5
どうも、氷翠です。
今回、アプリの開発を進めておこうかと、地図に関する情報を集めていました。
import MapKit
これでMapを利用することができるのだ。
var body: some View {
VStack {
Map(coordinateRegion: $region,
//Mapの操作の指定
interactionModes: .all,
//現在地の表示
showsUserLocation: true,
//現在地の追従
userTrackingMode: .constant(MapUserTrackingMode.follow),
//マーカの指定
annotationItems: place
)
}
}
これでとりあえず地図は表示されるのだが、その前に「$region」の定義をしなくてはいけない。
// マップを表示するための初期状態を設定する内容
@State private var region = MKCoordinateRegion(
//Mapの中心の緯度経度
//北43.80957°, 東143.88749°
center: CLLocationCoordinate2D(latitude: 43.80957,
longitude: 143.88749),
//緯度の表示領域(m)
latitudinalMeters: 100,
//経度の表示領域(m)
longitudinalMeters: 100
)
つまり、初期値としての座標の定義をしている。
次は、ピンを立てるための複数の座標を定義していく。
struct IdentifiablePlace: Identifiable {
let id: UUID
let location: CLLocationCoordinate2D
let color : Color
init(id: UUID = UUID(), lat: Double, long: Double, color: Color) {
self.id = id
self.location = CLLocationCoordinate2D(
latitude: lat,
longitude: long)
self.color = color
}
}
これをimportの下に定義しておく。
これはデータ一つ分のデータで、繰り返し処理に使うため、「Identifiable」としておく。
「struct ContentView: View」の中で配列を定義します。
let place = [
IdentifiablePlace(lat: 43.80977, long: 143.88741, color: Color.blue),
IdentifiablePlace(lat: 43.80916, long: 143.88710, color: Color.red),
IdentifiablePlace(lat: 43.80949, long: 143.88817, color: Color.orange),
IdentifiablePlace(lat: 43.80943, long: 143.88831, color: Color.orange),
IdentifiablePlace(lat: 43.80933, long: 143.88844, color: Color.orange)
]
こんな感じで。これをMapに適用させる。
Map(coordinateRegion: $region,
//Mapの操作の指定
interactionModes: .all,
//現在地の表示
showsUserLocation: true,
//現在地の追従
userTrackingMode: .constant(MapUserTrackingMode.follow),
//マーカの指定
annotationItems: place
)
{ place in // 複数のピンを立てるため以下の様にする
MapMarker(coordinate: place.location, tint: place.color)
}
.task(){
//位置情報へのアクセスを要求
let manager = CLLocationManager()
manager.requestWhenInUseAuthorization()
}
「MapMarker」を利用してピンを立てる。
また、「.task()」を使って、GPSの機能を利用するためのアクセスを要求することができる。
これで地図が思い通りに表示されます。
コメントを残す