簡體   English   中英

GMSTileURLConstructor返回縮放的奇怪數據

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM