gpt4 book ai didi

ios - 将 MKMapView 更新为从 CLGeocoder 返回的 CLPlacemark

转载 作者:可可西里 更新时间:2023-11-01 06:19:22 24 4
gpt4 key购买 nike

我希望能够通过允许用户在 UIAlertView 中输入地址或位置来更新显示在 MKMapView 上的区域。我目前有:

        if (geocoder.geocoding)
[geocoder cancelGeocode];

[geocoder geocodeAddressString:[[alertView textFieldAtIndex:0] text] completionHandler:^(NSArray *placemarks, NSError *error) {
if (!error) {
NSLog(@"Found a location");
} else {
NSLog(@"Error in geocoding");
}

NSLog(@"Num found: %d", [placemarks count]);

CLPlacemark *placemark = [placemarks objectAtIndex:0];
MKCoordinateRegion region;
region.center.latitude = placemark.region.center.latitude;
region.center.longitude = placemark.region.center.longitude;
MKCoordinateSpan span;
double radius = placemark.region.radius / 1000;

NSLog(@"Radius is %f", radius);
span.latitudeDelta = radius / 112.0;
//span.longitudeDelta = ???

region.span = span;

NSLog(@"Region is %f %f %f", region.center.latitude, region.center.longitude, span.latitudeDelta);

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

我的问题是我不确定如何计算经度增量。

最佳答案

您可以将其设置为等于 latitudeDelta, map View 将根据需要进行调整。

但是您不需要首先自己计算跨度。您可以使用:

region = MKCoordinateRegionMakeWithDistance(
placemark.region.center,
placemark.region.radius,
placemark.region.radius);

不确定你问题的第二部分。


在 iOS 7 及更高版本中, CLPlacemark 返回的 region 实际上是一个 CLCircularRegion(参见 Deprecated CLRegion methods - how to get radius?)。

尽管原始代码仍将按原样运行,但您可能会收到编译器警告,提示 radiuscenter 已弃用。

为避免警告,将 region 转换为 CLCircularRegion:

CLCircularRegion *pmCircularRegion = (CLCircularRegion *)placemark.region;

region = MKCoordinateRegionMakeWithDistance(
pmCircularRegion.center,
pmCircularRegion.radius,
pmCircularRegion.radius);

关于ios - 将 MKMapView 更新为从 CLGeocoder 返回的 CLPlacemark,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9164920/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com