0

我对 iOS 和 Mapbox 开发比较陌生。我正在开发一个应用程序,用户可以在该应用程序中自由地操纵一张充满他们保存的地点的地图。

当他们达到完全由城市地理填充的缩放级别时,我想以横幅样式的视图显示他们正在查看的城市的名称,即使城市标签不在视图中地图(放大时通常是这种情况)。

这是上下文的 UI 屏幕截图。

我正在尝试使用以下代码在 Mapbox 瓦片集中查询城市名称:

func mapViewRegionIsChanging(_ mapView: MGLMapView) {

    let zoomLevel = mapView.zoomLevel

    if zoomLevel >= 14.0 {

            // layer identifier taken from layer name in Mapbox Studio
            let layerIdentifier = "place-city-lg-n"

            let screenRect = UIScreen.main.bounds

            let cityName = mapView.visibleFeatures(in: screenRect, styleLayerIdentifiers: Set([layerIdentifier]))

            print(cityName)
    }

我认为此代码不起作用,因为标签不在指定缩放级别的屏幕上。

我想知道 usingvisibleFeaturesInRect是否是满足我需要的最佳方法 - 是否有更好的方法来检索城市名称,而不管可见元素和缩放级别如何?

4

1 回答 1

0

对于这个任务,我建议使用Mapbox的 MapboxGeocoder。它用于获取有关城市/村庄的信息。你可以安装吊舱:

pod 'MapboxGeocoder.swift', '~> 0.12'

并使用此代码:

let geocoder = Geocoder.shared

func mapViewRegionIsChanging(_ mapView: MGLMapView) {

    let geocodeOptions = ReverseGeocodeOptions(coordinate: mapView.centerCoordinate)
    geocodeOptions.allowedScopes = [.place]

    let _ = geocoder.geocode(geocodeOptions) { (placemarks, attribution, error) in
        guard let placemark = placemarks?.first else { return }
        print(placemark.name)
        print(placemark.qualifiedName)
    }
}

您可以添加您的条件,它确实有助于解决您的任务

于 2020-01-13T09:29:10.003 回答