How to get radius from visible area of MKmapview?

后端 未结 2 641
盖世英雄少女心
盖世英雄少女心 2021-01-01 02:22

I am able to get visible rectangle of map view and also centre point of map view and span deltas are also get from mkmaap view methods: To get visible are :mapView.vis

相关标签:
2条回答
  • 2021-01-01 02:41

    To get the radius follow this:

    - (CLLocationDistance)getRadius
    {
        CLLocationCoordinate2D centerCoor = [self getCenterCoordinate];
        // init center location from center coordinate
        CLLocation *centerLocation = [[CLLocation alloc] initWithLatitude:centerCoor.latitude longitude:centerCoor.longitude];
    
        CLLocationCoordinate2D topCenterCoor = [self getTopCenterCoordinate];
        CLLocation *topCenterLocation = [[CLLocation alloc] initWithLatitude:topCenterCoor.latitude longitude:topCenterCoor.longitude];
    
        CLLocationDistance radius = [centerLocation distanceFromLocation:topCenterLocation];
    
        return radius;
    }
    

    It will return the radius in metres.

    To get center coordinate

    - (CLLocationCoordinate2D)getCenterCoordinate
    {
        return [self.mapView centerCoordinate];
    }
    

    For getting radius, depends on where you want to get the 2nd point. Lets take the Top Center

    - (CLLocationCoordinate2D)getTopCenterCoordinate
    {
        // to get coordinate from CGPoint of your map
        return [self.mapView convertPoint:CGPointMake(self.mapView.frame.size.width / 2.0f, 0) toCoordinateFromView:self.mapView];
    }
    
    0 讨论(0)
  • 2021-01-01 02:54

    With Swift 3.0 you can use extension to simplify your life:

    extension MKMapView {
    
        func topCenterCoordinate() -> CLLocationCoordinate2D {
            return self.convert(CGPoint(x: self.frame.size.width / 2.0, y: 0), toCoordinateFrom: self)
        }
    
        func currentRadius() -> Double {
            let centerLocation = CLLocation(coordinate: self.centerCoordinate)
            let topCenterCoordinate = self.topCenterCoordinate()
            let topCenterLocation = CLLocation(coordinate: topCenterCoordinate)
            return centerLocation.distance(from: topCenterLocation)
        }
    
    }
    

    With Swift 4.0 :

    extension MKMapView {
    
        func topCenterCoordinate() -> CLLocationCoordinate2D {
            return self.convert(CGPoint(x: self.frame.size.width / 2.0, y: 0), toCoordinateFrom: self)
        }
    
        func currentRadius() -> Double {
            let centerLocation = CLLocation(latitude: self.centerCoordinate.latitude, longitude: self.centerCoordinate.longitude)
            let topCenterCoordinate = self.topCenterCoordinate()
            let topCenterLocation = CLLocation(latitude: topCenterCoordinate.latitude, longitude: topCenterCoordinate.longitude)
            return centerLocation.distance(from: topCenterLocation)
        }
    
    }
    
    0 讨论(0)
提交回复
热议问题