如何创建一个给定两个点的MKMapRect,每个点指定一个纬度和经度值?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (25)

我有一个自定义类,它扩展了NSObject并实现MKOverlay协议。因此,我需要实现协议的boundingMapRect属性,它是MKMapRect...。若要创建一个MKMapRect我当然可以用MKMapRectMake做一个。但是,我不知道如何创建一个MKMapRect使用我的数据,这是两个点,每个点指定一个纬度和经度。MKMapRectMake医生声明:

MKMapRect MKMapRectMake(
    double x,
    double y,
    double width,
    double height
);

Parameters
x
    The point along the east-west axis of the map projection to use for the origin.
y
    The point along the north-south axis of the map projection to use for the origin.
width
    The width of the rectangle (measured using map points).
height
    The height of the rectangle (measured using map points).
Return Value
    A map rectangle with the specified values.

我必须说明的纬度和经度值MKMapRect是:

24.7433195, -124.7844079
49.3457868, -66.9513812

目标MKMapRect因此,需要指定一个类似于以下内容的区域:

因此,重申一下,如何使用lat/lon值创建MKMapRect我可以把它设为MKOverlay协议的@property (nonatomic, readonly) MKMapRect boundingMapRect财产?

提问于
用户回答回答于

这应该可以做到:

// these are your two lat/long coordinates
CLLocationCoordinate2D coordinate1 = CLLocationCoordinate2DMake(lat1,long1);
CLLocationCoordinate2D coordinate2 = CLLocationCoordinate2DMake(lat2,long2);

// convert them to MKMapPoint
MKMapPoint p1 = MKMapPointForCoordinate (coordinate1);
MKMapPoint p2 = MKMapPointForCoordinate (coordinate2);

// and make a MKMapRect using mins and spans
MKMapRect mapRect = MKMapRectMake(fmin(p1.x,p2.x), fmin(p1.y,p2.y), fabs(p1.x-p2.x), fabs(p1.y-p2.y));

这使用两个x和y坐标中的较小的一个作为起点,并计算两个点之间的宽度和高度的x/y跨度。

用户回答回答于

对于任意数量的坐标,在SWIFT中:

let coordinates: [CLLocationCoordinate2D] = …
let points = coordinates.map { MKMapPointForCoordinate($0) }
let rects = points.map { MKMapRect(origin: $0, size: MKMapSize(width: 0, height: 0)) }
let fittingRect = rects.reduce(MKMapRectNull, combine: MKMapRectUnion)

扫码关注云+社区