包含屏幕上的所有坐标

时间:2011-11-07 15:18:17

标签: iphone objective-c mkmapview core-location

我正在使用MKMapOverlayCoreLocation绘制许多坐标,我希望能够在视图中包含它们。

我怎样才能包含它们?我考虑过在我的第一个和最后一个坐标之间取一个中间点,但是如果它不是直接路线或者它们最终位于同一个位置,那么可能会从屏幕上切下一些坐标。

例如,这将是一个示例,其中一些点被切割到右下角。 注意:这仅用于示例目的,路径是使用Google地图创建的,但在应用程序中,它将通过跟踪您的位置历史记录来创建。

同样,如果这是在iPhone上,我如何使用MKCoordinateRegion使地图包含所有点?

2 个答案:

答案 0 :(得分:1)

我认为您需要遍历所有坐标并找到北,东,南和西边界。然后,您可以根据所有值创建坐标区域。

也许您可以查看this question的实施帮助?

答案 1 :(得分:1)

尝试循环你的坐标并获得每个纬度和经度的最极端点(最远的北,南,东,西),然后取极值的平均值。然后创建一个区域并进行设置。

类似

for(int idx = 0; idx < points.count; idx++){
    CLLocation* currentLocation = [points objectAtIndex:idx];
    if(currentLocation.coordinate.latitude != -180 && currentLocation.coordinate.longitude != -180){
        if(currentLocation.coordinate.latitude > maxLat)
            maxLat = currentLocation.coordinate.latitude;
        if(currentLocation.coordinate.latitude < minLat)
            minLat = currentLocation.coordinate.latitude;
        if(currentLocation.coordinate.longitude > maxLon)
            maxLon = currentLocation.coordinate.longitude;
        if(currentLocation.coordinate.longitude < minLon)
            minLon = currentLocation.coordinate.longitude;
    }
}

MKCoordinateRegion region;
region.center.latitude = (maxLat + minLat) / 2;
region.center.longitude = (maxLon + minLon) / 2;
region.span.latitudeDelta = (maxLat - minLat) + .3;
region.span.longitudeDelta = (maxLon - minLon) + .3;

[map regionThatFits:region];