[英]GMSTileURLConstructor Returns Strange Data for Zoom
我正在嘗試使用GMSTileURLConstructor
在Google Maps for iOS上繪制自定義疊加層。
我使用以下代碼來獲取我的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];
};
當我注銷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];
}
}
哪個日志
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相關的問題,並修復了崩潰。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.