2016-07-01 3 views
0

GMSTileURLConstructor GMSURLTileLayer не показывая плиткиGoogle Map изо Мозаичный слой не работает GMSTileURLConstructor GMSURLTileLayer

Я пытаюсь наложить свои собственные плитки (tilestream) на верхней карте Google. Но это провалилось. Поэтому я решил попробовать накладывать открытые фрагменты карты поверх карты google, поскольку URL-адрес tileestream такой же структуры, как URL-адрес для openstreet map. Оба http://xxx/z/x/y.png

использование GMSTileURLConstructor GMSURLTileLayer, но не показывая плитки

только Google SDKdemo образец работает отлично. URL-адрес является:

NSString *url = [NSString stringWithFormat:@"https://www.gstatic.com/io2010maps/tiles/9/L1_%tu_%tu_%tu.png",zoom, x, y]; 

, если я использую openstreet URL, он не смог показать пользовательские плитки на любом уровне масштабирования.

NSString *url = [NSString stringWithFormat:@"http://a.tile.openstreetmap.org/%tu/%tu/%tu.png", (unsigned long)zoom, (unsigned long)x, (unsigned long)y]; 

zIndex установлен в 99, 100, 1, все еще не отображается плитка.

Я подтверждаю, что сервер плитки работает нормально, изображение плитки правильно получено, если я напрямую использую URL в браузере.

также образец рисунка плана Google, плита, зум, x, y в точности соответствует карте открывания, x, y.

Я не понимаю, почему URL-адрес URL-шаблона Google хорошо работает, но openstreet map url tiles DOSE NOT показывается.

вот мой код: кто знает почему?

- (void)viewDidLoad { 
[super viewDidLoad]; 


//------------- google map ------------ 

// GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:33.6599244 
//               longitude:-117.915058135 
//                 zoom:13]; 

    GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:37.78318 
                  longitude:-122.403874 
                   zoom:18]; 




mapView_ = [GMSMapView mapWithFrame:CGRectZero camera:camera]; 
//mapView_.myLocationEnabled = YES; 
mapView_.mapType = kGMSTypeHybrid; 
mapView_.buildingsEnabled = NO; 
mapView_.indoorEnabled = NO; 

self.view = mapView_; 




// Create a new GMSTileLayer with the new floor choice. 
GMSTileURLConstructor urls = ^(NSUInteger x, NSUInteger y, NSUInteger zoom) { 

    //NSString *url = [NSString stringWithFormat:@"https://www.gstatic.com/io2010maps/tiles/9/L1_%tu_%tu_%tu.png",zoom, x, y]; 



    //NSString *url = [NSString stringWithFormat:@"http://tile.openstreetmap.org/%tu/%tu/%tu.png", zoom, x, y]; 
    NSString *url = [NSString stringWithFormat:@"http://a.tile.openstreetmap.org/%tu/%tu/%tu.png", (unsigned long)zoom, (unsigned long)x, (unsigned long)y]; 

    NSLog(@"%@", url); 
    return [NSURL URLWithString:url]; 
}; 
layer = [GMSURLTileLayer tileLayerWithURLConstructor:urls]; 


layer.zIndex = 1; 
layer.opacity= 0.5; 

layer.map = mapView_; 
+0

Это на андроид? – geocodezip

+0

нет, это на ios iphone – hoogw

+0

Как получить x и y? –

ответ

1

через 10 часов попробуйте и не удалось, я наконец нашел почему?

Это связано с тем, что блок настройки безопасности не загружает изображения с плитки, json, ничего из удаленного сервера.

Сообщение об ошибке на консоли:

Ресурс не может быть загружен, потому что политика App безопасности транспорта требует использования защищенного соединения

решение:

  1. открыл свой Проекты info.plist файл (в качестве источника)
  2. добавить ключ

    <key>NSAppTransportSecurity</key> 
    <dict> 
        <key>NSAllowsArbitraryLoads</key> 
        <true/> 
        <key>NSExceptionDomains</key> 
        <dict> 
         <key>yourdomain.com</key> 
         <dict> 
          <key>NSIncludesSubdomains</key> 
          <true/> 
          <key>NSThirdPartyExceptionRequiresForwardSecrecy</key> 
          <false/> 
         </dict> 
        </dict> 
    

Сейчас он работает, я успешно накладывать openstreet карту поверх карты Google, и я могу также накладывать какие-либо пользовательские плитки с любого сервера плитки поверх карты Google.

Смежные вопросы