Daniel C.
Daniel C.

Reputation: 151

(Swift) set a 1km radius within my location MapKit

I'm working on an App where I get the user location and some custom pins (Restaurants) that I added. What I want to do is set radius (between 5km and 10km) distance between the user and the restaurants and then show those that are within the area.

My question is, how can I set that radius and get the locations within it

Best regards!

Upvotes: 0

Views: 2134

Answers (1)

Tristan Beaton
Tristan Beaton

Reputation: 1762

You can do some distance calculations to determine what pins to show.

let pins = Array<MKPointAnnotation>() // This is an empty array, so just use your array of locations or add to this.

if let currentLocation = locationManager.location?.coordinate {

    for pin in pins {

        let locationMapPoint = MKMapPointForCoordinate(currentLocation)

        let pinMapPoint = MKMapPointForCoordinate(pin.coordinate)

        let distance = MKMetersBetweenMapPoints(locationMapPoint, pinMapPoint)

        if distance >= 5000 && distance <= 10000 {

            self.map.addAnnotation(pin)
        }
    }
}

If you wanted something tidier, you could also do this.

let pins = Array<MKPointAnnotation>()

if let currentLocation = locationManager.location?.coordinate {

    let filtered = pins.filter { $0.coordinate.distance(to: currentLocation) >= 5000 && $0.coordinate.distance(to: currentLocation) <= 10000 }

    self.map.addAnnotations(filtered)
}

You'll need this extension aswell.

extension CLLocationCoordinate2D {

    func distance(to coordinate: CLLocationCoordinate2D) -> Double {

        return MKMetersBetweenMapPoints(MKMapPointForCoordinate(self), MKMapPointForCoordinate(coordinate))
    }
}

Upvotes: 2

Related Questions