缩放mapview

时间:2012-01-25 11:37:11

标签: iphone ios mkmapview zoom

我正在做一个基于mapview的应用程序。我正在获取位置(地点)并将其转换为坐标。使用此功能,我将放大指定位置的确切位置。

但我面临的问题是,  如果我只指定街道名称或城市名称或州名称或国家/地区名称,则缩放级别始终相同。 (zoomlevel始终与街道相同。) 如果我只是指定国家/地区名称,则缩放级别应该是国家/地区级别,而不是直接缩放到该国家的任何随机街道。

这是我在缩放时使用的代码。

-(void)zoomToFitMapAnnotations:(MKMapView*)mapViews
{
if([mapViews.annotations count] == 0)
    return;

CLLocationCoordinate2D topLeftCoordinate;
topLeftCoordinate.latitude = -90;
topLeftCoordinate.longitude = 180;

CLLocationCoordinate2D bottomRightCoord;
bottomRightCoord.latitude = 90;
bottomRightCoord.longitude = -180;

for(SJAddressAnnotation* annotation in mapViews.annotations)
{
    topLeftCoordinate.longitude = fmin(topLeftCoordinate.longitude, annotation.coordinate.longitude);
    topLeftCoordinate.latitude = fmax(topLeftCoordinate.latitude, annotation.coordinate.latitude);

    bottomRightCoord.longitude = fmax(bottomRightCoord.longitude, annotation.coordinate.longitude);
    bottomRightCoord.latitude = fmin(bottomRightCoord.latitude, annotation.coordinate.latitude);
}

MKCoordinateRegion region;
region.center.latitude = topLeftCoordinate.latitude - (topLeftCoordinate.latitude - bottomRightCoord.latitude) * 0.5;
region.center.longitude = topLeftCoordinate.longitude + (bottomRightCoord.longitude - topLeftCoordinate.longitude) * 0.5;
region.span.latitudeDelta = fabs(topLeftCoordinate.latitude - bottomRightCoord.latitude) * 1.1; // Add a little extra space on the sides
region.span.longitudeDelta = fabs(bottomRightCoord.longitude - topLeftCoordinate.longitude) * 1.1; // Add a little extra space on the sides

region = [mapView regionThatFits:region];
[mapView setRegion:region animated:YES];
}

我尝试过更改量程水平失败。在这种情况下需要帮助。

1 个答案:

答案 0 :(得分:1)

正如我之前所说,一个注释存在问题。如果您要从Google搜索中检索地点,那么每个地方都会提供近似的缩放级别(具体取决于是否为国家/地区)。您可以尝试在浏览器中输入http://maps.google.com/maps/geo?q=asia&output=json。您可以通过用china或newyork等替换亚洲来尝试不同的条目。在浏览器中查看响应的Accuracy属性。大陆为0,国家为1等。

如果你自己创建了注释,那么你可以附加一个与zoomlevel相关的参数。

@interface AddressAnnotation : NSObject<MKAnnotation> {
double zoomLevel;
}
@property(readwrite,nonatomic) double zoomLevel ;
@end




 @implementation AddressAnnotation
    @synthesize zoomLevel;
    -(void)setZoomLevel (double) parameter
    {
    self.zoomLevel = parameter;
    }
@end

最后假设annot是你的注释

  [annot setZoomLevel: .1]; //instead of .1 you can set different values

当您将此注释设置区域中心显示为注释坐标并将span设置为annotation.zoomLevel时。

MKCoordinateRegion region;
region.center.latitude = annotation.coordinate.latitude;
region.center.longitude = annotation.coordinate.longitude;
region.span.latitudeDelta = annotation.zoomLevel;
region.span.longitudeDelta = annotation.zoomLevel;