Getting the bounds of an MKMapView

前端 未结 10 947
既然无缘
既然无缘 2020-11-28 20:28

In order to setup a query to an external server I want to get the bounds of the current Map View in an iPhone app I\'m building. UIView should respond to bounds but it seems

相关标签:
10条回答
  • 2020-11-28 20:59

    Okay I officially answered my own question but since I didn't find it anywhere before I'll post the answer here:

    //To calculate the search bounds...
    //First we need to calculate the corners of the map so we get the points
    CGPoint nePoint = CGPointMake(self.mapView.bounds.origin.x + mapView.bounds.size.width, mapView.bounds.origin.y);
    CGPoint swPoint = CGPointMake((self.mapView.bounds.origin.x), (mapView.bounds.origin.y + mapView.bounds.size.height));
    
    //Then transform those point into lat,lng values
    CLLocationCoordinate2D neCoord;
    neCoord = [mapView convertPoint:nePoint toCoordinateFromView:mapView];
    
    CLLocationCoordinate2D swCoord;
    swCoord = [mapView convertPoint:swPoint toCoordinateFromView:mapView];
    
    0 讨论(0)
  • 2020-11-28 21:01

    Another option is to use the visibleMapRect property on your MKMapView instance and use MKCoordinateForMapPoint() to convert to the lat/lon.

    MKMapRect mRect = self.mapView.visibleMapRect;
    MKMapPoint neMapPoint = MKMapPointMake(MKMapRectGetMaxX(mRect), mRect.origin.y);
    MKMapPoint swMapPoint = MKMapPointMake(mRect.origin.x, MKMapRectGetMaxY(mRect));
    CLLocationCoordinate2D neCoord = MKCoordinateForMapPoint(neMapPoint);
    CLLocationCoordinate2D swCoord = MKCoordinateForMapPoint(swMapPoint);
    
    0 讨论(0)
  • 2020-11-28 21:02

    I was able to get this to work with the Parse GeoBox query:

    //Calculate the corners of the map to get the points
    CGPoint nePoint = CGPointMake(self.mapView.bounds.origin.x + self.mapView.bounds.size.width, self.mapView.bounds.origin.y);
    CGPoint swPoint = CGPointMake((self.mapView.bounds.origin.x),(self.mapView.bounds.origin.y+ self.mapView.bounds.size.height));
    
    //Transform points into lat/long values
    CLLocationCoordinate2D NECoordinate = [self.mapView convertPoint:nePoint toCoordinateFromView:self.mapView];
    CLLocationCoordinate2D SWCoordinate = [self.mapView convertPoint:swPoint toCoordinateFromView:self.mapView];
    
    //Convert to Parse GeoPoints
    PFGeoPoint *Southwest = [PFGeoPoint geoPointWithLatitude:SWCoordinate.latitude longitude:SWCoordinate.longitude];
    PFGeoPoint *Northeast = [PFGeoPoint geoPointWithLatitude:NECoordinate.latitude longitude:NECoordinate.longitude];
    
    0 讨论(0)
  • 2020-11-28 21:03

    this website solve the problem. http://www.softwarepassion.com/how-to-get-geographic-coordinates-of-the-visible-mkmapview-area-in-ios/

    MKMapRect mRect = self.mapView.visibleMapRect;
    
    -(CLLocationCoordinate2D)getNECoordinate:(MKMapRect)mRect{
        return [self getCoordinateFromMapRectanglePoint:MKMapRectGetMaxX(mRect) y:mRect.origin.y];
    }
    -(CLLocationCoordinate2D)getNWCoordinate:(MKMapRect)mRect{
        return [self getCoordinateFromMapRectanglePoint:MKMapRectGetMinX(mRect) y:mRect.origin.y];
    }
    -(CLLocationCoordinate2D)getSECoordinate:(MKMapRect)mRect{
        return [self getCoordinateFromMapRectanglePoint:MKMapRectGetMaxX(mRect) y:MKMapRectGetMaxY(mRect)];
    }
    -(CLLocationCoordinate2D)getSWCoordinate:(MKMapRect)mRect{
        return [self getCoordinateFromMapRectanglePoint:mRect.origin.x y:MKMapRectGetMaxY(mRect)];
    }
    
    -(CLLocationCoordinate2D)getCoordinateFromMapRectanglePoint:(double)x y:(double)y{
        MKMapPoint swMapPoint = MKMapPointMake(x, y);
        return MKCoordinateForMapPoint(swMapPoint);
    }
    
    -(NSArray *)getBoundingBox:(MKMapRect)mRect{
        CLLocationCoordinate2D bottomLeft = [self getSWCoordinate:mRect];
        CLLocationCoordinate2D topRight = [self getNECoordinate:mRect];
        return @[[NSNumber numberWithDouble:bottomLeft.latitude ],
                 [NSNumber numberWithDouble:bottomLeft.longitude],
                 [NSNumber numberWithDouble:topRight.latitude],
                 [NSNumber numberWithDouble:topRight.longitude]];
    }
    
    0 讨论(0)
提交回复
热议问题