Как показать местоположение пользователя и дополнительные точки на карте iPhone? - PullRequest
3 голосов
/ 29 марта 2010

В основном я хочу показать местоположение пользователей плюс список выбранного местоположения на карте. У этого могут даже быть стандартные аннотации iphone. Но я понятия не имею об общих шагах, которые я бы предпринял для достижения этой цели. Буду ли я использовать MKMapView, или Core Location, или оба? Может ли кто-нибудь дать мне простую схему шагов или ссылку на хороший учебник или пример кода. Спасибо

Чтобы расширить, мне было интересно, есть ли где-нибудь примеры того, как обращаться с массивами локаций. Я предполагаю, что мне нужно будет определить местоположение пользователей, а затем установить радиус того, как далеко я хочу ссылаться на местоположения вдали от пользователя, а затем заполнить этот радиус массивом местоположений, которые соответствуют этому радиусу. Мои мысли по этому поводу верны? И есть ли примеры того, как сделать хотя бы часть этого. Я видел множество примеров того, как показывать одно местоположение, но ни одно из них не касается нескольких местоположений.

Ответы [ 2 ]

5 голосов
/ 20 января 2011

Вот кое-что, что я использую, которое может вам помочь. Это даст вам MKCoordinateRegion, который соответствует массиву CLLocations. Затем вы можете использовать этот регион для передачи его в MKMapView setRegion: animated:

// create a region that fill fit all the locations in it
+ (MKCoordinateRegion) getRegionThatFitsLocations:(NSArray *)locations {
    // initialize to minimums, maximums
    CLLocationDegrees minLatitude = 90;
    CLLocationDegrees maxLatitude = -90;
    CLLocationDegrees minLongitude = 180;
    CLLocationDegrees maxLongitude = -180;

    // establish the min and max latitude and longitude
    // of all the locations in the array
    for (CLLocation *location in locations) {
        if (location.coordinate.latitude < minLatitude) {
            minLatitude = location.coordinate.latitude;
        }
        if (location.coordinate.latitude > maxLatitude) {
            maxLatitude = location.coordinate.latitude;
        }
        if (location.coordinate.longitude < minLongitude) {
            minLongitude = location.coordinate.longitude;
        }
        if (location.coordinate.longitude > maxLongitude) {
            maxLongitude = location.coordinate.longitude;
        }
    }

    MKCoordinateSpan span;
    CLLocationCoordinate2D center;
    if ([locations count] > 1) {
        // for more than one location, the span is the diff between
        // min and max latitude and longitude
        span =  MKCoordinateSpanMake(maxLatitude - minLatitude, maxLongitude - minLongitude);
        // and the center is the min + the span (width) / 2
        center.latitude = minLatitude + span.latitudeDelta / 2;
        center.longitude = minLongitude + span.longitudeDelta / 2;
    } else {
        // for a single location make a fixed size span (pretty close in zoom)
        span =  MKCoordinateSpanMake(0.01, 0.01);
        // and the center equal to the coords of the single point
        // which will be the coords of the min (or max) coords 
        center.latitude = minLatitude;
        center.longitude = minLongitude;
    }

    // create a region from the center and span
    return MKCoordinateRegionMake(center, span);
}

Поскольку вы, вероятно, уже созданы, вам нужно использовать MKMapView и Core Location, чтобы делать то, что вы хотите. В моем приложении я знаю, какие местоположения я хочу отобразить, а затем делаю MKMapView достаточно большим, чтобы вместить их всех. Приведенный выше метод поможет вам сделать это. Однако, если вы хотите получить список местоположений, которые вписываются в данный регион карты, то вам придется сделать более или менее обратное тому, что я делаю выше.

...