计算要在MapRect中显示的切片,以便在iPad中显示总世界地图

时间:2013-01-22 12:45:32

标签: google-maps ios6 mkoverlay

我正在开发一款使用MKOverlay视图在Google基本地图上叠加我自己的自定义地图的应用。但它显示地图如下:

enter image description here

但是我必须显示如下所示的地图:

enter image description here

我的代码如下:

- (NSArray *)tilesInMapRect:(MKMapRect)rect zoomScale:(MKZoomScale)scale
{

    NSInteger z = zoomScaleToZoomLevel(scale);

    NSInteger minX = floor((MKMapRectGetMinX(rect) * scale) / TILE_SIZE);
    NSInteger maxX = floor((MKMapRectGetMaxX(rect) * scale) / TILE_SIZE);
    NSInteger minY = floor((MKMapRectGetMinY(rect) * scale) / TILE_SIZE);
    NSInteger maxY = floor((MKMapRectGetMaxY(rect) * scale) / TILE_SIZE);

    NSMutableArray *tiles = nil;

    NSInteger tilesAtZ = pow(2, z);
  //  NSLog(@"max x and max y is:::%d %d",maxX,maxY);

    for (NSInteger x = minX; x <maxX; x++) {
        for (NSInteger y = minY; y <maxY; y++) {
            // OSM
            //NSString *tileKey = [[NSString alloc] initWithFormat:@"%d/%d/%d", z, x, y]; // was flippedY
          //   NSInteger flippedY = abs(y + 1 - tilesAtZ);

            // Google maps
            NSString *tileKey = [[NSString alloc] initWithFormat:@"x=%d&y=%d&z=%d", x, y, z];

//            NSString *tileKey = [[NSString alloc]
//                                 initWithFormat:@"x=%d&y=%d&z=%d", x, flippedY, z];

            if (!tiles) {
                tiles = [NSMutableArray array];
            }

           NSLog(@"x y and z are:::%d %d %d",x,y,z);

            MKMapRect frame = MKMapRectMake((double)(x * TILE_SIZE) / scale,
                                            (double)(y * TILE_SIZE) / scale,
                                            TILE_SIZE/scale,
                                            TILE_SIZE/scale);
//            NSLog(@"frame is::%f %f %f %f",(double)(x * TILE_SIZE) / scale,(double)(y * TILE_SIZE) / scale, TILE_SIZE / scale, TILE_SIZE / scale);

            ImageTile *tile = [[ImageTile alloc] initWithFrame:frame path:tileKey];
            [tiles addObject:tile];
            [tile release];
            [tileKey release];
        }
    }
   // NSLog(@"tiles are ::%@",tiles);
    return tiles;
}

请帮助我获得我需要的输出。 提前谢谢。

1 个答案:

答案 0 :(得分:0)

您只需将初始区域设置为世界(常量MKMapRectWorld),如下所示:

MKCoordinateRegion worldRegion = MKCoordinateRegionForMapRect(MKMapRectWorld);
map.region = worldRegion;

通常将此代码放在viewDidLoad中:初始化MKMapView。