Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios OpenStreetMap平铺多边形单击向下无声检测_Ios_Swift_Mkmapview_Polygon_Openstreetmap - Fatal编程技术网

Ios 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

我正在制作OpenStreetMap以显示多边形。在这里,我使用
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一样

任何帮助都将不胜感激。谢谢。:)