我目前正在开展一个项目,我需要用户告诉在哪里(在真实世界的地图上)建造一堵墙。
问题:您认为(您认为)最准确的方式是让用户显示(/告诉)放置墙的位置?
创意1 我考虑过在地图上绘画,但那不会那么准确。
创意2 我想到的另一件事是,用户应将手机放在墙的开头和末尾。以这种方式,应用程序可以使用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)
}
提前致谢!
答案 0 :(得分:0)
假设你的意思是一个现实世界的“墙”,维度为厘米到几米,iPhone GPS的位置实际上不适合这种测量,是良好覆盖区域的典型最小误差 5米。
如果明确地询问地理坐标(具有非常高的准确性)是不可行的: 我宁愿明确询问用户尺寸,然后在地图上拖动对象(墙),在接近可能的最终位置时尽可能地进行缩放。
PS:无论如何,可以进行许多优化以提高CLLocationManager
的准确性,首先使用低accuracy过滤掉结果并手动远离.hide
的结果.show
。 3}}收到后的问题。
答案 1 :(得分:0)
不幸的答案是iPhone上的GPS不是很准确。如果你能在一个32米半径的圆圈内得到一个准确的位置,你就会做得很好,而且它在一个开阔的区域,天空清晰,没有无线电干扰。如果事情不太理想,那么结果就不那么准确了。
(Apple报告"水平准确度"读取GPS定位结果实际上是误差范围的半径。)
出于建造墙壁的目的,32米根本不够好,iPhone中的GPS无法可靠地做得更好。你真的需要测量设备。