arn*_*app 4 cocoa-touch mapkit ios swift
我正在MKLocalSearch搜索某些地方,例如城市或城市街道,以将其显示在MKMapView
我这样显示地标
let loc = placemark.location! //CLLocation of CLPlacemark
var mapRegion = MKCoordinateRegion()
mapRegion.center.longitude = loc.coordinate.longitude
mapRegion.center.latitude = loc.coordinate.latitude
mapRegion.span.latitudeDelta = 0.03 // I choose 0.03 by trying
mapRegion.span.longitudeDelta = 0.03
mapView.setRegion(mapRegion, animated: true)
Run Code Online (Sandbox Code Playgroud)
当地标是城市时,此方法效果很好,因为它以合理的缩放级别显示较大的区域。但是,当我想显示城市中的特定街道(即CLPlacemarks位置)时,它就很远。
现在,我正在寻找一种根据您的“详细信息”计算正确的跨度的方法CLPlacemark(请注意,您不知道CLPlacemark预付款的类型)
有没有办法做到这一点?
让我详细解释一下。
首先,您需要检索适当的CLPlacemark对象。
如果您要CLPlacemark在特定位置搜索CLLocationCoordinate2D,请使用以下方法:
CLLocationCoordinate2D theCoordinate = CLLocationCoordinate2DMake(37.382640, -122.151780);
CLGeocoder *theGeocoder = [CLGeocoder new];
[theGeocoder reverseGeocodeLocation:[[CLLocation alloc] initWithLatitude:theCoordinate.latitude longitude:theCoordinate.longitude]
completionHandler:^(NSArray *placemarks, NSError *error)
{
CLPlacemark *thePlacemark = placemarks.firstObject;
}];
Run Code Online (Sandbox Code Playgroud)
现在您有了一些适当的知识CLPlacemark,可以使用它的.region属性。请注意,文档说的.region是CLRegion,但实际上是CLCircularRegion。
CLCircularRegion *theRegion = (id)thePlacemark.region;
Run Code Online (Sandbox Code Playgroud)
但是,MKMapView不适用于CLCircularRegion,而适用于MKMapRect。您可以使用以下解决方案:
如何将CLCircularRegion转换为MKMapRect
MKMapRect theMapRect = [self rectForCLRegion:theRegion];
Run Code Online (Sandbox Code Playgroud)
现在我们有了我们的MKMapRect,我们可以将它传递给我们,MKMapView就像这样:
[theMapView setVisibleMapRect:[theMapView mapRectThatFits:theMapRect]
animated:YES];
Run Code Online (Sandbox Code Playgroud)
或者,如果您想进一步调整屏幕偏移,可以使用:
[theMapView setVisibleMapRect:[theMapView mapRectThatFits:theMapRect]
edgePadding:UIEdgeInsetsMake(50, 50, 50, 50)
animated:YES];
Run Code Online (Sandbox Code Playgroud)
代码似乎可以正常工作,并使用通过CLCircularRegion .radius属性提供的信息自动调整范围。
下图显示了通过后的结果(37.382640,-122.151780)
比较一下,这是您通过的图片(37.382640,-12.151780)
| 归档时间: |
|
| 查看次数: |
378 次 |
| 最近记录: |