美文网首页知识分子就是ios用的iOS 开发
iOS 判断当前位置是否在国内

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

作者: Two_Seven | 来源:发表于2015-11-06 00:17 被阅读2035次

作者说:

之前有篇文章被编辑提示说有代码的话还是用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

相关文章

网友评论

  • 杏仁丶:```(单独一行,必须英文键盘下输入)
    (代码段)
    ```(单独一行,必须英文键盘下输入)
    感谢分享
  • tdt:还可以再加个补充条件,蜂巢网络能直连GOOGLE的肯定不在国内。。。 :smile:
  • 叶舞清风:正在往地图定位努力
    叶舞清风:@Two_Seven 谢谢😌
    Two_Seven:@叶舞清风 加油加油
  • fe1d419e07f8:大有启发!谢谢!
    Two_Seven:@fe1d419e07f8 :blush: 能帮到你就好
  • Gaivn:好文章,正在考虑有什么方法知道用户是在国内还是国外。
    Two_Seven:@Gavin__Li 多谢肯定 :stuck_out_tongue:

本文标题:iOS 判断当前位置是否在国内

本文链接:https://www.haomeiwen.com/subject/qdkchttx.html