我希望可以展示两个CLLocation坐标之间的距离。是否有一种不需要使用复杂数学公式的方法来实现呢?如果没有,你会如何使用公式来计算距离呢?
我希望可以展示两个CLLocation坐标之间的距离。是否有一种不需要使用复杂数学公式的方法来实现呢?如果没有,你会如何使用公式来计算距离呢?
CLLocation有一个distanceFromLocation方法,因此可以给定两个CLLocations:
CLLocationDistance distanceInMeters = [location1 distanceFromLocation:location2];
或者在 Swift 4 中:
//: Playground - noun: a place where people can play
import CoreLocation
let coordinate₀ = CLLocation(latitude: 5.0, longitude: 5.0)
let coordinate₁ = CLLocation(latitude: 5.0, longitude: 3.0)
let distanceInMeters = coordinate₀.distance(from: coordinate₁) // result is in meters
您在这里得到的是距离,以米为单位,因此1英里 = 1609米
if(distanceInMeters <= 1609)
{
// under 1 mile
}
else
{
// out of 1 mile
}
distanceFromLocation
导出的地理空间距离将是完全不正确的。对于驾驶距离,正确的实现方法是使用MKRoute
,它将为您提供“路线距离”distance
(以米为单位),以及其他一些信息,如预计旅行时间、交通类型等-https://developer.apple.com/documentation/mapkit/mkroute - Anjan BiswasSwift 4.1
import CoreLocation
//My location
let myLocation = CLLocation(latitude: 59.244696, longitude: 17.813868)
//My buddy's location
let myBuddysLocation = CLLocation(latitude: 59.326354, longitude: 18.072310)
//Measuring my distance to my buddy's (in km)
let distance = myLocation.distance(from: myBuddysLocation) / 1000
//Display the result in km
print(String(format: "The distance to my buddy is %.01fkm", distance))
试试这个:
distanceInMeters = fromLocation.distanceFromLocation(toLocation)
distanceInMiles = distanceInMeters/1609.344
来自Apple文档:
返回值:两个位置之间的距离(以米为单位)。
Measurement
类执行英里转换将非常有用:let miles = Measurement(value: meters, unit: UnitLength.meters).converted(to: UnitLength.miles).value
。 - gyratory circusimport CoreLocation
//My location
let myLocation = CLLocation(latitude: 31.5101892, longitude: 74.3440842)
//My Next Destination
let myNextDestination = CLLocation(latitude: 33.7181584, longitude: 73.071358)
//Finding my distance to my next destination (in km)
let distance = myLocation.distance(from: myNextDestination) / 1000
func calculateDistanceInMiles(){
let coordinate₀ = CLLocation(latitude:34.54545, longitude:56.64646)
let coordinate₁ = CLLocation(latitude: 28.4646, longitude:76.65464)
let distanceInMeters = coordinate₀.distance(from: coordinate₁)
if(distanceInMeters <= 1609)
{
let s = String(format: "%.2f", distanceInMeters)
self.fantasyDistanceLabel.text = s + " Miles"
}
else
{
let s = String(format: "%.2f", distanceInMeters)
self.fantasyDistanceLabel.text = s + " Miles"
}
}
针对 Swift 4
let locationOne = CLLocation(latitude: lat, longitude: long)
let locationTwo = CLLocation(latitude: lat,longitude: long)
let distance = locationOne.distance(from: locationTwo) * 0.000621371
distanceLabel.text = "\(Int(round(distance))) mi"
对于Objective-C:
您可以使用distanceFromLocation
来查找两个坐标之间的距离。
代码片段:
CLLocation *loc1 = [[CLLocation alloc] initWithLatitude:lat1 longitude:lng1];
CLLocation *loc2 = [[CLLocation alloc] initWithLatitude:lat2 longitude:lng2];
CLLocationDistance distance = [loc1 distanceFromLocation:loc2];
import UIKit
import CoreLocation
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
var currentLocation = CLLocation(latitude: 23.1929, longitude: 72.6156)
var DestinationLocation = CLLocation(latitude: 23.0504, longitude: 72.4991)
var distance = currentLocation.distance(from: DestinationLocation) / 1000
print(String(format: "The distance to my buddy is %.01fkm", distance))
}
}
import UIKit
func haversineDinstance(la1: Double, lo1: Double, la2: Double, lo2: Double, radius: Double = 6367444.7) -> Double {
let haversin = { (angle: Double) -> Double in
return (1 - cos(angle))/2
}
let ahaversin = { (angle: Double) -> Double in
return 2*asin(sqrt(angle))
}
// Converts from degrees to radians
let dToR = { (angle: Double) -> Double in
return (angle / 360) * 2 * .pi
}
let lat1 = dToR(la1)
let lon1 = dToR(lo1)
let lat2 = dToR(la2)
let lon2 = dToR(lo2)
return radius * ahaversin(haversin(lat2 - lat1) + cos(lat1) * cos(lat2) * haversin(lon2 - lon1))
}
let amsterdam = (52.3702, 4.8952)
let newYork = (40.7128, -74.0059)
// Google says it's 5857 km so our result is only off by 2km which could be due to all kinds of things, not sure how google calculates the distance or which latitude and longitude google uses to calculate the distance.
haversineDinstance(la1: amsterdam.0, lo1: amsterdam.1, la2: newYork.0, lo2: newYork.1)
我从参考链接https://github.com/raywenderlich/swift-algorithm-club/blob/master/HaversineDistance/HaversineDistance.playground/Contents.swift中选取了上述代码。
Swift 5.
func calculateDistance(mobileLocationX:Double,mobileLocationY:Double,DestinationX:Double,DestinationY:Double) -> Double {
let coordinate₀ = CLLocation(latitude: mobileLocationX, longitude: mobileLocationY)
let coordinate₁ = CLLocation(latitude: DestinationX, longitude: DestinationY)
let distanceInMeters = coordinate₀.distance(from: coordinate₁)
return distanceInMeters
}
用于
let distance = calculateDistance("add parameters")