集成谷歌地圖遇到的那些坑及解決辦法

集成谷歌地圖遇到的那些坑及解決辦法,寫在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在網絡上寫文章,格式不太好好,湊合着看呀

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章