【问题标题】:MapBox water/land detectionMapBox 水/陆检测
【发布时间】:2013-11-04 19:33:54
【问题描述】:

我开始使用MapBox iOS SDK

有什么方法可以通过坐标查询 MapView 并返回结果的地形类型(水、陆)?

我已经阅读API doc 很长一段时间了,但无法弄清楚。 我知道有 (interim) solutions 可以使用 Google 网络服务,但我需要它才能离线工作。

不过,我不受 MapBox 的约束(但我喜欢它),谢谢您的任何提示!

【问题讨论】:

    标签: ios objective-c map detection mapbox


    【解决方案1】:

    无需深入研究运行时样式(请参阅我的其他答案,错误的线索):使用 mapView.visibleFeatures(at: CGPoint, styleLayerIdentifiers: Set<String>) 等效于 javascript API 的非常简单的方法是 queryRenderedFeatures

    func mapView(_ mapView: MGLMapView, regionDidChangeAnimated animated: Bool)
    {
        let features = mapView.visibleFeatures(at: mapView.center, styleLayerIdentifiers: ["water"])
        print(features)
    }
    

    移动时的示例输出:

    []
    []
    []
    [<MGLMultiPolygonFeature: 0x170284650>]
    

    如果为空结果:没有水,如果多边形:水。

    【讨论】:

    • 参见android
    • visibleFeatures 意味着只获得 visible 结果的结果,对吧?如果我想获得一定距离内可能不可见的特征怎么办?
    【解决方案2】:

    似乎有可能:

    发现于https://www.mapbox.com/ios-sdk/api/3.5.0/runtime-styling.html

    有可能根据用户的位置(公园、城市、水域等)调整 UI。不幸的是,我不知道怎么做! (我会尽快更新)

    地图交互性您可以自定义地图,使其根据用户正在执行的操作动态响应。 在用户驾驶时增加街道的文字大小,强调 根据用户偏好定制的兴趣点,或更改您的 UI 如果用户在公园、小径、地标或河流中。

    UI GIF demo

    【讨论】:

      【解决方案3】:

      我制作了一个示例代码,可以对您有所帮助。 https://github.com/P0nj4/Coordinates-on-water-or-land

      给出一个坐标,应用程序会通过谷歌检查它是陆地还是水域。

      【讨论】:

      • 感谢您的输入,但此机制的一个必要功能是离线使用,因为这将用于没有提供足够快的互联网连接来实现针对 Web 服务的路由算法的帆船.我实际上是用 OSM 数据实现的。它很容易工作,在内存中,而且速度超级快。在我上面的答案中查看我的链接。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-18
      • 2021-12-14
      相关资源
      最近更新 更多