我如何从 struct 获取纬度和经度并在 mapbox Swift 上显示它们

Posted

技术标签:

【中文标题】我如何从 struct 获取纬度和经度并在 mapbox Swift 上显示它们【英文标题】:how do i get the latitude and longitude from struct and show them on mapbox Swift 【发布时间】:2021-01-27 06:47:23 【问题描述】:

我从 API 获取数据,我需要一个纬度和经度数组来显示地图上的所有位置(我正在使用 Mapbox 作为地图)

func getdata()
    
print("meter is \(mapMeter)")
    
var semaphore = DispatchSemaphore (value: 0)

let parameters = "\n    \"latitude\" : \"41.76484\",\n\"longitude\" : \"123.3968636\",\n\"dist\": \"\(mapMeter)\"\n"
let postData = parameters.data(using: .utf8)

var request = URLRequest(url: URL(string: "http://app.freewayfinder.com/api/locations")!,timeoutInterval: Double.infinity)
request.addValue("application/json", forHTTPHeaderField: "Content-Type")

request.httpMethod = "POST"
request.httpBody = postData

let task = URLSession.shared.dataTask(with: request)  data, response, error in
  guard let data = data else 
    print(String(describing: error))
    semaphore.signal()
    return
  

    let getlocation = try? JSONDecoder().decode(Response.self, from: data)
    guard let locations = getlocation else return
    self.locations = locations.message
    self.collectionView.reloadData()
  semaphore.signal()


task.resume()
semaphore.wait()
    

位置结构:

struct Response : Decodable 
let success : Bool
let code : Int
let message : [location]


struct location : Decodable
let id : Int
let name : String
let img : String
let latitude : String
let longitude : String
let city : String
let country : String
let created_at : String
let updated_at : String

请帮我解决这个问题,我想在地图上显示分配

【问题讨论】:

永远不要使用信号量来使异步网络请求变为同步。这是一种可怕的做法。 【参考方案1】:

您可以像这样在 Map 中的数组中设置位置

for locationStruct in self.locations

    let annotation = MGLPointAnnotation()
    annotation.coordinate = CLLocationCoordinate2D(latitude: Double(locationStruct.latitude), longitude: Double(locationStruct.longitude))
    annotation.title = locationStruct.name
    annotation.subtitle = "Your Subtitle"
    self.mapView.addAnnotation(annotation)


【讨论】:

CLLocationCoordinate2D(latitude: Double(locationStruct.latitude), longitude: Double(locationStruct.longitude))中给出错误“在调用初始化程序时没有完全匹配” Double 初始化器创建一个可选的。你必须处理它。

以上是关于我如何从 struct 获取纬度和经度并在 mapbox Swift 上显示它们的主要内容,如果未能解决你的问题,请参考以下文章

如何从谷歌 API 获取经度和纬度

如何从纬度和经度获取国家名称

如何使用 Here Map for android SDK 获取纬度和经度?

使用纬度和经度获取特定地址[重复]

没有从后台服务获取纬度和经度

如何在 PHP 中对谷歌地理编码 api 进行批量纬度/经度查找?