new*_*per 5 cllocation ios swift ios9 reversegeocodelocation
我在iOS9上使用Xcode 7.我想根据用户当前位置到列表中所有其他位置的距离对列表进行升序排序.
我不想通过坐标计算到某个位置的距离,而是通过地址计算,因为距离取决于选择的方法(行驶/步行).我想要做的就是保存每个位置对象中的地址,以便稍后计算到该对象的距离.
使用对象初始化列表时,我在每个对象的初始值设定项中执行此请求:
let location = CLLocation(latitude: latitude, longitude: longitude) //changed!!!
CLGeocoder().reverseGeocodeLocation(location, completionHandler: {(placemarks, error) -> Void in
//the code to obtain an address and save it in a location object is here and works
}
Run Code Online (Sandbox Code Playgroud)
我现在的问题是我必须发送172个这样的reverseGeocodeLocation请求,因为我的列表包含172个对象,我需要计算从用户位置到每个对象位置的距离.
如此快速地发送如此多的请求会导致此错误:无法完成操作.(kCLErrorDomain错误2.)
有办法解决这个问题吗?如果事情不明确请告诉我,所以我可以澄清一下
我终于在一些评论的帮助下自己找到了答案。
\n目前,可以使用 Apple Maps API 检索的唯一距离是坐标之间的直线距离。但是,如果您想计算两个地址或坐标之间的实际距离,您可以通过发送简单的请求,使用 Google 地图距离矩阵 API 来完成。
\n
计算从 51.226531,4.190688\n \n 到 51.114476,4.139618 和 51.148123,4.182590 的距离。
您只需使用以下 API 调用即可完成此操作:\n https://maps.googleapis.com/maps/api/distancematrix/json?origins=51.226531,4.190688&destinations=51.114476,4.139618|51.148123,4.182590 \n
请注意,我使用了 3 个参数:
\n json:我希望返回结果的格式
\n origins:开始的坐标/地址
\n destinations:用“ | ”分隔的多个坐标/地址
这是调用的结果:
\n{\n "destination_addresses" : [\n "Dorpstraat 70, 9140 Temse, Belgi\xc3\xab",\n "Eigenlostraat 38, 9100 Sint-Niklaas, Belgi\xc3\xab"\n],\n"origin_addresses" : [ "Provinciale Baan 37, 9120 Beveren, Belgi\xc3\xab" ],\n"rows" : [\n {\n "elements" : [\n {\n "distance" : {\n "text" : "16,3 km",\n "value" : 16346\n },\n "duration" : {\n "text" : "22 min.",\n "value" : 1321\n },\n "status" : "OK"\n },\n {\n "distance" : {\n "text" : "10,5 km",\n "value" : 10521\n },\n "duration" : {\n "text" : "17 min.",\n "value" : 1003\n },\n "status" : "OK"\n }\n ]\n }\n],\n"status" : "OK" \n}\nRun Code Online (Sandbox Code Playgroud)\n如果事情不清楚,请问我!
\n| 归档时间: |
|
| 查看次数: |
626 次 |
| 最近记录: |