gpt4 book ai didi

ios - 谷歌地图iso瓦片层不起作用GMSTileURLConstructor GMSURLTileLayer

转载 作者:行者123 更新时间:2023-12-01 18:07:34 24 4
gpt4 key购买 nike

GMSTileURLConstructor GMSURLTileLayer 不显示图 block

我正在尝试在谷歌地图上覆盖我自己的图 block (tilestream)。
但它失败了。所以我决定尝试在谷歌地图上覆盖openstreet map 图 block ,因为tilestream的图 block URL与openstreet map 的URL结构相同。两者都是http://xxx/z/x/y.png

使用 GMSTileURLConstructor GMSURLTileLayer,但未能显示瓷砖

只有 google SDKdemo 示例可以正常工作。
网址是:

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

如果我使用openstreet URL,它无法在任何缩放级别显示自定义图 block 。
 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,仍然不显示图 block 。

我确认磁贴服务器工作正常,如果我直接在浏览器中使用 url,则可以正确接收磁贴图像。

也谷歌样本平面图瓷砖,缩放,x,y完全匹配openstreet map 缩放,x,y。

我不明白,为什么 google 示例磁贴 URL 工作正常,但 openstreet map URL 磁贴不显示。

这是我的代码:有人知道为什么吗?
- (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_;

最佳答案

经过10个小时的尝试并失败了,我终于找到了原因?

这是因为安全设置阻止从远程服务器下载任何图 block 图像、json 和任何内容。

控制台上的错误消息是:

无法加载资源,因为应用传输安全策略需要使用安全连接

解决方案是:

  • 打开我的项目 info.plist 文件(作为源)
  • 添加 key
    <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 map 覆盖在谷歌地图之上,我还可以将来自任何瓦片服务器的任何自定义瓦片覆盖在谷歌地图之上。

    在哪里 yourdomain.com例如 http://b.tile.opentopomap.org (在 OSM 地形图的情况下)。您必须为每个 http 提供程序添加一个 key 。

    关于ios - 谷歌地图iso瓦片层不起作用GMSTileURLConstructor GMSURLTileLayer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38150053/

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