gpt4 book ai didi

ios - openweathermap MKTileOverlay 不显示在 map View 中

转载 作者:行者123 更新时间:2023-11-29 06:02:25 25 4
gpt4 key购买 nike

我尝试尽可能多地阅读有关此主题的文章。 AFAIK我这样做是正确的,但是我的 map 从未显示结果我的电话。我想看看沉淀_新层和在测试时,我将模拟器位置设置为当前的区域显示降水,但我在 map 上看不到任何东西。这是我的也是第一次尝试使用 MKTileOverlay。

我尝试将 canReplaceMapContent 更改为 NO 和 YES 以及改变具有相同结果的 alpha。

我已验证我的 map 委托(delegate)已连接并可用于我的所有其他 map 调用。我还知道我正在下载请求,因为 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;
}
}

一个小问题:如何计算我发出的请求数量?看来我这样做的方式并没有计算所有的请求我正在制作,但很快就被关闭了。

感谢您的帮助。

[编辑]我实际上做了子类化它来缓存图 block ,但是图 block 始终是白色的(当我在浏览器中复制/粘贴链接时),但我仍然没有看到它们显示在 map 上。该 map 仅显示法线贴图(没有任何变化)。我尝试将“canReplaceMapContent”更改为 false,但结果相同。我验证了我到达了 result(data, nil) 行,它在应包含降水的图 block 上显示了 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()
}
}

最佳答案

您的代码实际上运行得很好,只需将 URL 设置为 https://tile.openweathermap.org/{z}/{x}/{y}.png?appid=<my_app_id>什么时候应该是https://tile.openweathermap.org/map/precipitation_new/{z}/{x}/{y}.png?appid=<my_app_id> 。请求数量完全错误,但图 block 确实显示正确。您可能还想设置 canReplaceMapContent为假。

当我使用您的代码时,它总共发出了 28 个显示美国大陆的请求。我对 MKTileOverlay 进行了子类化,以添加有助于解决 API 限制的缓存机制。

关于ios - openweathermap MKTileOverlay 不显示在 map View 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54497461/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com