2014-12-08 79 views
1

我正在使用ARToolkit sdk用于基于位置的AR,用于在 相机上显示geolocation点。我已经为ios实现了这个sdk,并且我有一个问题,即两个gps点在同一方向上彼此重叠。如何解决这个问题,请帮助我。GPS标签重叠在artoolkit中ios

我在AugmentedRealityController.m类的updateLocations方法中有一些小的变化。根据距离我正在调整屏幕上的标签高度,但问题没有解决,如何使两个重叠标记之间的差距。

if ([item distanceFromOrigin]>= 50 && [item distanceFromOrigin]<= 100) { 
       scaleFactor = 1.2; 
       loc.y = loc.y - 20;    
      } 
      else if ([item distanceFromOrigin]>= 100 && [item distanceFromOrigin]<= 150) { 
       scaleFactor = 0.8; 
       loc.y = loc.y - 50; 

      } 
      else if ([item distanceFromOrigin]>= 150 && [item distanceFromOrigin]<= 200) { 
       scaleFactor = 0.6; 
       loc.y = loc.y - 80; 
      } 
      else if ([item distanceFromOrigin]>= 200 && [item distanceFromOrigin]<= 300) { 
       scaleFactor = 0.6; 
       loc.y = loc.y - 100; 

      } 
      else if ([item distanceFromOrigin]>= 300 && [item distanceFromOrigin]<= 400) { 
       scaleFactor = 0.6; 
       loc.y = loc.y - 120; 
      } 
      else if ([item distanceFromOrigin]>= 400 && [item distanceFromOrigin]<= 500) { 
       scaleFactor = 0.5; 
      } 
      else if ([item distanceFromOrigin]>= 500 && [item distanceFromOrigin]<= 600) { 
       scaleFactor = 0.5; 
      } 
      else if ([item distanceFromOrigin]> 500) 
      { 
       scaleFactor = 0.5; 
      } 
      [markerView setFrame:CGRectMake(loc.x - width/2.0, loc.y -[item radialDistance]/100, width, height)]; 
      //   [markerView setFrame:CGRectMake(loc.x - width/2.0, loc.y, width, height)]; 
      [markerView setNeedsDisplay]; 
} 

如果有人对如何解决此问题有所了解,请帮助我。

回答

0

我通过对代码进行一些更改,解决了标注冲突的问题。

1)在AugmentedRealityViewControllerupdateLocations方法,进入if条件和

if (!([markerView superview])) { 
[[self displayView] insertSubview:markerView atIndex:1]; 
[self listSubviewsOfView:markerView]; // retrive the subviews from the markerview which is display on the camera screen... 
} 

这个条件updatelocation方法和我称之为listSubviewsOfView方法,即用于从superViewsubview retriving。

(void)listSubviewsOfView:(UIView *)view { 

// Get the subviews of the view 
NSArray *subviews = [view subviews]; 

// Return if there are no subviews 
if ([subviews count] == 0) return; 

for (UIView subview in subviews) { 
if ([subview isKindOfClass:[UIImageView class]]) { 

UIImageView *myLabel = (UIImageView *)subview; 
myLabel.clipsToBounds = YES; 
if (myLabel.tag == 1) 
{ 
numberOfImageView++; 
CGRect rect = myLabel.frame; 
rect.origin.y = 0+numberOfImageView50; 
myLabel.frame = rect; 
} 

} 
// List the subviews of subview 
[self listSubviewsOfView:subview]; 
} 
} 

//there is variable numberOfImageView. declare in .h file 
int numberOfImageView; 

//and do one thing in else condition of the updateLocation Method , set the "numberOfImageView" to zero. 
else 
if ([markerView superview]) 
{ 

    [markerView removeFromSuperview]; 
    numberOfImageView =0; 
} 

然后编译并运行

+0

这段代码会调整图像,但是当你触摸图像时它将不会被触摸。 – user3249432 2014-12-20 09:02:30

0

在你AugmentedRealityViewController的更新位置的方法做一些改动 就可以计算出两个标记视图之间的差异,然后设置标志的值y位置。

for (ARGeoCoordinate *item in [self coordinates]) { 
UIView *markerView = [item displayView]; 
if ([self shouldDisplayCoordinate:item]) { 
CGPoint loc = [self pointForCoordinate:item]; 
      CGFloat scaleFactor = SCALE_FACTOR; 

      if ([self scaleViewsBasedOnDistance]) 
       scaleFactor = scaleFactor - [self minimumScaleFactor]*([item radialDistance]/[self maximumScaleDistance]); 

      float width = [markerView bounds].size.width * scaleFactor; 
      float height = [markerView bounds].size.height * scaleFactor; 
if ([item distanceFromOrigin]>0) { 
      float difference = [item distanceFromOrigin]-prevLoc; 

     if ((difference>0 &&difference<200) || (difference < 0 && difference>(-200))) { 
          [markerView setFrame:CGRectMake(loc.x - width/2.0, loc.y-difference, width, height)]; 

     } 
    prevLoc = [item distanceFromOrigin]; 
     } 
} 
else if ([markerView superview]) 
{ 
    [markerView removeFromSuperview]; 
} 
} 

prevLoc是float类型变量,在.h文件中声明并在init方法中初始化为零。

它会管理标记为了定位。