iOS GoogleMaps磁贴无法通过GMSSyncTileLayer正确显示

问题描述 投票:0回答:1

我正在使用GoogleMaps磁贴和GMSSyncTileLayer类使用自定义地图构建应用。由于某些原因,图块无法按预期渲染。这里提供了一个独立于坐标的单个图块(出于测试目的)。磁贴为256 * 256(由MapTiler制作),在本示例中,我希望此磁贴被重复并填充空间。我尝试了不同的layer.tileSize = 1024产生最大的图块,分别缩小512和256。显然,我不明白这里发生了什么。使用瓷砖的正确方法是什么?

class MapTileLayer: GMSSyncTileLayer {
  override func tileFor(x: UInt, y: UInt, zoom: UInt) -> UIImage? {
    //  Return one specific 256*256 Map tile
    let pathToImage = "MapTilesFolder/14/9370/4516"

    if let tile = UIImage(named: pathToImage) {
      return tile
    } else {
      return kGMSTileLayerNoTile
    }
  }
}

import UIKit
import GoogleMaps

class DetailViewController: UIViewController {

  override func viewDidLoad() {
      super.viewDidLoad()
      // Do any additional setup after loading the view.

      let camera = GMSCameraPosition.camera(withLatitude: 62.545144, longitude: 25.905153, zoom: 16.0)
      let mapView = GMSMapView.map(withFrame: self.view.frame, camera: camera)
      mapView.mapType = GMSMapViewType.none

      view = mapView
      let layer = MapTileLayer()
      layer.tileSize = 1024
      layer.map = mapView

      // Creates a marker in the center of the map.
      let marker = GMSMarker()
      marker.position = CLLocationCoordinate2D(latitude: 62.545144, longitude: 25.905153)
      marker.title = "Marker"
      marker.snippet = "Place"
      marker.map = mapView

  }
}

并且结果在设备和模拟器上都看起来像这样。如果使用tileSize较小的结果,则只会产生更多的较小的tile,但不会覆盖整个区域。

iOS iPhone11 Pro rendering of tiles

ios google-maps-sdk-ios
1个回答
0
投票

无法使Google Maps SDK正常运行并移至Apple MapKit。使MapKit根据此处的示例工作:Advanced MapKit Tutorial: Custom Tiles。我需要对该示例进行的唯一更改是更改行的顺序,如下所述(Xcode 11.4):

func setupTileRenderer() {
  let overlay = AdventureMapOverlay()

  overlay.canReplaceMapContent = true
  mapView.add(overlay, level: .aboveLabels)  // move this below next line
  tileRenderer = MKTileOverlayRenderer(tileOverlay: overlay)
}

更改是,“ mapView.addOverlay”行必须位于“ tileRenderer”行之后。方法“ mapView.add”的名称也已更改为“ mapView.addOverlay”。现在可以正常工作了。我怀疑我与GoogleMaps SDK最初遇到的问题可能是因为我在“ Assets.xcassets”中将这些磁贴添加到了普通文件夹中,如上述示例所示。我没有进行测试,因为我完全移动了代码以使用MapKit而不是GoogleMaps。

© www.soinside.com 2019 - 2024. All rights reserved.