我需要在地图内适应特定的边界。我通过调用谷歌地理编码器并读取视口属性来获取边界,如下所示:
{
northeast = {
lat = "30.4212235";
lng = "-97.486942";
};
southwest = {
lat = "30.1128403";
lng = "-97.99917959999999";
};
}
然后我将它们转换为 CLLocationCooperative2D
NSDictionary *viewport = [[[results objectAtIndex:0] objectForKey:@"geometry"]
objectForKey:@"viewport"];
NSDictionary *NEDictionary = [viewport objectForKey:@"northeast"];
NSDictionary *SWDictionary = [viewport objectForKey:@"southwest"];
CLLocationCoordinate2D SWCoordinate =
CLLocationCoordinate2DMake(
[[SWDictionary objectForKey:@"lat"] floatValue],
[[SWDictionary objectForKey:@"lng"] floatValue]
);
CLLocationCoordinate2D NECoordinate =
CLLocationCoordinate2DMake(
[[NEDictionary objectForKey:@"lat"] floatValue],
[[NEDictionary objectForKey:@"lng"] floatValue]
);
我知道我需要从这些坐标生成一个 MKMapRect (或 MKMapRegion,以更容易的为准),然后 [mapView setVisibleRect:newRectAnimated:YES] (或 [mapView setRegion:newRegionanimated:YES] 但我不太确定如何我需要一种方法将边界转换为正确的数据结构,例如:
- (MKMapRect) mapRectThatFitsBoundsSW:(CLLocationCoordinate2D)sw
NE:(CLLocationCoordinate2D)ne {
// CGFloat x = ??
// CGFloat y = ??
// CGFloat width = ??
// CGFloat height = ??
MKMapRect mapRectFromBounds = MKMapRectMake(x,y,width,height);
return mapRectFromBounds;
}
有什么想法吗?
做这件事有很多种方法。
你可以创建一个MKCoordinateRegion
通过弄清楚center
点,然后span
是角之间的绝对度数差。
或者你可以创建一个MKMapRect
通过使用MapKit函数MKMapPointForCoordinate
。为了得到origin
,找出西北坐标并将其转换为MKMapPoint
。为了得到width
and height
,得到绝对差值地图点角之间(将角从坐标转换为MKMapPoint
首先使用该函数)。
另一种快速方法是使用一个小技巧MKMapRectUnion
功能。创建零尺寸MKMapRect
从每个坐标,然后使用以下函数将两个矩形合并为一个大矩形:
MKMapPoint swPoint = MKMapPointForCoordinate(SWCoordinate);
MKMapRect swRect = MKMapRectMake(swPoint.x, swPoint.y, 0, 0);
MKMapPoint nePoint = MKMapPointForCoordinate(NECoordinate);
MKMapRect neRect = MKMapRectMake(nePoint.x, nePoint.y, 0, 0);
MKMapRect rect = MKMapRectUnion(swRect, neRect);
请记住,地图视图仍然会根据地图视图的比例和所需的缩放比例对您请求的矩形进行自己的调整。 (如果你想知道调整后的矩形是什么,请调用地图视图的mapRectThatFits:
方法。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)