适用于iOS的AR:显示屏幕上的位置(纬度,长度)

时间:2011-08-07 13:52:03

标签: ios geolocation gps computational-geometry augmented-reality

我想创建一个应用程序,显示屏幕上的位置。

我将在相机图像上显示一个文本,指示用户是否正在查看它。例如,如果用户正在寻找位于其位置北部的城镇,那么当他向北看时,它会看到一个文字。

我还想显示用户和位置之间的距离。

了解用户位置,我必须显示用户正在寻找其他位置。例如,我在纽约,我想知道自由女神像在哪里。我必须知道它的经度和经度,以便在用户查看时在屏幕上显示。

有没有SDK可以做到这一点?

您需要更多详情吗?对不起,我说英语不太好。

2 个答案:

答案 0 :(得分:3)

步骤应该是:

  1. 获取lat和long并将它们设置为两个标签,self.label1和self.label2

  2. 使用transparentColor background创建一个空视图。

  3. 使用addSubview:将标签添加到第2步中的视图。

  4. 将cameraOverlayView设置为在步骤2中创建的视图。

  5. 展示您的选择器。

  6. 在代码中:

    在您的.h:CLLocationManager *locationManager中定义并实施委托:<CLLocationManagerDelegate>

    - (void)viewDidLoad {
    [super viewDidLoad];
    locationManager = [[CLLocationManager alloc] init];
    locationManager.delegate = self;
    locationManager.distanceFilter = kCLDistanceFilterNone; //How often do you want to update your location, this sets every small change should fire an update.
    locationManager.desiredAccuracy = kCLLocationAccuracyBest;
    [locationManager startUpdatingLocation];
    }
    

    然后执行:

    - (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation {
    
      NSString *lat = [NSString stringWithFormat:@"%d", newLocation.coordinate.latitude];
      self.label1.text = lat;
    
      NSString *long = [NSString stringWithFormat:@"%d", newLocation.coordinate.longitude];
      self.label2.text = long;
    }
    

    然后,无论您想在哪里展示带有坐标的相机:

    UIImagePickerController *picker = [[UIImagePickerController alloc] init];
    
    picker.delegate = self;
    
    picker.sourceType =  UIImagePickerControllerSourceTypeCamera;
    
    emptyView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)]; //This frame will make it fullscreen...
    
    emptyView.backgroundColor = [UIColor transparentColor];
    [emptyView setAlpha:1.0]; //I think it is not necessary,  but it wont hurt to add this line.
    
    self.label1.frame = CGRectMake(100, 100, self.label1.frame.size.width, self.label1.frame.size.height); //Here you can specify the position in this case 100x 100y of your label1 preserving the width and height.
    [emptyView addSubview:self.label1];
    //Repeat for self.label2
    
        self.picker.cameraOverlayView = emptyView; //Which by the way is not empty any more..
        [emptyView release];
        [self presentModalViewController:self.picker animated:YES];
        [self.picker release];
    

    希望它足够清楚,并且没有任何遗漏,因为我没有测试过这个。

答案 1 :(得分:0)

  1. 像Nicolas建议的那样得到你的位置。
  2. 从指南针获取用户正在查看的方向
  3. 获取您感兴趣的地点
  4. 根据您和兴趣点坐标计算得到的点的相对“标题”。
  5. 如果它在用户标题周围,请在屏幕上显示标签,并附上相关信息。
  6. 另一个解决方案是建立一个opnengl世界,将你的兴趣点放入你的OpenGL世界,将他们的lat / lon值转换为你的OpenGL坐标。

    第一个更容易,我认为第二个选项更灵活。