首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对Mapbox中的低dpi栅格切片使用下一个缩放级别,以获得高分辨率的栅格切片

对Mapbox中的低dpi栅格切片使用下一个缩放级别,以获得高分辨率的栅格切片
EN

Stack Overflow用户
提问于 2019-08-26 23:38:10
回答 2查看 230关注 0票数 1

如果为iOS MKMapView提供256x256像素的栅格源,它将加载同一区域的四个缩放级别为+1的平铺。因此,看起来磁贴似乎处于高dpi模式。太棒了!

现在,我有一个应用程序,它使用第三方来源的栅格瓷砖。问题是数据看起来低得可怕-dpi。

有没有办法告诉Mapbox,它应该加载给定源的每个瓦片的下一个缩放级别,并使用它?

因此,它应该加载1/0/0.jpg1/1/0.jpg1/0/1.jpg1/1/1.jpg,并将它们用于缩放级别0,而不是加载整个世界的瓦片0/0/0.jpg。因此,基本上不是只有一张256x256的图像,而是有四张这样的图像,512x512的图像看起来更清晰。

问题是..。有没有办法不仅对iOS这样做,而且在对源代码的描述中也这样做?所以它也适用于Web和Android吗?

EN

回答 2

Stack Overflow用户

发布于 2019-08-27 21:55:57

您可以在RasterVector切片的请求中使用@2x标志从Mapbox请求512X512切片

您的查询应该如下所示。请注意查询字符串之前的@2x

代码语言:javascript
复制
https://api.mapbox.com/v4/mapbox.satellite/1/0/0@2x.png?access_token={access_token}
票数 0
EN

Stack Overflow用户

发布于 2020-05-21 07:30:32

为什么不直接放大你的瓦片覆盖子类中的256张图片呢?

代码语言:javascript
复制
- (void)loadTileAtPath:(MKTileOverlayPath)path result:(void (^)(NSData *, NSError *))result {

    if (!result) {
        return;
    }

    self.tileSize = CGSizeMake(512, 512);

    NSString *URLString = [self.internalTemplate stringByReplacingOccurrencesOfString:@"{x}" withString:[NSString stringWithFormat:@"%li", (long)path.x]];
    URLString = [URLString stringByReplacingOccurrencesOfString:@"{y}" withString:[NSString stringWithFormat:@"%li", (long)path.y]];
    URLString = [URLString stringByReplacingOccurrencesOfString:@"{z}" withString:[NSString stringWithFormat:@"%li", (long)path.z]];

    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:URLString]];
    NSURLSessionDataTask *task = [[NSURLSession sharedSession] dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {

        if (error) {
            NSLog(@"%@", error);
        }

        UIImage *image = [UIImage imageWithData:data];
        UIImage *resized = [self imageWithImage:image scaledToSize:CGSizeMake(512, 512)];

        result(UIImagePNGRepresentation(resized), error);

    }];
    [task resume];

}

- (UIImage *)imageWithImage:(UIImage *)image scaledToSize:(CGSize)newSize {
    UIGraphicsBeginImageContextWithOptions(newSize, NO, 1.0);
    [image drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return newImage;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57660976

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档