地理编码和地理反编码

#import <UIKit/UIKit.h>
#import <CoreLocation/CoreLocation.h>

@interface ViewController : UIViewController<CLLocationManagerDelegate>
{
    CLLocationManager *_locationManager;
    CLGeocoder *_geocoder;
}

@property (strong, nonatomic) IBOutlet UILabel *geocodingResultsLabel;
@property (strong, nonatomic) IBOutlet UIButton *reverseGeocodingButton;
@property (strong, nonatomic) IBOutlet UITextField *addressTextField;

- (IBAction)findCurrentAddress:(id)sender;
- (IBAction)findCoordinateOfAddress:(id)sender;

反向地理编码:

- (IBAction)findCurrentAddress:(id)sender
{
    if([CLLocationManager locationServicesEnabled])
    {
        if(_locationManager==nil)
        {
            _locationManager=[[CLLocationManager alloc] init];
            _locationManager.distanceFilter = 500;
            _locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters;
            _locationManager.delegate = self;

            // For backward compatibility, set the deprecated purpose property
            // to the same as NSLocationUsageDescription in the Info.plist
            _locationManager.purpose = [[NSBundle mainBundle]
                                         objectForInfoDictionaryKey:@"NSLocationUsageDescription"];
          }

        [_locationManager startUpdatingLocation];
        self.geocodingResultsLabel.text = @"Getting location...";
    }
    else
    {
        self.geocodingResultsLabel.text=@"Location services are unavailable";
    }
}
-(void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error
{
    if(error.code == kCLErrorDenied)
    {
        self.geocodingResultsLabel.text = @"Location information denied";
    }
}

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
{
    // Make sure this is a recent location event
    CLLocation *newLocation = [locations lastObject];
    NSTimeInterval eventInterval = [newLocation.timestamp timeIntervalSinceNow];
    if(abs(eventInterval) < 30.0)
    {
        // Make sure the event is valid
        if (newLocation.horizontalAccuracy < 0)
            return;

        // Instantiate _geocoder if it has not been already
        if (_geocoder == nil)
            _geocoder = [[CLGeocoder alloc] init];

        //Only one geocoding instance per action
        //so stop any previous geocoding actions before starting this one
        if([_geocoder isGeocoding])
            [_geocoder cancelGeocode];

        [_geocoder reverseGeocodeLocation: newLocation
            completionHandler: ^(NSArray* placemarks, NSError* error)
            {
                if([placemarks count] > 0)
                {
                    CLPlacemark *foundPlacemark = [placemarks objectAtIndex:0];
                    self.geocodingResultsLabel.text =
                        [NSString stringWithFormat:@"You are in: %@", foundPlacemark.description];
                }
                else if (error.code == kCLErrorGeocodeCanceled)
                {
                    NSLog(@"Geocoding cancelled");
                }
                else if (error.code == kCLErrorGeocodeFoundNoResult)
                {
                    self.geocodingResultsLabel.text=@"No geocode result found";
                }
                else if (error.code == kCLErrorGeocodeFoundPartialResult)
                {
                    self.geocodingResultsLabel.text=@"Partial geocode result";
                }
                else
                {
                    self.geocodingResultsLabel.text=[NSString stringWithFormat:@"Unknown error: %@", error.description];
                }
            }
         ];

        //Stop updating location until they click the button again
        [manager stopUpdatingLocation];
    }
}

地理编码:

- (IBAction)findCoordinateOfAddress:(id)sender
{
    // Instantiate _geocoder if it has not been already
    if (_geocoder == nil)
        _geocoder = [[CLGeocoder alloc] init];

    NSString *address = self.addressTextField.text;
    [_geocoder geocodeAddressString:address
        completionHandler:^(NSArray *placemarks, NSError *error)
        {
            if ([placemarks count] > 0)
            {
                CLPlacemark *placemark = [placemarks objectAtIndex:0];

                self.geocodingResultsLabel.text = placemark.location.description;
            }
            else if (error.domain == kCLErrorDomain)
            {
                switch (error.code)
                {
                    case kCLErrorDenied:
                        self.geocodingResultsLabel.text = @"Location Services Denied by User";
                        break;
                    case kCLErrorNetwork:
                        self.geocodingResultsLabel.text = @"No Network";
                        break;
                    case kCLErrorGeocodeFoundNoResult:
                        self.geocodingResultsLabel.text = @"No Result Found";
                        break;
                    default:
                        self.geocodingResultsLabel.text = error.localizedDescription;
                        break;
                }
            }
            else
            {
                self.geocodingResultsLabel.text = error.localizedDescription;
            }

        }
     ];
}

实践需要注意:

1、一次只发送一个地理信息编码请求

2、如果用户执行的动作导致对相同的位置进行地理信息编码,那么应该重用结果而不是多次请求相同的位置

3、一分钟内不应该发送一个以上的地理信息编码请求。你应该检查用户在调用另一次地理信息编码请求前位置是否发生了显著移动。

4、如果看不到结果,那么请不要执行地理信息编码请求(比如说,应用程序是否运行在后台)

时间: 2024-10-08 23:34:55

地理编码和地理反编码的相关文章

iOS学习_地图_定位和编码与反编码

定位: 引入头文件  #import <CoreLocation/CoreLocation.h>声明管理器属性:@property(nonatomic,strong)CLLocationManager *manager;第一步:初始化管理器self.manager = [[CLLocationManager alloc] init];第二步:进行隐私的判断并授权 //进行隐私的判断 if (![CLLocationManager locationServicesEnabled]) { NSLo

位置与地图:几种位置反编码方式

位置反编码的基本概念 位置的编码就是将经纬度转换为具体的位置信息 ios5.0之后使用CLGeocoder类,用于反编码处理;ios5之前则使用MKReverseGeoCoder类进行反编码处理 1.CLGeocoder位置反编码 //-------------------CLGeocoder位置反编码 - 5.0之后使用------------------------- CLGeocoder *geocoder = [[CLGeocoder alloc]init]; [geocoder rev

objective-c开发——地图定位之地理编码和地理反编码

我们平时做地图定位,主要是靠经纬度来准确定位某个位置. 但是,我们是人啊,我们不是卫星啊. 用户在地图上查一个地方,我们总不能告诉他,这个地方是东经多少度,北纬多少度吧. 咱们好歹得告诉人家个地名不是? 这就是我们今天说的地理编码和地理反编码. 地理编码:你说个地名,比如“西湖”,我们给你返回它的经纬度,然后你通过查出来的这个经纬度去定位 反地理编码:我告诉你一个经纬度,你通过经度纬度返回地名.最好在插个大头针在地图上就更好了,啥叫大头针,咱们以后再说. 首先,我的界面是这个样纸的,就是两个按钮

ios地理信息反编码

通过定位我们可以获得经度和纬度,通过地理信息反编码可以通过地理坐标返回某个地点的相关文字描述.这些描述封装在CLPlacemark类中,它的属性为:1)addressDictionary,地理信息字典2)ISOcountryCode,ISO国家代号3)Country,国家信息4)postalCode,邮政编码5)adminisrativeArea,行政区域信息6)locality,指定城市信息个人认为,字典中存储的值 跟 CLPlacemark中其它的属性的值是相同的. 地理信息反编码使用CLG

定位- CLGeoencoder - 反编码

#import "ViewController.h" #import "MBProgressHUD+MJ.h" #import <CoreLocation/CoreLocation.h> @interface ViewController () @property (nonatomic, strong) CLGeocoder *geocoder; // 编码对象 @property (weak, nonatomic) IBOutlet UILabel *

iOS定位服务与地图开发(2)---地理信息反编码

上节我们通过定位获取了经度和纬度数值,但是一般人很难看懂这些数字. 地理信息反编码:就是根据这些经纬数字返回地点的相关文字描述信息,这些文字描述信息被封装在CLPlacemark类中,我们称这个类为"地标"类. 地理信息反编码使用CLGeocoder类实现,这个类能够实现在地理坐标与地理文字描述信息之间的转换. CLGeocoder类中进行地理信息反编码的方法是:reverseGeocodeLocation: completionHandler: location:是要定位的地理位置对

地图定位CoreLocation框架,地理位置编码与反编码

在现代互联网时代,越来越多的应用,都用到了地图定位功能,在iOS开发中,想要加入这种功能,必须基于两个框架进行开发: 1.Map Kit:用于显示地图, 2.CoreLocation:用于显示地理位置 这里我们简单了解一下CoreLocation,用于显示地理位置,坐标信息. 一.相关类介绍 CLLocationManager.用于定位服务管理类,它能够给我们提供位置信息和高度信息,也可以监控设备进入或离开某个区域,还可以获得设备的运行方向. CLLocation.封装了位置和高度信息. CLL

位置与地图(一)定位获取位置及位置反编码

*我们的应用程序,可以通过添加Core Location框架所包含的类,获取设备的地图位置. *添加CoreLocation.framework框架,导入#import<CoreLocation/CoreLocation.h> *使用地图服务时,会消耗更多地设备电量.因此,在获取到设备的位置后,应该停止定位来节省电量 @跟往常一样,我们通过一个demo来展示内容与效果 // // HMTRootViewController.h // My-GPS-Map // // Created by la

百度地图-反编码心得

类似于微信中的发送位置,拖拽重新定位,以及反编码,列表附近的位置. 思路就是将一个UIImageView固定在地图中间,每次更新位置,给UIImageView添加动画即可. 代码如下: #import "FTBasicController.h" typedef void (^SelectBlock) (NSString *address,CLLocationCoordinate2D select); @interface FTUploadAddressController : FTBa

使用apache-commons-lang3架构对HTML内容进行编码和反编码

直接用下面这段代码就可以了: 1 String a="<br>"; 2 3 String a_str=StringEscapeUtils.escapeHtml4(a);//编码 4 5 System.out.println(a_str); 6 7 String b_str=StringEscapeUtils.unescapeHtml4(a_str);//反编码 8 System.out.println(b_str); 原文地址:https://www.cnblogs.com