Objective c 如何从 MKMapKit 中删除地图位置和注释

How to remove map Places and annotations from MKMapKit in Objective c

您好,我的项目中有一个 MapView,我需要从 MapView 中删除所有标签注释和位置。看起来像普通 mapView

我尝试了以下代码,它工作正常,但我仍然得到了一些建筑细节、街道名称和所有我想要的也被删除,只有用户位置可见

代码如下:

[mapView setShowsPointsOfInterest:NO];

上面的代码工作正常并从 mapKit 中删除了默认位置图标但没有删除所有图标和标签,如何从 MapKit 中删除所有默认图标和标签名称

iOS11开始,可以设置

mapView.mapType = .mutedStandard

这会从地图中删除分散注意力的细节。

Apple 使用这种类型的地图,当他们想要强调交通路线时,其他一切都应该在背景中而不会分散注意力。

iOS 13 开始,您有更细粒度的控制:

使用 MKMapKit.pointOfInterestFilter 您可以包括或排除特定类别的兴趣点。

因此,如果您正在制作一个应用程序 'Best restaurants in my city',您的应用程序有自己的餐厅注释,您可以从 Apple 的兴趣点中删除餐厅类别,但所有其他 POI 类别都适合您。

https://developer.apple.com/documentation/mapkit/mkmapview/3143417-pointofinterestfilter?language=objc

好像有点乱。

首先,您用自己的叠加层替换地图...

self.mapView.insertOverlay(underlay, at: 0, level: MKOverlayLevel.aboveLabels)

这可以是任何东西。如果你想使用 Google 地图,或者打开街道地图,你可以像这样:

let url = "http://mt0.google.com/vt/x={x}&y={y}&z={z}"
//let url = "http://c.tile.openstreetmap.org/{z}/{x}/{y}.png"
let underlay = MKTileOverlay(urlTemplate: url)
underlay.canReplaceMapContent = true

或者,如果你只想要空白,给它一个默认层:

let underlay = MKTileOverlay()
underlay.canReplaceMapContent = true

参数 level: 允许您指定您的背景是仅遮挡他们的背景地图,还是遮挡背景和道路或背景和标签,但不遮挡所有内容。文档说:

MKOverlayLevel.aboveLabels

case aboveLabels = 1

Place the overlay above map labels, shields, or point-of-interest icons but below annotations and 3D projections of buildings.

我无法让它在默认 MKTileOverlay() 下工作 - 它似乎与替代 .aboveRoads 一样 - 即它隐藏了所有地图,包括道路,但不隐藏标签.当您指定其中一个外部叠加层(例如 google)时 - 它们会替换标签。可能是一个错误,所以最后一步,完全消除标签是

self.mapView.mapType = .satellite

这会删除标签,您的叠加层会隐藏卫星地图。不整洁,但也不难。

以防万一有人回到这里,在撰写本文时,如果您只想要地图和道路名称,没有兴趣点,只需使用

mapView.pointOfInterestFilter = .excludingAll