首页 > 解决方案 > MKCoordinateRegion 与 region.span.latitudeDelta 之间的区别?

问题描述

我一直在学习一段代码,并试图理解MKCoordinateRegionvs之间的区别region.span.latitudeDelta

MKCoordinateRegion region = {{0.0, 0.0}, {0.0, 0.0}};
region.center.latitude = latitude;
region.center.longitude = longitude;
region.span.latitudeDelta = 0.1f;

有人可以根据上述情况解释一下差异。我觉得第一行决定了地图的框架,但其余的似乎重复了这一点(我在地图上定义了框架和位置)

标签: iosobjective-cmapkit

解决方案


一个。_ 所以第一行用结构初始化一个局部变量(使用旧的 C89 约定):region MKCoordinateRegion

MKCoordinateRegion region = {{0.0, 0.0}, {0.0, 0.0}};

随后的行只是用所需的值更新先前初始化的结构:

region.center.latitude = latitude;
region.center.longitude = longitude;
region.span.latitudeDelta = 0.1f;

对于它的价值,您也可以只实例化它并一步设置所有值(同样,使用 C89 约定):

MKCoordinateRegion region = { { latitude, longitude }, { 0.1, 0.1 } };

或者,现在,可以使用 C99 的指定初始化器约定:

MKCoordinateRegion region = {
    .center = { .latitude = latitude, .longitude = longitude },
    .span = { .latitudeDelta = 0.1, .longitudeDelta = 0.1 }
};

MKCoordinateRegion同样,这一步初始化并填充(在这种情况下,以比 C89 模式更隐蔽的方式)。

另一种方法是构建CLLocationCoordinate2DMKCoordinateSpanMKCoordinateRegion使用各种xxxMake功能:

CLLocationCoordinate2D center = CLLocationCoordinate2DMake(latitude, longitude);
MKCoordinateSpan span = MKCoordinateSpanMake(0.1, 0.1);
MKCoordinateRegion region = MKCoordinateRegionMake(center, span);

有关初始化 C 结构的更多信息,请参阅如何根据 C 编程语言标准初始化结构。此外,GCC 文档讨论了指定的初始化程序,包括结构。


或者,如果您尝试设置地图视图的区域,则可以使用另一种方法MKMapCamera

CLLocationCoordinate2D center = CLLocationCoordinate2DMake(latitude, longitude);
MKMapCamera *camera = [MKMapCamera cameraLookingAtCenterCoordinate:center fromDistance:1000 pitch:0 heading:0];
[self.mapView setCamera:camera animated:true];

但是,底线region实际上是地图将显示的纬度和经度坐标的范围(由 的组合定义,center地图正在查看的位置,以及span地图的可见程度)。

所有这些地图坐标和跨度不应与frame地图视图的 混淆,后者是显示该区域的地图视图的视觉大小。


推荐阅读