2011-11-03 136 views
2

我有一個iPhone應用程序,它顯示了一個企業名單和他們在谷歌地圖上的位置使用MKMapView。作爲一項新功能,我嘗試添加「附近」功能,從而獲取用戶當前的位置,並在10KM附近的谷歌地圖上顯示幾個地圖註釋。目前,企業位置以地址字符串的形式存儲在mysql數據庫中,然後將其檢索並進行地理編碼以在谷歌地圖上顯示。iPhone SDK:附近的位置功能

我該如何去做這件事?如果有任何教程,請將我指向一個。 (我沒有找到任何運氣)。 在此先感謝!

UPDATE:

我得到它的部分工作 - 它只是一個半徑20公里,這是偉大內顯示的企業,我遇到的問題是,當他們打開這個附近的商家看來,這需要相當長的時間它要通過每項業務並檢查用戶與每個單獨業務之間的距離。有什麼辦法可以加快速度嗎?這裏是我的代碼:,這兩個方法都是從viewDidLoad方法中調用的。

-(void)getMapData 
{ 
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init]; 

    NSInteger *bizMax = [[numOfBiz objectAtIndex:0]intValue]; 

    int x = 0; 
    while(x < bizMax) 
    { 

     NSURL *mapURL = [NSURL URLWithString:[NSString stringWithFormat:@"getBizMap-xml.php?biz_id=%@",[bizIDS objectAtIndex:x]]]; 
     NSMutableArray *mapArray = [[NSMutableArray alloc] initWithContentsOfURL:mapURL]; 
     self.mapLocation = mapArray; 
     self.mapStringLocation = [mapArray objectAtIndex:0]; 
     NSLog(@"Location: %@",mapStringLocation); 
     [mapArray release]; 

     CLLocationCoordinate2D trueLocation = [self getLocationFromAddressString:mapStringLocation]; 
     AddressAnnotation *addAnnotation = [[AddressAnnotation alloc] initWithCoordinate:trueLocation]; 

     CLLocation *bizLoc = [[CLLocation alloc] initWithLatitude:trueLocation.latitude longitude:trueLocation.longitude]; 

     CLLocation *userLocation = [[CLLocation alloc] initWithLatitude:nearbyMapView.userLocation.coordinate.latitude longitude:nearbyMapView.userLocation.coordinate.longitude]; 
     //double distance = [userLocation getDistanceFrom: bizLoc]/1000; 

     double kilometers = [userLocation distanceFromLocation:bizLoc]/1000; 

     NSLog(@"Distance from %@ to current location is %g",mapStringLocation,kilometers); 

     if(kilometers < maxDistance) 
     {  
      [self.nearbyMapView addAnnotation:addAnnotation]; 
      [addAnnotation release]; 
     } 

     x++; 
    } 

    [pool release];   
} 

-(void)getNumOfBusinesses 
{  
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init]; 

    NSString *numOfBizJSON = [[NSString alloc]initWithContentsOfURL:[NSURL URLWithString:[NSString stringWithFormat:@"numOfBiz.php"]]]; 

    NSString *bizIDSJSON = [[NSString alloc]initWithContentsOfURL:[NSURL URLWithString:[NSString stringWithFormat:@"allBizIDSJSON.php"]]]; 

    SBJsonParser *parser = [[SBJsonParser alloc]init]; 
    numOfBiz = [[parser objectWithString:numOfBizJSON error:nil]copy]; 
    bizIDS = [[parser objectWithString:bizIDSJSON error:nil]copy]; 
    NSLog(@"biz id 1 = %@",[bizIDS objectAtIndex:0]); 
    [parser release]; 
    [numOfBizJSON release]; 
    [bizIDSJSON release]; 

    [pool release]; 
} 
+0

源數據是否可能嵌入GPS位置以及他們的地址?或者更好的是,您打電話給的web服務提供一個摘要,其中包括所有業務中的一個命中。如果你有太多不合適的答案,那麼你就有太多的問題需要單獨循環。 – Craig

回答

0

這並不難。您可以獲取所有數據,計算出您與該位置之間的距離。下一步將比較距離和最大距離(搜索半徑)。如果距離爲< maxDistance,則添加可以顯示該位置。

我認爲這可能用很少的可可知識來實現​​......

如果您需要更具體的東西,開始編碼,我會幫你。