@aksil-rus

Как добавить слой от mapbox в приложение ios?

В библиотеке react-native-yamap-shim в ios нужно добавить функционал добавления слоя на карту по пропсам. 1 пропс передает maptype={“custom”} он активирует наш слой, а 2 пропс передает ключ от mapbox.
При загрузке скрина подключается слой, если добавлены пропс с mapBox(с ключем), но не активирует его. Если мы передаем в mapType = {“custom”} то активируется слой, если нет то слой деактивируется

Необходимо проработать два пропса:
mapType={'custom'} // - добавляется тип карты, он и будет активировать наш слой
mapBox={'КЛЮЧ_ОТ_MA'} // - добавляется ключ от mapbox, чтобы наш слой активировался
/>

Для android уже сделано react-native-yamap-shim, нужно тот же самый функционал перенести в ios

import UIKit
import YandexMapsMobile

/**
* This example shows how to add a user-defined layer to the map.
* We use the UrlProvider class to format requests to a remote server that renders
* tiles. For simplicity, we ignore map coordinates and zoom here, and
* just provide a URL for the static image.
*/
class CustomLayerViewController: BaseMapViewController {

var layer: YMKLayer?

internal class CustomTilesUrlProvider: NSObject, YMKTilesUrlProvider {
func formatUrl(with tileId: YMKTileId, version: YMKVersion) -> String {
return "https://api.mapbox.com/v4/mapbox.satellite/\(tileI...";
}
}

// MapKit doesn't need Url provider for raster maps.
internal class DummyUrlProvider : NSObject, YMKResourceUrlProvider {
override init() {}

func formatUrl(withResourceId resourceId: String) -> String {
return "";
}

override func isEqual(_ object: Any?) -> Bool {
return true;
}
}

// Client code must retain strong references to providers and projection
let tilesUrlProvider = CustomTilesUrlProvider()
let projection = YMKProjections.sphericalMercator()

override func viewDidLoad() {
super.viewDidLoad()
// YMKMapTypeVectorMap;
mapView.mapWindow.map.mapType = YMKMapType.vectorMap;

let layerOptions = YMKLayerOptions(
active: true,
nightModeAvailable: true,
cacheable: true,
animateOnActivation: true,
tileAppearingAnimationDuration: 0,
overzoomMode: .enabled,
transparent: false
)

layer = mapView.mapWindow.map.addLayer(
withLayerId: "mapkit_logo",
contentType: "image/jpeg",
layerOptions: layerOptions,
tileUrlProvider: tilesUrlProvider,
imageUrlProvider: YMKImagesDefaultUrlProvider(),
projection: projection)

layer!.invalidate(withVersion: "0.0.0")

}
}

Сам с свифтом не работал, направьте, пожалуйста, как это сделать. Спасибо
  • Вопрос задан
  • 49 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы