ios获取当前城市 ,位置,坐标,经纬度

有些时候可能只是用到地图的某些功能,比如获取当前所在的城市,然后根据城市返回相应的数据,而不需要其他操作,每次都要写那么几行代码,所以就做了小小的封装,后期可能会添加新功能,来适应app的各种需求(使其变得更为强大)

github打包地址:https://github.com/iOSSinger/SGLocation

核心代码:

使用方法:

    //一行代码获取当前城市
    [loc setGetCity:^(NSString *city) {
        NSLog(@"%@",city);
    }];

    //一行代码获取当前位置
    [loc setGetLocation:^(NSString *location) {
        NSLog(@"%@",location);
    }];

    //一行代码获取当前坐标
    [loc setGetCoordinate:^(CLLocationCoordinate2D coodinate) {
        NSLog(@"%f-%f",coodinate.latitude,coodinate.longitude);
    }];

具体实现代码,其实用block将值传回来,而不需要使用代理

#import "SGLocation.h"

@interface SGLocation()<CLLocationManagerDelegate>

@property (nonatomic,strong) CLLocationManager *manager;

@end

@implementation SGLocation

static SGLocation *_instance;
+ (instancetype)allocWithZone:(struct _NSZone *)zone{
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        _instance = [super allocWithZone:zone];
    });
    return _instance;
}

+ (instancetype)shareLocation{
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        _instance = [[self alloc] init];
    });
    return _instance;
}

- (CLLocationManager *)manager{
    if (_manager == nil) {
        _manager = [[CLLocationManager alloc] init];
        _manager.delegate = self;
        [_manager requestWhenInUseAuthorization];
    }
    return _manager;
}
- (void)setGetCity:(void (^)(NSString *))getCity{
    _getCity = getCity;
    [self.manager startUpdatingLocation];
}
- (void)setGetCoordinate:(void (^)(CLLocationCoordinate2D))getCoordinate{
    _getCoordinate = getCoordinate;
    [self.manager startUpdatingLocation];
}
- (void)setGetLocation:(void (^)(NSString *))getLocation{
    _getLocation = getLocation;
    [self.manager startUpdatingLocation];
}
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations{
    CLLocation *loc =[locations lastObject];

    //反地理编码
    CLGeocoder *geocoder = [[CLGeocoder alloc] init];
    [geocoder reverseGeocodeLocation:loc completionHandler:^(NSArray *placemarks, NSError *error) {
        if (placemarks.count) {
            //获取当前城市
            CLPlacemark *mark = placemarks.firstObject;
            NSDictionary *dict = [mark addressDictionary];
            NSString *city = [dict objectForKey:@"State"];
            //城市
            if (self.getCity) {
                self.getCity(city);
                [self.manager stopUpdatingLocation];
            }

            //坐标
            if(self.getCoordinate){
                self.getCoordinate(mark.location.coordinate);
                [self.manager stopUpdatingLocation];
            }

            //位置信息
            if (self.getLocation) {
                self.getLocation(mark.name);
                [self.manager stopUpdatingLocation];
            }
        }
    }];
}

@end
时间: 2024-10-14 07:22:41

ios获取当前城市 ,位置,坐标,经纬度的相关文章

通过IP地址获取省份城市位置信息

private String mResult = null; private String mProvinceName; //省份 private String mChCityName; //城市 private int GET_CITY_SUCCESS = 1; private int GET_CITY_FAILURE = 2; //Handler接收到消息进行处理,取出需要的信息 privateHandler mHandler = new Handler() { public void ha

欧美斯项目签到功能,实时获取当前所在位置的经纬度

由于欧美斯项目需要签到功能,因此需要给后台传一个当前位置的经纬度,以下是获取经纬度的方法 1>导入CoreLocation.frameWork 2>引入头文件,并遵循协议 #import <CoreLocation/CoreLocation.h> <CLLocationManagerDelegate> 3>代码 @interface YYAboutUsViewController ()<UIWebViewDelegate,CLLocationManagerD

iOS获取当前城市

1.倒入头文件 #import <CoreLocation/CoreLocation.h> 2.实现定位协议CLLocationManagerDelegate 3.定义定位属性 @property(nonatomic,retain)CLLocationManager *locationManager; 4.开始定位 - (void)locate { // 判断定位操作是否被允许 if([CLLocationManager locationServicesEnabled]) { self.loc

ios项目开发(天气预报项目):通过经纬度获取当前城市名称

 1 . 在项目里添加 CoreLocation.framework 2 .在 .h 文件输入如下: 1.#import <CoreLocation/CLLocation.h> 2.#import <CoreLocation/CLLocationManager.h> 3.#import <coreLocation/CLGeocoder.h> 4.#import <coreLocation/CLPlacemark.h> 3 . 在 .m文件输入如下: 1.

百度地图定位 : 获取当前位置的经纬度

说明: 1.初始化 BaiduMap SDK要在显示界面之前,即: SDKInitializer.initialize(Context); setContentView(R.layout.main); 2. 设置定位的模式是 LocationMode.Hight_Accuracy 时,在室内可能无法获取到准确的经纬度,会得到默认的值是4.9E-324 处理办法是将模式改为Battery_Saving,或到室外 3.可以根据当前设备网络连接情况和GPS是否开启来设定定位模式 //获得网络连接情况

【hbuilder】如何根据Geolocation获得的坐标获取所在城市?

第一步通过mui.plusReady[表示页面加载事件]调用hbuilder提供的百度定位 mui.plusReady(function() { plus.geolocation.getCurrentPosition( geoInf, function ( e ) { },{geocode:true,provider:'amap'}); }); 第二步通过geolnf 方法来获取具体的定位信息 function geoInf( position ) { var codns = position.

UWP Windows10开发获取设备位置(经纬度)

1.首先要在UWP项目的Package.appxmanifest文件中配置位置权限,如下图所示: 2.Package.appxmanifest后选择第三个选项卡,勾选位置权限(Location) 打开 3.然后创建一个LocationManage类,包括以下代码: public async static Task<Geoposition> GetPosition() { //请求对位置的访问权 var accessStatus = await Geolocator.RequestAccessA

微信,根据经纬度获取当前城市

浏览器原生跟微信JS-SDK两种方法获取用户经纬度和所在城市的方法 www.MyException.Cn 网友分享于:2015-09-24 浏览:0次 浏览器原生和微信JS-SDK两种方法获取用户经纬度和所在城市的方法 网上找了很多根据经纬度获取城市的文章,没发现特别好用的,于是自己写了一个,包含自带浏览器获取经纬度和微信JS-SDK获取经纬度的方法,获取后并存入localStorage. 参考资料如下 微信JS-SDK :http://mp.weixin.qq.com/wiki/7/aaa13

iOS 获取 UITabViewController 和 UINavigationController 的图标位置

这些图标是放在 UITabBar 和 UINavigationBar 里的.所以只要遍历它们的 subViews,找到类型是 UIButton 的就可以了. 所有想获取它们的相对位置很容易. 但我有个需求是需要在整个屏幕覆盖一层 UIView,然后在 这些图标旁画一些图案(其实我是在做应用教程).这时候就需要获取他们在整个视图中相对于最外层的 UIViewController 的位置.这就没有那么容易了. 我的应用中,最外层有一个UITabBarController,里面嵌套一个 UINavig