环境

  • Mapbox v10.5.0
  • Xcode 14.3.1

自定义配置文件启动

mapbox的默认初始化会调用mapbox://styles/mapbox/streets-v11类似的链接,实际启动后,会通过网络获取在线的json格式的配置文件,我们需要在本地自定义一份配置文件用于初始化,具体参数可以参考Style Specification

这里删除了sprite是定义在线图片,我们不需要在线图片;删除glyphs是定义在线字体,当glyphs在线数据没有加载出来的时候。会导致SymbolLayer图层不会刷新数据。

mapbox.json
{
"version": 8,
"name":"local-mapbox",
"sources": {
"raster-tiles-source": {
"type": "raster",
"tiles": ["https://a.basemaps.cartocdn.com/light_nolabels/{z}/{x}/{y}.png"],
"tileSize":256
}
},
"layers": [{
"id": "raster-tiles-layer",
"type": "raster",
"source": "raster-tiles-source"
}]
}

加载本地字体方式

  1. 通过初始化MapOptions类,加载本地字体,详情查看下面章节
  2. 下载全部字体包,然后添加glyphs字段,定义到本地路径file://或者资源文件路径asset://

使用本地配置文件初始化

初始化的的时候,我们自定义本地字体,一定要手动指定字体,不然在不同的版本系统上,显示会不一样

//定义本地字体
let font = UIFont.systemFont(ofSize: 0,weight: .regular).familyName
let mapOptions = MapOptions(glyphsRasterizationOptions: GlyphsRasterizationOptions(rasterizationMode: .allGlyphsRasterizedLocally, fontFamily: font))

//定义本地配置文件路径
let mapInitOptions = MapInitOptions(styleURI: StyleURI(url:Bundle.main.url(forResource: "mapbox", withExtension: "json")!))

// 初始化
mapView = MapView(frame: UIScreen.main.bounds, mapInitOptions: mapInitOptions)
mapView.autoresizingMask = [.flexibleWidth, .flexibleHeight]