Jer*_*026 6 google-maps ios google-maps-sdk-ios
我正在尝试使用Google在Google地图上绘制自定义叠加层GMSTileURLConstructor.
我使用以下代码来获取我的URL
GMSTileURLConstructor urls = ^(NSUInteger x, NSUInteger y, NSUInteger zoom) {
NSString *url = @"";
for (NSDictionary *limits in [selectedPropertyMap objectForKey:@"property_map_zoom_levels"]) {
int zoomLevel = [[limits objectForKey:@"level"] intValue];
int tileMinX = 0;
int tileMaxX = 0;
int tileMinY = 0;
int tileMaxY = 0;
if ([limits objectForKey:@"tile_min_x"] != (id)[NSNull null]) {
tileMinX = [[limits objectForKey:@"tile_min_x"] intValue];
}
if ([limits objectForKey:@"tile_max_x"] != (id)[NSNull null]) {
tileMaxX = [[limits objectForKey:@"tile_max_x"] intValue];
}
if ([limits objectForKey:@"tile_min_y"] != (id)[NSNull null]) {
tileMinY = [[limits objectForKey:@"tile_min_y"] intValue];
}
if ([limits objectForKey:@"tile_max_y"] != (id)[NSNull null]) {
tileMaxY = [[limits objectForKey:@"tile_max_y"] intValue];
}
if (zoomLevel == (unsigned long)zoom) {
if ((tileMinX <= x) && (tileMaxX >= x) && (tileMinY <= y) && (tileMaxY >= y)) {
url = [NSString stringWithFormat:@"%@%@/%@/%@/%lu_%lu.png", MAP_URL, [property objectForKey:@"id"], [limits objectForKey:@"property_map_id"], [limits objectForKey:@"id"], (unsigned long)x, (unsigned long)y];
NSLog(@"url -> %@/zoom %lu/%i",url, (unsigned long)zoom, zoomLevel);
return [NSURL URLWithString:url];
}
}
}
return [NSURL URLWithString:url];
};
Run Code Online (Sandbox Code Playgroud)
当我注销URL,缩放和zoomLevel时,我得到以下信息:
2014-05-16 17:25:15.621 Application[24491:61003] url -> <BASEURL>/16/9/19/159786_195303.png/zoom 19/19
同时,我在相机改变时记录相机变焦
- (void)mapView:(GMSMapView *)mapView didChangeCameraPosition:(GMSCameraPosition *)position {
zoomLevelLabel.text = [NSString stringWithFormat:@"ZL: %.2f",position.zoom];
NSLog(@"camera changed - zoom %f",position.zoom);
[self hideMarkersBasedOnZoom:position.zoom];
if(position.zoom > 21) {
GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:position.target.latitude longitude:position.target.longitude zoom:21];
[mapView_ setCamera:camera];
}
}
Run Code Online (Sandbox Code Playgroud)
哪个日志
2014-05-16 17:25:15.640 Application[24491:60b] camera changed - zoom 18.022364
任何人都可以解释缩放级别值的差异以及如何使其适当匹配吗?
我做了一些研究之后,我相信谷歌处理的方式缩放级别为GMSTileLayer不与缩放级别相同camera of mapView.
GMSTileLayer类参考
https://developers.google.com/maps/documentation/ios/reference/interface_g_m_s_tile_layer
在缩放级别0处,整个世界是由单个图块覆盖的正方形,并且该图块的坐标x和y都是0.在缩放级别1,世界被4个瓦片覆盖,x和y为0或1,依此类推.
对于mapView相机
https://developers.google.com/maps/documentation/ios/views#zoom
相机的缩放级别决定了地图的比例.在更大的缩放级别,可以在屏幕上看到更多细节,而在较小的缩放级别,可以在屏幕上看到更多的世界.在缩放级别0处,地图的比例使得整个世界具有大约256个点的宽度.
将缩放级别增加1会使屏幕上的世界宽度加倍.因此,在缩放级别N,世界的宽度大约是256*2N,即,在缩放级别2,整个世界大约是1024点宽.请注意,缩放级别不必是整数.地图允许的缩放级别范围取决于许多因素,包括位置,地图类型和屏幕大小.
对于变焦GMSTileLayer是NSUInteger而变焦camera是浮动.GMSTileLayer的缩放用于确定切片的数量.而相机的变焦用于根据公式256*2N确定点数.
我可能错了,但我认为两个缩放级别都不匹配.
不太相关:谷歌刚刚发布了iOS Maps SDK V1.8.1,解决了与GMSTileLayer相关的问题,并修复了崩溃.