集成谷歌地图遇到的那些坑及解决办法

集成谷歌地图遇到的那些坑及解决办法,写在2017年春

前言 w偶勒个去csdn既然也有markdown的速写方式了,我今天知道,安慰一下自己:任何后知后觉,回头来看,感觉都是也是萌萌哒

  1. 有哪些坑

    1.下载sdk时间过长
    中文官网里说明从github上pod ‘GoogleMaps’一下,就ok了,是就这么简单,几百兆的GoogleMaps模块,此过程在国内需要耗费很长时间,你可以去打个篮球再回来看看有没有下载好
    2.中文网站sdk使用方法更新不及时
    擦擦擦,这个地方如果不熟悉的话很耗费时间啊,至少要花费您半天时间来集成。网站里说明从github上pod ‘GoogleMaps’一下,事实上在使用的时候你会发现少了很多类

    3.位置偏移
    天朝,咱!你还没习惯吗,没习惯不要紧,慢慢就习惯了

  2. 解决办法

    1.下载sdk时间过长
    哥们我下载好了你可以向我要啊,哈哈哈,我这么乐于助人
    2.中文网站sdk使用方法更新不及时
    说道这个真相喷google,一想到自己素质这么高,还是忍住了,<-_<-。
    事实上Google Map SDK在2.1.1的时候将sdk模块化了,还需要导入GooglePlaces模块,在做到地址选择器的时候发现少了一个placepicker类,找啊找,没找到任何影子,难道我下载的sdk又问题吗?NO,不要怀疑自己更不要怀疑人生,但通常时候我们都会情不自禁的怀疑。事实上google map sdk模块化的很彻底,竟然将placepicker单独一个模块。贴上代码:
    source ‘https://github.com/CocoaPods/Specs.git’
    platform :ios, ‘8.1’
    pod ‘GoogleMaps’
    pod ‘GooglePlaces’, ‘~> 2.1.1’
    pod ‘GooglePlacePicker’, ‘~> 2.1.1’
    3.位置偏移
    google map sdk在国内显示位置有偏差,具体为什么有偏差我就不阐述了,实际上连我也没搞懂,为什么要设置这道没有意义坎。千找万找还是找到了解决办法。找到了一段java代码,修改成了我需要的OBJECTIVE-C代码,从此我大OC界不要再去求人了,经亲测,中!!,贴代码:

@interface CorrentLocationTool : NSObject
+ (CLLocationCoordinate2D)correntLocation:(CLLocationCoordinate2D)cor;
@end

#import "CorrentLocationTool.h"

@implementation CorrentLocationTool

static double pi = 3.14159265358979324;
static double a = 6378245.0;
static double ee = 0.00669342162296594323;

+ (CLLocationCoordinate2D)correntLocation:(CLLocationCoordinate2D)cor
{
    double wgLat = cor.latitude;
    double wgLon = cor.longitude;
    CLLocationCoordinate2D coordinate;

    if (outOfChina(wgLat, wgLon)) {
        coordinate.latitude = wgLat;
        coordinate.longitude = wgLon;
        return coordinate;
    }
    double dLat = transformLat(wgLon - 105.0, wgLat - 35.0);
    double dLon = transformLon(wgLon - 105.0, wgLat - 35.0);

    double radLat = wgLat / 180.0 * pi;
    double magic = sin(radLat);
    magic = 1 - ee * magic * magic;
    double sqrtMagic = sqrt(magic);

    dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * pi);
    dLon = (dLon * 180.0) / (a / sqrtMagic * cos(radLat) * pi);

    coordinate.latitude = wgLat + dLat;
    coordinate.longitude = wgLon + dLon;

    return coordinate;
}

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;
}

static double transformLat(double x, double y) {
    double ret = -100.0 + 2.0 * x + 3.0 * y + 0.2 * y * y + 0.1 * x * y + 0.2 * sqrt(fabs(x));
    ret += (20.0 * sin(6.0 * x * pi) + 20.0 * sin(2.0 * x * pi)) * 2.0 / 3.0;
    ret += (20.0 * sin(y * pi) + 40.0 * sin(y / 3.0 * pi)) * 2.0 / 3.0;
    ret += (160.0 * sin(y / 12.0 * pi) + 320 * sin(y * pi / 30.0)) * 2.0 / 3.0;
    return ret;
}

static double transformLon(double x, double y) {
    double ret = 300.0 + x + 2.0 * y + 0.1 * x * x + 0.1 * x * y + 0.1 * sqrt(fabs(x));
    ret += (20.0 * sin(6.0 * x * pi) + 20.0 * sin(2.0 * x * pi)) * 2.0 / 3.0;
    ret += (20.0 * sin(x * pi) + 40.0 * sin(x / 3.0 * pi)) * 2.0 / 3.0;
    ret += (150.0 * sin(x / 12.0 * pi) + 300.0 * sin(x / 30.0 * pi)) * 2.0 / 3.0;
    return ret;
}

@end
  1. 注意事项
    (1)集成2.1.1版的GoogleMaps SDK 如果您需要地址,需要注册两个服务
    [GMSServices provideAPIKey:@"yours key"];
    [GMSPlacesClient provideAPIKey:@"yours key"];
(2)国内访问被墙,目前正准备处理这个问题,处理好了,在微博上告诉大家

ps:第一次使用markdown在网络上写文章,格式不太好好,凑合着看呀

你可能感兴趣的:(iOS开发)