我正在做一个基于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];
}
我尝试过更改量程水平失败。在这种情况下需要帮助。
答案 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;