openweathermap MKTileOverlay不会在图形页面显示

时间:2019-02-02 20:59:43

标签: ios openweathermap mktileoverlay

香港专业教育学院试图读出关于这一主题尽可能多篇。据我所知 我正确执行此操作,但是我的地图从未显示结果 我的电话。我试着去看看precipitation_new层和 在测试我我的模拟器位置设置到当前的区域 出沉淀,但我从来没有看到在我的地图什么。这是我的 在使用MKTileOverlay以及第一次尝试。

我尝试将canReplaceMapContent更改为NO和YES,以及 所述α具有相同的结果。

我已验证我的地图代表是否已连接并且可以为我所有其他地图调用工作。我也知道即时消息正在下载请求,因为openweathermap也阻止了我多次致电其网站 经常(我现在每分钟只有60请求)。

我正在执行以下操作:

- (void) setupTileRenderer
{
    NSString *tileTemplate = @"https://tile.openweathermap.org/{z}/{x}/{y}.png?appid=<my_app_id>";
    MKTileOverlay *tileOverlay = [[MKTileOverlay alloc] initWithURLTemplate:tileTemplate];
    tileOverlay.minimumZ = 2;
    tileOverlay.maximumZ = 16;

    tileOverlay.canReplaceMapContent = YES;
    _tileRenderer = [[MKTileOverlayRenderer alloc] initWithTileOverlay:tileOverlay];
    _tileRenderer.alpha = 0.5;

    DISPATCH_ASYNC {
        [_mapView addOverlay:tileOverlay level:MKOverlayLevelAboveLabels];
    });
}

- (MKOverlayRenderer *)mapView:(MKMapView *)mapView rendererForOverlay:(id <MKOverlay>)overlay
{
    if ([overlay isKindOfClass:[MKTileOverlay class]])
    {
        _tileRendererRequests++;
        if (_tileRendererRequests > 55) {
            NSLog(@"OWMREQ - too many requests per min");
        }
        NSLog(@"OWMREQ _tileRendererRequests: %ld", (long)_tileRendererRequests);
        return _tileRenderer;
    }
}

一个小问题:如何计算我提出的请求数量? 看来,Im做它的方式是不计算所有请求 林让我得到非常迅速关闭。

感谢您的帮助。

[EDIT]实际上,我确实将其子类化以缓存图块,但是图块始终是白色的(当我在浏览器中复制/粘贴链接时),但是我仍然看不到它们显示在地图上。该地图仅显示法线地图(未更改)。我尝试将'canReplaceMapContent'更改为false,结果相同。我验证我到达了result(data,nil)行,它显示了应该包含降水的图块上的1444字节计数。我用另一种雷达的应用验证,我一直在寻找有雨。这是我的代码:

override func loadTile(at path: MKTileOverlayPath, result: @escaping (Data?, Error?) -> Void) {

    let baseURL = "https://tile.openweathermap.org/map/precipitation_new/"
    let key = String(path.x) + "|" + String(path.y) + "|" + String(path.z)

    if let thisImg = cachedData.getRadarTileObject(key: key) {
        result(thisImg, nil)
    }
    else {
        let keyid = "my key id"
        let url = self.baseURL + String(path.z) + "/" + String(path.x) + "/" + String(path.y) + ".png?appid=" + keyid
        let theUrl = URL(string: url)
        print("URL: \(url)")
        let request = NSMutableURLRequest.init(url: theUrl!, cachePolicy: .useProtocolCachePolicy, timeoutInterval: 30)
        request.httpMethod = "GET"

        let session = URLSession.shared
        let dataTask = session.dataTask(with: request as URLRequest) {data,response,error in

            if error == nil {
                if let count = data?.count {
                    if count > 0 {
                        result(data, nil)
                        return
                    }
                }
            }
            else {
                print("ERROR loading tile data: \(String(describing: error?.localizedDescription))")
            }
            result(nil, nil)
        }
        dataTask.resume()
    }
}

0 个答案:

没有答案