実現したいこと
特定の範囲内(例:半径1km)にいるユーザーの位置情報を緯度・経度を使ってAnnotationで地図上に置きたいです。
前提
SwiftでMapKitを使ったアプリを作っています。
1つのAnnotation(ピンの様なもの)は置けるのですが複数置こうとしましたが置けませんでした。
発生している問題・エラーメッセージ
アノテーションが地図上に表示されない
該当のソースコード
Swift
1import UIKit 2import MapKit 3import CoreLocation 4 5class MapViewController: UIViewController, MKMapViewDelegate, CLLocationManagerDelegate { 6 7// モデル 8struct UserInfo: Codable { 9 var title: String 10 var subtitle: String 11 var latitude: Double 12 var longitude: Double 13 } 14 15// 接続 16 @IBOutlet weak var mapView: MKMapView! 17 18// 変数:地図に立てるピン 19 var locationManager: CLLocationManager! 20// 地図上に表示するユーザーを入れる配列 21 var displayUserInfos: [UserInfo] = [] 22 23override func viewDidLoad() { 24 super.viewDidLoad() 25 26// ロングタップを検知 27 let longPress = UILongPressGestureRecognizer(target: self, action: #selector(recognizeLongPress(sender:))) 28 //MapViewにリスナーを登録 29 self.mapView.addGestureRecognizer(longPress) 30 31} 32 33// MARK: - Action 34 //ロングタップした時に呼ばれる関数 35 @objc func recognizeLongPress(sender: UILongPressGestureRecognizer) { 36 //長押し感知は最初の1回のみ 37 if sender.state != UIGestureRecognizer.State.began { 38 return 39 } 40 41 // 位置情報を取得 42 let location = sender.location(in: self.mapView) 43 let coordinate = self.mapView.convert(location, toCoordinateFrom: self.mapView) 44 45 // 緯度取得 46 self.longitude = coordinate.latitude 47 // 出力 48 // print(coordinate.latitude) 49 // 経度取得 50 self.latitude = coordinate.longitude 51 // 出力 52 // print(coordinate.longitude) 53 54 // タップした位置に照準を合わせる処理 55 let span = MKCoordinateSpan(latitudeDelta: 0.01, longitudeDelta: 0.01) 56 let region = MKCoordinateRegion(center: coordinate, span: span) 57 self.mapView.region = region 58 59 // ピンを生成 60 let pin = MKPointAnnotation() 61 pin.title = "タイトル" 62 pin.subtitle = "サブタイトル" 63 // タップした位置情報に位置にピンを追加 64 pin.coordinate = coordinate 65 // 地図にピンを表示 66 self.mapView.addAnnotation(pin) 67 // ユーザー表示 68 self.getUsersFromGeocode() 69 } 70 71 // MARK: - Function 72 func getUsersFromGeocode() { 73// ある地点を中心に半径1km以内にいるユーザーを取得する処理 74... 75 for displayUserInfo in displayUserInfos { 76 77 print("==================================") 78 print("displayUserInfo.latitudeは") 79 print(displayUserInfo.latitude) 80 print("==================================") 81 print("displayUserInfo.latitudeは") 82 print(displayUserInfo.longitude) 83 print("==================================") 84 85 // ピンの生成 86 let annotation = MKPointAnnotation() 87 // 緯度経度を指定 88 annotation.coordinate = CLLocationCoordinate2DMake(displayUserInfo.latitude, displayUserInfo.longitude) 89 // mapViewに追加 90 self.mapView.addAnnotation(annotation) 91 } 92 93} 94
// 出力 ================================== displayUserInfo.latitudeは 35.46636 ================================== ================================== displayUserInfo.latitudeは 139.62234 ================================== displayUserInfo.latitudeは 35.466713 ================================== ================================== displayUserInfo.latitudeは 139.62260956 ================================== displayUserInfo.latitudeは 35.46621268 ================================== ================================== displayUserInfo.latitudeは 139.62329 ================================== displayUserInfo.latitudeは 35.46527 ================================== ================================== displayUserInfo.latitudeは 139.62260956 ================================== displayUserInfo.latitudeは 35.46621268 ==================================
試したこと
色々な方法を試してみたのですがうまくいきませんでした。
MapKitを使い始めた初心者です。
お手柔らかにお願いいたします。

下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。
2023/05/09 07:57 編集
2023/05/09 08:53
2023/05/09 08:54
2023/05/09 08:56
2023/05/09 09:07
2023/05/09 11:21