Я пытался прочитать как можно больше статей на эту тему.AFAIK Я делаю это правильно, однако моя карта никогда не показывает результаты моих звонков.Я пытаюсь посмотреть на слой depositation_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;
}
}
Незначительный вопрос: как мне посчитать количество запросов, которые я делаю?Кажется, что я делаю это, не считая все запросы, которые я делаю, и меня очень быстро закрывают.
Спасибо за любую помощь.
[РЕДАКТИРОВАТЬ] Я действительно сделал подкласс для этогокэшируйте плитки, однако они всегда белые (когда я копирую / вставляю ссылку в браузере), но я все еще не вижу их на карте.Карта просто показывает карту нормалей (ничего не изменилось).Я попытался изменить 'canReplaceMapContent' на false с теми же результатами.Я проверил, что попал в строку результата (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()
}
}