对Mapbox中的低dpi光栅分幅使用“下一个缩放级别”,以获得高分辨率光栅分幅

对Mapbox中的低dpi光栅分幅使用“下一个缩放级别”,以获得高分辨率光栅分幅,mapbox,mapbox-gl-js,mapbox-gl,mapbox-android,mapbox-ios,Mapbox,Mapbox Gl Js,Mapbox Gl,Mapbox Android,Mapbox Ios,iOSMKMapView,如果提供256x256像素的光栅源,将加载同一区域的+1缩放级别的四个分幅。因此,瓷砖似乎处于高dpi模式。太棒了 现在我有了一个应用程序,它使用了第三方的光栅分幅源。问题是数据的dpi看起来非常低 有没有办法告诉Mapbox它应该加载给定源的每个磁贴的下一个缩放级别并使用它 因此,它应该加载1/0/0.jpg,1/1/0.jpg,1/1/0.jpg,1/0/1.jpg和1/1/1.jpg并将其用于缩放级别0。因此,基本上不用一张256x256的图像,而是四张,这样一来

iOS
MKMapView
,如果提供256x256像素的光栅源,将加载同一区域的+1缩放级别的四个分幅。因此,瓷砖似乎处于高dpi模式。太棒了

现在我有了一个应用程序,它使用了第三方的光栅分幅源。问题是数据的dpi看起来非常低

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

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


问题是。。。有没有一种方法不仅可以用于iOS,还可以用于源代码的描述?因此它也适用于Web和Android?

您可以在请求和磁贴时使用
@2x
标志从Mapbox请求512X512磁贴

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

https://api.mapbox.com/v4/mapbox.satellite/1/0/0@2x.png?access_token={access_token}

您可以在请求和磁贴时使用
@2x
标志从Mapbox请求512X512磁贴

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

https://api.mapbox.com/v4/mapbox.satellite/1/0/0@2x.png?access_token={access_token}

为什么不在平铺覆盖子类中放大256图像

- (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;
}

为什么不在平铺覆盖子类中放大256图像

- (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;
}

图像的请求URL是什么样子的?它只是一个常规URL,末尾有
{z}/{x}/{y}.jpg
。但我想这不会影响答案,对吧?这确实有帮助。我会把我的答案放在下面。你的图片的请求URL是什么样子的?它只是一个常规URL,结尾是
{z}/{x}/{y}.jpg
。但我想这不会影响答案,对吧?这确实有帮助。我会把我的答案放在下面。是的。。。但我的url不提供512px图片。。。只有256。。。我想知道是否有可能通过将4个瓷砖组合成一个来告诉Mapbox提高它们的比例…哦,我明白了。我想我误解了你原来的问题。您从第三方获得的瓷砖是低分辨率的,是吗?没错。苹果地图将继续进行,而不是为缩放级别10获取一个f.e.瓷砖,它将为缩放级别11自动获取4个瓷砖,并为缩放级别10将它们缝合到一个更大的瓷砖上。。。如果能够用mapboxYes做同样的事情,那就太好了。。。但我的url不提供512px图片。。。只有256。。。我想知道是否有可能通过将4个瓷砖组合成一个来告诉Mapbox提高它们的比例…哦,我明白了。我想我误解了你原来的问题。您从第三方获得的瓷砖是低分辨率的,是吗?没错。苹果地图将继续进行,而不是为缩放级别10获取一个f.e.瓷砖,它将为缩放级别11自动获取4个瓷砖,并为缩放级别10将它们缝合到一个更大的瓷砖上。。。如果能够用mapbox做同样的事情,那就太好了