Ios OpenStreetMap平铺多边形单击向下无声检测
我正在制作OpenStreetMap以显示多边形。在这里,我使用Ios OpenStreetMap平铺多边形单击向下无声检测,ios,swift,mkmapview,polygon,openstreetmap,Ios,Swift,Mkmapview,Polygon,Openstreetmap,我正在制作OpenStreetMap以显示多边形。在这里,我使用MKMapView并设置OpenStreetMap的平铺 OSM磁贴是http://tile.openstreetmap.org/\(path.z)/\(path.x)/\(path.y).png 它工作得很好,在准确的位置上绘制多边形。(请查看下面的附件)我在地图上绘制的多边形上添加了uitappesturerecognizer,用于获取点击事件。唯一的问题是当我轻触多边形时,它会无声地向下检测。请检查一下电话号码 瓷砖代码: f
MKMapView
并设置OpenStreetMap的平铺
OSM磁贴是http://tile.openstreetmap.org/\(path.z)/\(path.x)/\(path.y).png
它工作得很好,在准确的位置上绘制多边形。(请查看下面的附件)我在地图上绘制的多边形上添加了uitappesturerecognizer
,用于获取点击事件。唯一的问题是当我轻触多边形时,它会无声地向下检测。请检查一下电话号码
瓷砖代码:
func setupTileRenderer() {
let overlay = AdventureMapOverlay()
overlay.canReplaceMapContent = true
mapView.addOverlay(overlay, level: MKOverlayLevel.aboveLabels)
tileRenderer = MKTileOverlayRenderer(tileOverlay: overlay)
overlay.minimumZ = 13
overlay.maximumZ = 16
}
extension MapViewVC : MKMapViewDelegate {
func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {
if let overlay = overlay as? myPolygon {
let renderer = MKPolygonRenderer(polygon: overlay)
renderer.fillColor = overlay.color //UIColor.black.withAlphaComponent(0.5)
renderer.strokeColor = UIColor.orange
renderer.lineWidth = 2
return renderer
}
return tileRenderer
}
func removeMapOverlay(){
self.mapView.removeOverlays(self.arrPolygons.compactMap({$0.mkOverlay}))
}
}
@objc func mapTapped(_ gesture: UITapGestureRecognizer){
let point = gesture.location(in: self.mapView)
let coordinate = self.mapView.convert(point, toCoordinateFrom: nil)
//print("Tap \(coordinate)")
for overlay in self.mapView.overlays {
if let polygon = overlay as? MKPolygon {
guard (self.mapView.renderer(for: polygon) as? MKPolygonRenderer) != nil else { continue }
if polygon.contain(coor: coordinate){
print("Tap was inside this polygon \(coordinate)")
break
}
continue
}
}
}
extension MKPolygon {
func contain(coor: CLLocationCoordinate2D) -> Bool {
let polygonRenderer = MKPolygonRenderer(polygon: self)
let currentMapPoint: MKMapPoint = MKMapPoint(coor)
let polygonViewPoint: CGPoint = polygonRenderer.point(for: currentMapPoint)
return polygonRenderer.path.contains(polygonViewPoint)
}
}
点击事件:
func setupTileRenderer() {
let overlay = AdventureMapOverlay()
overlay.canReplaceMapContent = true
mapView.addOverlay(overlay, level: MKOverlayLevel.aboveLabels)
tileRenderer = MKTileOverlayRenderer(tileOverlay: overlay)
overlay.minimumZ = 13
overlay.maximumZ = 16
}
extension MapViewVC : MKMapViewDelegate {
func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {
if let overlay = overlay as? myPolygon {
let renderer = MKPolygonRenderer(polygon: overlay)
renderer.fillColor = overlay.color //UIColor.black.withAlphaComponent(0.5)
renderer.strokeColor = UIColor.orange
renderer.lineWidth = 2
return renderer
}
return tileRenderer
}
func removeMapOverlay(){
self.mapView.removeOverlays(self.arrPolygons.compactMap({$0.mkOverlay}))
}
}
@objc func mapTapped(_ gesture: UITapGestureRecognizer){
let point = gesture.location(in: self.mapView)
let coordinate = self.mapView.convert(point, toCoordinateFrom: nil)
//print("Tap \(coordinate)")
for overlay in self.mapView.overlays {
if let polygon = overlay as? MKPolygon {
guard (self.mapView.renderer(for: polygon) as? MKPolygonRenderer) != nil else { continue }
if polygon.contain(coor: coordinate){
print("Tap was inside this polygon \(coordinate)")
break
}
continue
}
}
}
extension MKPolygon {
func contain(coor: CLLocationCoordinate2D) -> Bool {
let polygonRenderer = MKPolygonRenderer(polygon: self)
let currentMapPoint: MKMapPoint = MKMapPoint(coor)
let polygonViewPoint: CGPoint = polygonRenderer.point(for: currentMapPoint)
return polygonRenderer.path.contains(polygonViewPoint)
}
}
另外:我也在寻找一种方法,让OpenStreetMap离线呈现,和MKMapView一样
任何帮助都将不胜感激。谢谢。:)