Mapbox WMS对iOS的支持

时间:2019-04-11 11:44:02

标签: ios swift mapbox wms mapbox-ios

地图框是否支持WMS服务?我没有在iOS文档中找到任何内容,但是在Android部分中找到了:https://docs.mapbox.com/android/maps/examples/add-a-wms-source/。 我希望将此代码应用于iOS平台,但是我的解决方案无法正常工作。我遇到的第一个问题是URL的构造问题。

let url = URL(string: wms1)! 

URL构造函数在传递的字符串中遇到{bbox-epsg-3857}的问题。

我通过允许使用非法字符而忽略了问题:

let urlString = wms1.addingPercentEncoding(withAllowedCharacters: .illegalCharacters)
let url = URL(string: urlString!)! 

然后我尝试将wms源添加到地图,但这会提供一些错误

let source = MGLShapeSource(identifier: "test1", url: url, options: nil)
style.addSource(source)

let layer = MGLRasterStyleLayer(identifier: "test1", source: source)
style.addLayer(layer) 

错误: [ERROR] {} [Style]:无法加载源test1:

1 个答案:

答案 0 :(得分:1)

虽然在Mapbox网站上没有关于将WMS与iOS Maps SDK一起使用作为RasterTileSource的特定示例,但确实可以这样做。唯一的要求是使用正确的Tile URL模板初始化源对象。除了url模板之外,实现与以下示例相同:https://docs.mapbox.com/ios/maps/examples/source-custom-raster/

唯一的区别是您将需要修改以下行:

let source = MGLRasterTileSource(identifier: "stamen-watercolor", tileURLTemplates: ["https://stamen-tiles.a.ssl.fastly.net/watercolor/{z}/{x}/{y}.jpg"], options: [ .tileSize: 256 ])

要反映WMS源的Tile URL模板,即:

let source = MGLRasterTileSource(identifier: "stamen-watercolor", tileURLTemplates: ["https://geodata.state.nj.us/imagerywms/Natural2015?bbox={bbox-epsg-3857}&format=image/png&service=WMS&version=1.1.1&request=GetMap&srs=EPSG:3857&width=256&height=256&layers=Natural2015"], options: [ .tileSize: 256 ])

⚠️免责声明:我目前在Mapbox⚠️

工作