2014-12-08 22 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方法中初始化爲零。

它會管理標記爲了定位。