【问题标题】:Add a WMS Layer to Here Maps in Swift在 Swift 中将 WMS 图层添加到此处的地图
【发布时间】:2018-12-27 06:41:12
【问题描述】:

我正在尝试将 WMS 图层添加到 Here Maps,但我在他们的文档中没有找到任何这样做的起点......而且我在这里也没有找到与此相关的任何内容。

有人在 Here Map 中使用过 WMS 图层吗?到目前为止,我设法在 MapKit 和 OpenLayers 中使用 WMS 图层。但客户也对基于 HereMaps 的方法感兴趣。

我的假设是,我需要从这里设置到我的地理服务器的 URL:

func mapTileLayer(_ mapTileLayer: NMAMapTileLayer, urlForTileAtX x: UInt, y: UInt, zoomLevel: UInt) -> String

但是如何将 x y 转换为边界框?

非常感谢任何帮助!

【问题讨论】:

    标签: swift here-api wms


    【解决方案1】:

    我不知道 Swift、MapKit 和 Here Maps,所以我最有资格给出答案。 :)
    就在这里。

    由于您使用的是 GeoServer,请将其配置为将您的图层发布为 WMTS/切片图层,并使用与您在 Here Maps 中使用的任何内容相匹配的切片集配置(很可能是 Spherical Mercator/EPSG:900913)。那应该或多或少是标准设置(我上次查看时)。

    在这种情况下,从 xyz 创建一个 URL 是很简单的,将类似于 http://some-base.url/mygeoserver/.../${z}/${x}/${y}.png - 类似的东西。

    您还可以在较高的缩放级别上打开切片缓存和预渲染切片以获得更好的性能。

    如果您由于某种原因不能或不想配置切片图层,我想知道原因。 :)

    在这种情况下,您仍然可以计算图块坐标的边界框。请参阅以下链接:

    http://www.maptiler.org/google-maps-coordinates-tile-bounds-projection/ https://wiki.openstreetmap.org/wiki/Slippy_map_tilenames#Tile_bounding_box

    引用OSM Wiki

    func tileToLatLon(tileX : Int, tileY : Int, mapZoom: Int) -> (lat_deg : Double, lon_deg : Double) {
        let n : Double = pow(2.0, Double(mapZoom))
        let lon = (Double(tileX) / n) * 360.0 - 180.0
        let lat = atan( sinh (.pi - (Double(tileY) / n) * 2 * Double.pi)) * (180.0 / .pi)
    
        return (lat, lon)
    }
    

    这会导致 EPSG:4326。如果您需要不同的坐标系,事情会变得复杂得多。

    此外,您的目标坐标系必须“匹配”原始坐标系,即生成的边界框不会“旋转”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-19
      相关资源
      最近更新 更多