对Mapbox中的低dpi光栅分幅使用“下一个缩放级别”,以获得高分辨率光栅分幅
iOS对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的图像,而是四张,这样一来
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做同样的事情,那就太好了