ios 如何找出坐标之间的距离?
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/33304340/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How to find out distance between coordinates?
提问by John Doe
I want to make it so that it will show the amount of distance between two CLLocation coordinates. Is there someway to do this without a complex math formula? If there isn't how would you do it with a formula?
我想让它显示两个 CLLocation 坐标之间的距离。没有复杂的数学公式,有没有办法做到这一点?如果没有你怎么用公式来做?
回答by Glenn Howes
CLLocation has a distanceFromLocation method so given two CLLocations:
CLLocation 有一个 distanceFromLocation 方法,所以给定两个 CLLocations:
CLLocationDistance distanceInMeters = [location1 distanceFromLocation:location2];
or in Swift 4:
或在 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
you get here distancein meterso 1 miles= 1609 meter
你到这里的距离以米为单位,所以1 英里= 1609 米
if(distanceInMeters <= 1609)
{
// under 1 mile
}
else
{
// out of 1 mile
}
回答by Mohammed Abunada
Swift 4.1
斯威夫特 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))
回答by Abhinav
Try this out:
试试这个:
distanceInMeters = fromLocation.distanceFromLocation(toLocation)
distanceInMiles = distanceInMeters/1609.344
From Apple Documentation:
来自苹果文档:
Return Value: The distance (in meters) between the two locations.
返回值:两个位置之间的距离(以米为单位)。
回答by Saurabh Sharma
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"
}
}
回答by Faris
For swift 4
快速 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"
回答by Vijay
For objective-c
对于目标-c
You can use distanceFromLocation
to find the distance between two coordinates.
您可以使用它distanceFromLocation
来查找两个坐标之间的距离。
Code Snippets:
代码片段:
CLLocation *loc1 = [[CLLocation alloc] initWithLatitude:lat1 longitude:lng1];
CLLocation *loc2 = [[CLLocation alloc] initWithLatitude:lat2 longitude:lng2];
CLLocationDistance distance = [loc1 distanceFromLocation:loc2];
Your output will come in meters.
您的输出将以米为单位。
回答by Kiran Bhoraniya
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))
}
}
回答by Sazid Iqabal
You can also use the HaversineDistance algorithmjust like android developers used, this is helpfull when you have antother app in android similar to it, else above answer is correct for you.
您也可以像 android 开发人员使用的那样使用HaversineDistance 算法,当您在 android 中有另一个类似的应用程序时,这很有帮助,否则以上答案对您来说是正确的。
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)
I have picked the code written above from the refrence link https://github.com/raywenderlich/swift-algorithm-club/blob/master/HaversineDistance/HaversineDistance.playground/Contents.swift
我从参考链接https://github.com/raywenderlich/swift-algorithm-club/blob/master/HaversineDistance/HaversineDistance.playground/Contents.swift 中选择了上面写的代码
回答by Ali Aqdas
import 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
回答by ikbal
Swift 5.
斯威夫特 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
}
use to
用于
let distance = calculateDistance("add parameters")