iOS плитки GoogleMaps не отображаются правильно с GMSSyncTileLayer - PullRequest
0 голосов
/ 06 апреля 2020

Я создаю приложение с пользовательской картой, используя плитки GoogleMaps и класс GMSSyncTileLayer. По какой-то причине плитки не отображаются должным образом. Здесь предоставляется одна отдельная плитка независимо от координат (для целей тестирования). Плитки имеют размер 256 * 256 (производится с помощью MapTiler), и в этом примере я ожидаю, что эта одна плитка будет повторяться и заполнять пространство. Я пробовал разные layer.tileSize = 1024 производит самые большие плитки, 512 и 256 соответственно меньше. Очевидно, я не понимаю, что здесь происходит. Как правильно использовать плитки?

--- Редактировать --- Смотрите мой ответ ниже - возможно, проблема в том, что у меня были эти плитки в папке Assets.xcassets вместо обычной папки. Однако не проверял это, поскольку код теперь переместился в MapKit.

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 получается только больше маленьких плиток, но не охватывающих всю область.

iOS iPhone11 Pro rendering of tiles

1 Ответ

0 голосов
/ 08 апреля 2020

Не удалось заставить работать 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.

...