3

MKMapView現在のユーザーの場所を示す があります。ナビゲーション バーのボタンをクリックすると、ランダムに 10 個のピンをドロップしたいと考えていMKAnnotationます。これらはどこにでも、ランダムにドロップできますが、現在表示されているマップ エリア内および現在の場所の周辺に限られます。

このようなことをするのはどうですか?ユーザーの場所の周囲であるが、マップ領域内にある長い/緯度の範囲を持つ方法はありますか? では、この範囲からランダムに選択できますか?

基本的に、現在の で利用可能な座標を見つける必要がありますMKCoordinateRegion

これについてもっと良い方法はありますか?

4

4 に答える 4

4

ユーザーの場所と他の場所の間の距離を使用して注釈を取得できます

以下のコードをチェックしてください

#define DISTANCE_RADIUS     10.0    // in KM
-(NSArray *)findNearMe:(NSArray *)lounges {
NSMutableArray *arNearme = [NSMutableArray array];

CLLocation *currentLocation;
for(NSDictionary *d in lounges) 
{

currentLocation = [[CLLocation alloc] initWithLatitude:29.33891 longitude:48.077202];

    CGFloat latitude=[[d valueForKey:@"latitude"] floatValue];
    CGFloat longitude=[[d valueForKey:@"longitude"] floatValue];
    CLLocation *newPinLocation=[[CLLocation alloc] initWithLatitude:latitude longitude:longitude];
    double distanceValue=[currentLocation distanceFromLocation:newPinLocation]; 

    if(distanceValue/1000.0<=DISTANCE_RADIUS) {
        [arNearme addObject:d];
    }
}
return  arNearme;
}

ユーザーの場所から 1 ~ 1000 km の範囲の配列が返されます。注釈配列を使用し、注釈をユーザーの場所を含むマップ ビューに表示します。

于 2012-05-22T04:42:39.637 に答える
2

私はそれを理解しました、これが私がそれをした方法です:

/**
 * Adds new pins to the map
 *
 * @version $Revision: 0.1
 */
+ (void)addPinsToMap:(MKMapView *)mapView amount:(int)howMany {

    //First we need to calculate the corners of the map so we get the points
    CGPoint nePoint = CGPointMake(mapView.bounds.origin.x + mapView.bounds.size.width, mapView.bounds.origin.y);
    CGPoint swPoint = CGPointMake((mapView.bounds.origin.x), (mapView.bounds.origin.y + mapView.bounds.size.height));

    //Then transform those point into lat,lng values
    CLLocationCoordinate2D neCoord = [mapView convertPoint:nePoint toCoordinateFromView:mapView];
    CLLocationCoordinate2D swCoord = [mapView convertPoint:swPoint toCoordinateFromView:mapView];

    // Loop
    for (int y = 0; y < howMany; y++) {
        double latRange = [MapUtility randomFloatBetween:neCoord.latitude andBig:swCoord.latitude];
        double longRange = [MapUtility randomFloatBetween:neCoord.longitude andBig:swCoord.longitude];

        // Add new waypoint to map
        CLLocationCoordinate2D location = CLLocationCoordinate2DMake(latRange, longRange);
        MPin *pin = [[MPin alloc] init];
        pin.coordinate = location;
        [mapView addAnnotation:pin];

    }//end

}//end


/**
 * Random numbers
 *
 * @version $Revision: 0.1
 */
+ (double)randomFloatBetween:(double)smallNumber andBig:(double)bigNumber {
    double diff = bigNumber - smallNumber;
    return (((double) (arc4random() % ((unsigned)RAND_MAX + 1)) / RAND_MAX) * diff) + smallNumber;
}//end
于 2012-05-22T04:34:36.113 に答える