标签: cllocation

将CLLocation转换为CLLocationDegrees

如何将CLLocation转换为CLLocationDegrees,以便我可以创建CLLocationCoordinate2D结构?

iphone objective-c cllocationmanager cllocation

2
推荐指数
1
解决办法
1361
查看次数

了解MKCoordinateFromMapPoint行为

在基于位置的应用程序中,我们使用MKMapPoints来存储位置,例如当前用户位置.

当我们尝试在MKMapView上使用此位置时,要设置最初显示的区域(放大用户),我们将其转换为CLLocationCoordinate2D

有一种方便的方法:namenly:MKCoordinateForMapPoint,但在测试期间,这给出了奇怪的结果.

  MKMapPoint mapPoint = MKMapPointMake(51.96, 6.3); // My area ;)
  CLLocationCoordinate2D automagicCoordinate = MKCoordinateForMapPoint(mapPoint);
  CLLocationCoordinate2D manualCoordinate = CLLocationCoordinate2DMake(mapPoint.x, mapPoint.y);
Run Code Online (Sandbox Code Playgroud)

我希望automagicCoordinate和manualCoordinate都是完全一样的.但是当我在调试器中检查它时,我得到以下结果:

automagicCoordinate.latitude = (CLLocationDegrees) 85.05
automagicCoordinate.longitude = (CLLocationDegrees) -179.99

manualCoordinate.latitude = (CLLocationDegrees) 51.96
manualCoordinate.longitude = (CLLocationDegrees) 6.3
Run Code Online (Sandbox Code Playgroud)

为什么使用该方法创建的坐标不正确?

mkmapview cllocation ios

2
推荐指数
1
解决办法
1998
查看次数

从其他ViewController的locationManager方法访问newLocation

我正在使用CoreLocation并从我的应用程序AppDelegate中启动locationManager.示例代码如下......

AppDelegate.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // ...

    // start location manager
    if([CLLocationManager locationServicesEnabled])
    {
        myLocationManager_ = [[CLLocationManager alloc] init];
        myLocationManager_.delegate = self;
        [myLocationManager_ startUpdatingLocation];
    }
    else 
    {
        // ... rest of code snipped to keep this short
Run Code Online (Sandbox Code Playgroud)

在这种方法中,我们看到更新的位置.

-(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{
    NSString *currentLatitude = [[NSString alloc] initWithFormat:@"%g", newLocation.coordinate.latitude];
    NSLog(@"AppDelegate says: latitude: %@", currentLatitude);

    // ... rest of code snipped
Run Code Online (Sandbox Code Playgroud)

现在,在我的应用程序的其他区域中,我需要确定用户当前位置(纬度,经度).我可以结合上面的代码到需要当前位置的ViewControllers但后来我不得不CLLocationManager的多个实例运行(我认为) - 为什么复制此代码?有没有办法,从其他ViewControllers,我可以从AppDelegate获取位置信息?

PS - 我正在使用Xcode 4.3 w/ARC

iphone objective-c core-location cllocationmanager cllocation

2
推荐指数
1
解决办法
1643
查看次数

在swift中使用CLLocationManager的位置类

我是iOS新手.我有一个应用程序,允许用户在不同的视图控制器中更新其位置.我试图最小化执行此操作的代码量,因此我将所有与位置相关的方法放在一个单独的类中,而不是复制方法来实现这一点.

import UIKit
import CoreLocation

class LocationUtil: NSObject, CLLocationManagerDelegate {
   let locationManager = CLLocationManager()

   func findUserLocation()->Void{
        locationManager.delegate = self
        locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters
        locationManager.requestWhenInUseAuthorization()
        locationManager.startUpdatingLocation()
    }
Run Code Online (Sandbox Code Playgroud)

从我的视图控制器我这样称呼这个类.

 override func viewDidLoad() {
        super.viewDidLoad()
        let locUtil = LocationUtil()
        locUtil.findUserLocation()

}
Run Code Online (Sandbox Code Playgroud)

但是,没有任何委托方法被调用.当我在视图控制器中直接使用相同的代码时,它工作正常.我究竟做错了什么?

cllocationmanager cllocation ios swift

2
推荐指数
1
解决办法
1889
查看次数

将 distanceFromLocation 转换为 Int

我确信这个问题有一个明显的解决方案,但我已经尝试了一段时间不同的东西,但我无法弄清楚。基本上我已经得到了两点之间的距离,并且我试图将它从 Double 转换为 Int(以删除所有小数点),但是我尝试过的一切都没有奏效。

这是我的代码:

let userLocation = CLLocation(latitude: mapView.userLocation.coordinate.latitude, longitude: mapView.userLocation.coordinate.longitude)
let annotationLocation = CLLocation(latitude: latitudePassed, longitude: longitudePassed)

var distance = CLLocationDistance(annotationLocation.distanceFromLocation(userLocation))

if distance > 1000 {
    distance = distance / 1000
    rideAnnotation.subtitle = "\(distance) kilometer(s)"
} else {
    rideAnnotation.subtitle = "\(distance) meters"
}
Run Code Online (Sandbox Code Playgroud)

我尝试先转换为字符串,然后转换为 int,再转换为 inttoInt()和其他一些东西,但没有成功。

有人有什么建议吗?

cllocation ios cllocationdistance swift

2
推荐指数
1
解决办法
2231
查看次数

获取iOS中两个坐标之间距离的垂直和水平分量

我正在尝试在swift中创建一个函数,准确计算任何位置与地球原点的垂直和水平距离(纬度:0,经度:0).我知道iOS有distanceFromLocation功能,但这给了我直接位置.我正在寻找的是那个方向的水平和垂直分量.我试着提出自己的解决方案,但是当我根据我得到的水平和垂直分量测试直接距离时,它与实际距离不匹配.这是我的功能:

func distanceFromOrigin(location:CLLocation) {

    let lat = location.coordinate.latitude
    let lon = location.coordinate.longitude

    let earthOriginLocation = CLLocation(coordinate: CLLocationCoordinate2DMake(0.0, 0.0), altitude: CLLocationDistance(0.0), horizontalAccuracy: kCLLocationAccuracyBestForNavigation, verticalAccuracy: kCLLocationAccuracyBestForNavigation, timestamp: NSDate())

    var horDistance = earthOriginLocation.distanceFromLocation(CLLocation(latitude: 0.0, longitude: location.coordinate.longitude))
    var verDistance = earthOriginLocation.distanceFromLocation(CLLocation(latitude: location.coordinate.latitude, longitude: 0.0))

    let overallDistance = earthOriginLocation.distanceFromLocation(location)

    if lat < 0 {
        print("Object is South of Equator")
        verDistance *= -1
    } else if lat > 0 {
        print("Object is North of Equator")
    } else {
        print("Object is at the Equator")
    }
    if lon …
Run Code Online (Sandbox Code Playgroud)

math cllocation ios swift

2
推荐指数
1
解决办法
535
查看次数

在 mapView 中为 CLLocation 数组绘制路线(Swift)

如何在 mapview 中为 CLLocation 数组创建路线?我创建了一条折线,我想通过步行创建一条路线。这是我的代码:

@IBAction func addPolyline(sender: AnyObject) {
    let locations = [CLLocation(latitude: annotazioni.objectAtIndex(0).coordinate.latitude, longitude:annotazioni.objectAtIndex(0).coordinate.longitude ),
                     CLLocation(latitude: annotazioni.objectAtIndex(1).coordinate.latitude, longitude:annotazioni.objectAtIndex(1).coordinate.longitude ),
                     CLLocation(latitude: annotazioni.objectAtIndex(2).coordinate.latitude, longitude:annotazioni.objectAtIndex(2).coordinate.longitude ),
                     CLLocation(latitude: annotazioni.objectAtIndex(3).coordinate.latitude, longitude:annotazioni.objectAtIndex(3).coordinate.longitude ),
                     CLLocation(latitude: annotazioni.objectAtIndex(4).coordinate.latitude, longitude:annotazioni.objectAtIndex(4).coordinate.longitude ),
                     CLLocation(latitude: annotazioni.objectAtIndex(5).coordinate.latitude, longitude:annotazioni.objectAtIndex(5).coordinate.longitude ),
                     CLLocation(latitude: annotazioni.objectAtIndex(6).coordinate.latitude, longitude:annotazioni.objectAtIndex(6).coordinate.longitude )]
    addPolyLineToMap(locations)
}
func addPolyLineToMap(locations: [CLLocation!]){
    var coordinates = locations.map({ (location: CLLocation!) -> CLLocationCoordinate2D in
        return location.coordinate
    })
    let geodesic = MKGeodesicPolyline(coordinates: &coordinates, count: locations.count)
    mapView.addOverlay(geodesic)

}
func mapView(mapView: MKMapView!, viewForOverlay overlay: MKOverlay!) -> MKOverlayRenderer! {

    if (overlay is MKPolyline) …
Run Code Online (Sandbox Code Playgroud)

routes polyline cllocation swift

2
推荐指数
1
解决办法
3228
查看次数

请求用户位置时如何检测用户何时按下“允许”

我正在创建一个使用用户当前位置的应用程序。第一次运行时,在提示用户允许或拒绝该应用使用其位置后,我想在用户按下“允许”按钮时做一些事情。有没有一种方法可以检测用户何时按下了“允许”按钮?

location cllocation ios swift swift3

2
推荐指数
1
解决办法
564
查看次数

CLLocationManager desiredAccuracy of kCLLocationAccuracyHundredMeters 导致位置更新非常不频繁

我正在尝试将kCLLocationAccuracyHundredMeters 的位置精度用于我的应用程序中的标准位置更新,这似乎在一段时间内工作得相对较好,但每隔一段时间我会在更新之间收到 10 分钟的间隔(在行驶数英里时)不同的方向),这似乎与设置不符。这是我的位置管理器上的设置。此外,我只使用前台位置更新,因此对于这些测试,我一直在屏幕上显示应用程序,而应用程序始终处于前台。

self.locManager = [[CLLocationManager alloc] init];
self.locManager.delegate = self;
self.locManager.desiredAccuracy = kCLLocationAccuracyHundredMeters;
self.locManager.distanceFilter = 15;
Run Code Online (Sandbox Code Playgroud)

我使用相同的其他设置尝试了kCLLocationAccuracyBest,我在整个驱动器中都获得了完美的测量结果,但我不需要那么准确的位置。我认为百米精度仍然会以较低的精度提供相对一致的更新,这就是我们正在寻找的。

这只是使用kCLLocationAccuracyHundredMeters设置与 kCLLocationAccuracyBest 的副作用吗?

在 iPhone 6s 上测试:11.0.2 和 iPhone 7Plus:11.0.3

任何帮助表示赞赏,谢谢!

编辑:

我应该澄清一下,我确实在下面列出的 CLLocationManager 委托方法中设置了日志记录,但从未收到任何回调/日志。

- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error;
- (void)locationManager:(CLLocationManager *)manager didFinishDeferredUpdatesWithError:(nullable NSError *)error;
- (void)locationManagerDidPauseLocationUpdates:(CLLocationManager *)manager;
- (void)locationManagerDidResumeLocationUpdates:(CLLocationManager *)manager;
Run Code Online (Sandbox Code Playgroud)

objective-c cllocationmanager cllocation ios

2
推荐指数
1
解决办法
1713
查看次数

找到最近的CLLocation

如何找到距离用户最近的位置?基本上,我有一堆CLLocation,我想找到最接近用户的那个.我已检索到用户当前位置但我想找到最近的位置CLLocation.我该怎么做呢?你可以NSLog就近.

iphone cllocationmanager cllocation ios currentlocation

1
推荐指数
1
解决办法
543
查看次数