Найти маркеры, показанные в mapView

Я пытаюсь определить маркер/s, отображаемый в настоящее время в mapview. Я исследовал следующий метод:

self.mapView.bounds.contains(markers[0].position)

но contains команда принимает CGPoint или CGRect. На других платформах, кроме Swift,contains может принять положение маркера.

как преобразовать позицию маркера для принятия contains?

2 ответов


используйте текущий mapview projection. Используйте метод проекцииcontainsCoordinate чтобы проверить, находится ли положение маркера внутри проекции, a.к. a. в настоящее время виден.

что-то вроде:

let coord = marker.position
let isVisible = self.mapview.projection.containsCoordinate(coord)

https://developers.google.com/maps/documentation/ios-sdk/reference/interface_g_m_s_projection.html#aa6ad29e6831e40f00435c3aaeda8e08a


В MapKit:

Я предполагаю, что с маркером Вы имеете в виду MKAnnotation. Вместо использования границ mapView вы должны использовать visibleMapRect и посмотреть, содержит ли он координаты маркера в MKMapPoints. Это код, который я использовал:

let markerPoint = MKMapPointForCoordinate(markers[0].coordinate)
if MKMapRectContainsPoint(mapView.visibleMapRect, markerPoint) {
    print("Found")
} else {
    print("Not found")
}

только когда координаты маркеров видны (другими словами, маркер отображается), это будет печатать "найдено". Если за пределами экрана, он будет печатать "не найден".