我正在尝试放大 map ,该 map 的重点是与该 map 关联的所有图钉。我将这些信息保存在我的 map 属性中。

我从这个开始,但是还不能正常工作:

    double maxLatitude = 0;
    double minLatitude = 0;

    double maxLongitude = 0;
    double minLongitude = 0;

    for (MKAnnotation *address in self.map.locations) {
        // Latitude
        if ([address.latitude doubleValue] > 0) {
            maxLatitude = MAX(maxLatitude, [address.latitude doubleValue]);
        }
        else {
            minLatitude = MAX(abs(minLatitude), abs([address.latitude doubleValue]));
        }

        // Longitude
        if ([address.longitude doubleValue] > 0) {
            maxLongitude = MAX(maxLongitude, [address.longitude doubleValue]);
        }
        else {
            minLongitude = MAX(abs(minLongitude), abs([address.longitude doubleValue]));
        }
    }
    double centerLatitude = (maxLatitude - abs(minLatitude)) / 2;
    centerLatitude *= [self calculateSignWithFirstValue:maxLatitude secondValue:minLatitude];

    double centerLongitude = (maxLongitude - abs(minLongitude)) / 2;
    centerLongitude *= [self calculateSignWithFirstValue:maxLongitude secondValue:minLongitude];

//用坐标创建一些MKMapRect吗?

我不认为我了解MKMapRect,尽管自从我尝试执行以下操作时:
    CLLocationCoordinate2D theOrigin = CLLocationCoordinate2DMake(32, -117);
    MKMapRect mapRect;
    mapRect.origin = MKMapPointForCoordinate(theOrigin);
    mapRect.size = MKMapSizeMake(10, 10);

我被放在海洋而不是圣地亚哥上空。不确定MKMapRect发生了什么。

最佳答案

/**
 * Return a region covering all the annotations in the given array.
 * @param annotations Array of objects conforming to the <MKAnnotation> protocol.
 */
+(MKCoordinateRegion) regionForAnnotations:(NSArray*) annotations
{
    double minLat=90.0f, maxLat=-90.0f;
    double minLon=180.0f, maxLon=-180.0f;

    for (id<MKAnnotation> mka in annotations) {
        if ( mka.coordinate.latitude  < minLat ) minLat = mka.coordinate.latitude;
        if ( mka.coordinate.latitude  > maxLat ) maxLat = mka.coordinate.latitude;
        if ( mka.coordinate.longitude < minLon ) minLon = mka.coordinate.longitude;
        if ( mka.coordinate.longitude > maxLon ) maxLon = mka.coordinate.longitude;
    }

    CLLocationCoordinate2D center = CLLocationCoordinate2DMake((minLat+maxLat)/2.0, (minLon+maxLon)/2.0);
    MKCoordinateSpan span = MKCoordinateSpanMake(maxLat-minLat, maxLon-minLon);
    MKCoordinateRegion region = MKCoordinateRegionMake (center, span);

    return region;
}

// usage
MKCoordinateRegion region = [XXXX regionForAnnotations:self.mapView.annotations];
[self.mapView setRegion:region animated:YES];

MKMapView缩放到离散的间隔,这意味着如果您缩放随机区域,它将选择最近的缩放间隔。这可能与图块的分辨率有关,但是AFAIK没有记录。

08-27 19:11