2016-07-01 5 views
0

GMSTileURLConstructor GMSURLTileLayer nicht Kacheln zeigtgoogle map iso Kachel Arbeitslayer nicht GMSTileURLConstructor GMSURLTileLayer

Ich versuche, meine eigenen Fliesen (tilestream) oben auf Google-Map zu überlagern. Aber es ist fehlgeschlagen. Also entscheide ich mich, overlay openstreet map-Kacheln über google map zu versuchen, weil die Kachel-URL für tilestream dieselbe Struktur wie die URL für openstreet map hat. Beide sind http://xxx/z/x/y.png

Verwendung GMSTileURLConstructor GMSURLTileLayer, aber nicht zeigen, Fliesen

Nur SDKdemo Probe funktioniert Google. die URL ist:

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

wenn ich Openstreet URL verwenden, es ist fehlgeschlagen benutzerdefinierte Fliesen zu jeder Zoomstufe angezeigt werden soll.

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

zIndex auf 99, 100, 1 eingestellt, Kacheln werden immer noch nicht angezeigt.

Ich bestätige, der Kachelserver funktioniert einwandfrei, das Kachelbild wird korrekt empfangen, wenn ich die URL direkt im Browser verwende.

auch Google Beispiel Grundriss Kachel, Zoom, x, y genau übereinstimmen openstreet Karte zoom, x, y.

Ich verstehe nicht, warum google sample Tile URL gut funktioniert, aber openstreet map url Fliesen DOSE NICHT zeigt.

Hier ist mein Code: jemand weiß warum?

- (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

Ist dies auf Android? – geocodezip

+0

nein, es ist auf ios iphone – hoogw

+0

Wie bekomme ich x und y? –

Antwort

1

nach 10 Stunden versuchen und fehlgeschlagen, fand ich endlich warum?

Es ist, weil Sicherheitseinstellung blockieren von Kacheln Bilder, JSON, alles von Remote-Server herunterladen.

Die Fehlermeldung auf der Konsole ist:

Die Ressource konnte nicht geladen werden, da die App-Transport-Sicherheitsrichtlinie die Verwendung einer sicheren Verbindung erfordert

die Lösung ist:

  1. Eröffnet meine Projekte Datei info.plist (als Quelle)
  2. Schlüssel hinzufügen

Jetzt funktioniert es, i Openstreet Karte oben auf google map erfolgreich überlagert, und ich kann auch von jedem Kachel-Server oben auf google map beliebige benutzerdefinierte Kachel-Overlay.