iOS - 测量距离的最佳方式
iOS - The best way to measure distance
我目前正在做一个项目,我需要用户告诉在哪里(在真实世界地图上)建造一堵墙。
问题:(在您看来)用户显示(/告诉)放置墙的位置的最准确方式是什么?
想法1我想过在地图上画图,但是那样不太准确。
想法 2 我想到的另一件事是,用户应该将他们的 phone 放在墙的开头和结尾。通过这种方式,应用程序可以使用 CLLocationManager
来打印地图上的位置,还可以测量两端之间的距离。
这是我尝试过的代码,但它并不是那么准确。
let locationManager = CLLocationManager()
var location1: CLLocation = CLLocation()
var location2: CLLocation = CLLocation()
override func viewDidLoad() {
super.viewDidLoad()
setup()
}
func setup() {
resett.isHidden = true
// Ask for Authorisation from the User.
self.locationManager.requestAlwaysAuthorization()
// For use in foreground
self.locationManager.requestWhenInUseAuthorization()
if CLLocationManager.locationServicesEnabled() {
locationManager.delegate = self
locationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation
locationManager.activityType = .fitness
locationManager.startUpdatingLocation()
}
}
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
let locValue:CLLocationCoordinate2D = manager.location!.coordinate
currentCord.text = "\(locValue.latitude) \(locValue.longitude)"
}
func measure(cord1: CLLocation, cord2: CLLocation) -> Float {
let distanceInMeters = cord1.distance(from: cord2) //result is in meters
return Float(distanceInMeters)
}
func calculateCoordinates(status: Int) {
let coordinate = calculate()
if status == 1 {
location2 = coordinate
let measured = measure(cord1: location1, cord2: location2)
print("\(measured) m")
displayLabel.text = "\(measured)m"
resett.isHidden = false
} else {
location1 = coordinate
}
}
func calculate() -> CLLocation {
let locValue:CLLocationCoordinate2D = locationManager.location!.coordinate
let coordinate = CLLocation(latitude: locValue.latitude, longitude: locValue.longitude)
return coordinate
}
@IBAction func FirstAction(_ sender: Any) {
button1.setTitle("Klar", for: .normal)
calculateCoordinates(status: 0)
}
@IBAction func SecondAction(_ sender: Any) {
button2.setTitle("Klar", for: .normal)
calculateCoordinates(status: 1)
}
提前致谢!
假设你指的是现实世界"wall",尺寸从厘米到几米,iPhone GPS 的位置确实不适合这些一种测量,是良好覆盖区域的典型最小误差 5 米。
如果明确询问地理坐标(精度非常高)不可行:
我宁愿明确地询问用户尺寸,然后可能在地图上拖动对象(墙),在接近可能的最终位置时尽可能地缩放。
PS:无论如何可以进行许多优化以提高 CLLocationManager
的准确性,首先在接收后过滤掉具有低 accuracy and manually away the one with big horizzontal accuracy 问题的结果它。
不幸的是 iPhone 上的 GPS 不是很准确。如果你能在 32 米半径的圆圈内获得准确的位置,那你就做得很好,而且那是在开阔的区域,天空视线清晰,没有无线电干扰。如果事情不太理想,结果可能会远不准确。
(Apple 报告其 GPS 定位结果中的 "horizontal accuracy" 读数实际上是误差范围的半径。)
为了建造一堵墙,32 米根本不够好,iPhone 中的 GPS 也不能可靠地做得更好。你真的需要测量设备。
我目前正在做一个项目,我需要用户告诉在哪里(在真实世界地图上)建造一堵墙。
问题:(在您看来)用户显示(/告诉)放置墙的位置的最准确方式是什么?
想法1我想过在地图上画图,但是那样不太准确。
想法 2 我想到的另一件事是,用户应该将他们的 phone 放在墙的开头和结尾。通过这种方式,应用程序可以使用 CLLocationManager
来打印地图上的位置,还可以测量两端之间的距离。
这是我尝试过的代码,但它并不是那么准确。
let locationManager = CLLocationManager()
var location1: CLLocation = CLLocation()
var location2: CLLocation = CLLocation()
override func viewDidLoad() {
super.viewDidLoad()
setup()
}
func setup() {
resett.isHidden = true
// Ask for Authorisation from the User.
self.locationManager.requestAlwaysAuthorization()
// For use in foreground
self.locationManager.requestWhenInUseAuthorization()
if CLLocationManager.locationServicesEnabled() {
locationManager.delegate = self
locationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation
locationManager.activityType = .fitness
locationManager.startUpdatingLocation()
}
}
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
let locValue:CLLocationCoordinate2D = manager.location!.coordinate
currentCord.text = "\(locValue.latitude) \(locValue.longitude)"
}
func measure(cord1: CLLocation, cord2: CLLocation) -> Float {
let distanceInMeters = cord1.distance(from: cord2) //result is in meters
return Float(distanceInMeters)
}
func calculateCoordinates(status: Int) {
let coordinate = calculate()
if status == 1 {
location2 = coordinate
let measured = measure(cord1: location1, cord2: location2)
print("\(measured) m")
displayLabel.text = "\(measured)m"
resett.isHidden = false
} else {
location1 = coordinate
}
}
func calculate() -> CLLocation {
let locValue:CLLocationCoordinate2D = locationManager.location!.coordinate
let coordinate = CLLocation(latitude: locValue.latitude, longitude: locValue.longitude)
return coordinate
}
@IBAction func FirstAction(_ sender: Any) {
button1.setTitle("Klar", for: .normal)
calculateCoordinates(status: 0)
}
@IBAction func SecondAction(_ sender: Any) {
button2.setTitle("Klar", for: .normal)
calculateCoordinates(status: 1)
}
提前致谢!
假设你指的是现实世界"wall",尺寸从厘米到几米,iPhone GPS 的位置确实不适合这些一种测量,是良好覆盖区域的典型最小误差 5 米。
如果明确询问地理坐标(精度非常高)不可行: 我宁愿明确地询问用户尺寸,然后可能在地图上拖动对象(墙),在接近可能的最终位置时尽可能地缩放。
PS:无论如何可以进行许多优化以提高 CLLocationManager
的准确性,首先在接收后过滤掉具有低 accuracy and manually away the one with big horizzontal accuracy 问题的结果它。
不幸的是 iPhone 上的 GPS 不是很准确。如果你能在 32 米半径的圆圈内获得准确的位置,那你就做得很好,而且那是在开阔的区域,天空视线清晰,没有无线电干扰。如果事情不太理想,结果可能会远不准确。
(Apple 报告其 GPS 定位结果中的 "horizontal accuracy" 读数实际上是误差范围的半径。)
为了建造一堵墙,32 米根本不够好,iPhone 中的 GPS 也不能可靠地做得更好。你真的需要测量设备。