Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Find markers shown in mapView

I am trying to determine the marker/s currently shown in a mapview. I have researched the following the method:

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

But the contains command accepts CGPoint or CGRect. In other platforms except Swift, contains can accept the marker's position.

How do I convert the marker's position to be accepted by contains?

like image 664
Jayson Tamayo Avatar asked Sep 14 '16 02:09

Jayson Tamayo


2 Answers

Use the mapview's current projection. Use the projection's method called containsCoordinate to check if you marker's position is inside the projection, i.e. currently visible.

So something like:

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

like image 181
Juul Avatar answered Oct 21 '22 19:10

Juul


In MapKit:

I assume with Marker you mean an MKAnnotation. Instead of using the bounds of the mapView you should use the visibleMapRect and see if it contains the coordinates of the Marker in MKMapPoints. This is the code I used:

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

Only when the coordinates of the markers are visible (in other words, the marker is being displayed), this will print "Found". If off-screen, it will print "Not found".

like image 27
Christoph Avatar answered Oct 21 '22 19:10

Christoph