×

iOS 判断当前位置是否在国内

96
Two_Seven
2015.11.06 00:17* 字数 721

作者说:

之前有篇文章被编辑提示说有代码的话还是用Markdown好,所以这篇文章开始改变模式。😄

这次这个问题是老大去日本跑了一次马拉松,然后回国后坐标用天朝的火星坐标一转,在地图上看起来就好像在大海里跑了,找原因发现是因为之前判断位置的方法太粗糙了,把日本算在国内了。那么好了,需求又来了:判断当前坐标点是否在国内。

首先奉上最原始粗糙的这个判定方法。

static bool outofChina(double lat, double lon) {
    if (lon < 72.004 || lon > 137.8347)
        return true;
    if (lat < 0.8293 || lat > 55.8271)
        return true;
    return false;
}

不难发现,其实就是切了四个边,然后画了一个大方块,默认这个方块里面就都是大天朝的啦。

接下来我就去搜索,其实这个时候就知道api文档里面本身就有一个反编译坐标的接口,可是当时不知道怎么想的就是不想用,然后我就搜到了这个:(iOS)判断GPS坐标是否在中国,这个可以说是大方块的加强版啊,有兴趣的同学可以看看,主要就是这个方法:

 BOOL ischina = [[ZCChinaLocation shared] isInsideChina:    (CLLocationCoordinate2D){44.042156,132.759178}];

,其实这个方法就已经把日本给成功排除出去了,可是老大来了一句,那我在边境线往外一点点的地方跑怎么算,好吧,我接着去查,最后我还是用苹果的api了,

  CLGeocoder *geoCoder = [[CLGeocoder alloc]  init];
   [geoCoder reverseGeocodeLocation:location completionHandler:^(NSArray<CLPlacemark *> * _Nullable placemarks, NSError * _Nullable error) {
}];

调用这个方法我是用ISOcountryCode这个属性来判断的,一开始还遇到了个坑,这个值竟然港澳台都有各自对应的值,我的天,差点一不小心把国家给分裂出去,具体的code可以去这个网站上去查 Country Codes List 此外还有一个问题就是这个方法有时候会有一定的延迟,还有就是苹果也建议不要连续调用这个方法。

苹果原文:


D9186D5C-71B1-4978-BAC7-E3D574823ED5.png

最后这个方法我封了个小demo,其实就是个类别啦。CLGeocoder,不过我没把港澳台封进去,不要做伸手党啦,至少自己改动一下。

最后的最后,感谢简书上的各位,你们的喜欢、评论、关注,让我越发的喜欢把工作中遇到的各种问题写出来和大家分享。

ps: 这个Markdowm的代码引用搞得我好纠结啊 为什么有时好用,有时就不好用啊,搞得我要反反复复加引号去引号,是不是我的操作方式不对,求指导。


Paste_Image.png
iOS
Web note ad 1