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 类别都适合您。
好像有点乱。
首先,您用自己的叠加层替换地图...
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
您好,我的项目中有一个 MapView,我需要从 MapView 中删除所有标签注释和位置。看起来像普通 mapView
我尝试了以下代码,它工作正常,但我仍然得到了一些建筑细节、街道名称和所有我想要的也被删除,只有用户位置可见
代码如下:
[mapView setShowsPointsOfInterest:NO];
上面的代码工作正常并从 mapKit 中删除了默认位置图标但没有删除所有图标和标签,如何从 MapKit 中删除所有默认图标和标签名称
从iOS11开始,可以设置
mapView.mapType = .mutedStandard
这会从地图中删除分散注意力的细节。
Apple 使用这种类型的地图,当他们想要强调交通路线时,其他一切都应该在背景中而不会分散注意力。
从 iOS 13 开始,您有更细粒度的控制:
使用 MKMapKit.pointOfInterestFilter
您可以包括或排除特定类别的兴趣点。
因此,如果您正在制作一个应用程序 'Best restaurants in my city',您的应用程序有自己的餐厅注释,您可以从 Apple 的兴趣点中删除餐厅类别,但所有其他 POI 类别都适合您。
好像有点乱。
首先,您用自己的叠加层替换地图...
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