寫在前面 :
請求谷歌API,您可以通過請求 http://maps.googleapis.com/(對于中國用戶,則是 http://maps.google.cn)通過 HTTP 加載 Maps JavaScript API。
如果用SDK的形式集成,那么必須翻墻,API請求的都是https://www.google.com/maps.
JS集成 : Maps JavaScript API
官方集成文檔 :
Google Maps API
Google Places API
記錄下這兩天搗鼓谷歌地圖的內(nèi)容和想法.
PS : 這不是什么干貨文章,只是記錄下遇到的坑
- 新公司新項目打算使用谷歌地圖,主要是面向海外海淘.
- 谷歌地圖需要翻墻.不翻墻沒有數(shù)據(jù).
- 谷歌地圖用的是WGS84坐標(biāo)系(國際坐標(biāo)系),但是中國這邊國家測繪要求用GCJ-02加密一次(火星坐標(biāo)).
- 根據(jù)互聯(lián)網(wǎng)地圖服務(wù)規(guī)定,國內(nèi)互聯(lián)網(wǎng)地圖必須使用國測局加密的gcj02坐標(biāo)系,高德和谷歌在中國的坐標(biāo)都是這一坐標(biāo)系,可以互通,谷歌的地圖數(shù)據(jù)就是高德提供的。百度在gcj02的基礎(chǔ)上,又做了一次加密,坐標(biāo)系跟高德、谷歌不同。
遇到的坑
1.根據(jù)官方的集成文檔,還有官方提供的Demo.在集成谷歌地圖的時候.把定位到當(dāng)前位置的按鈕打開.會發(fā)現(xiàn)在中國,根本定位不準(zhǔn).
2.在控制臺上遇到了很多報錯信息,都讓人誤認(rèn)為是自己的錯誤.其實谷歌自己提供的Demo一樣存在這些報錯信息.這個不是崩潰,只是警告信息.
嘗試
第一個坑 : 定位不準(zhǔn)
- 1.按照官方文檔重新集成了好幾遍.
- 2.在github上找其他人的集成Demo.
- 3.對比谷歌自己提供的Demo
- 4.從AppStore中下載Google Maps
發(fā)現(xiàn) :
1,2,3使用谷歌自帶的定位到當(dāng)前的地點(diǎn)都會存在有定位不準(zhǔn)的情況.
同時使用定位到的點(diǎn)獲取的周邊POI也是不準(zhǔn)的.
但是使用Google Maps重新定位一下,又準(zhǔn)到不行!!!!
可能是Google Maps自己已經(jīng)有對火星坐標(biāo)做過優(yōu)化.
真的,
百度了很多 ,都沒有找到對應(yīng)的問題解決方案.大多數(shù)都是轉(zhuǎn)載,有的是用轉(zhuǎn)換火星坐標(biāo)的方法去做.但是不太合適...這樣一來,谷歌本身的部分API,比如獲取某個位置周邊POI,或者其他方法.都需要很麻煩的去操作.并且,如果做了一個這樣的轉(zhuǎn)換,在國內(nèi)準(zhǔn)確了,在國外就不清楚是否準(zhǔn)確了.
嚴(yán)格來說,要做地圖坐標(biāo)轉(zhuǎn)換,數(shù)據(jù)糾偏這些事情.不太靠譜...
思考后
- 谷歌地圖被中國墻了.所以必須翻墻才能訪問.可以不考慮中國用戶
- 翻墻后谷歌地圖在中國的位置上是不準(zhǔn)確的.
- 還有哪些國家和中國的情況一樣?朝鮮
對于這個問題,如果后續(xù)有解決方案的話.在詳細(xì)完整的補(bǔ)充....
根據(jù)網(wǎng)上的解決方法嘗試
PS : 只是嘗試,應(yīng)該不是最終解決方案
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations {
CLLocation *location = [locations lastObject];
NSLog(@"經(jīng)緯度 : %f,%f",location.coordinate.latitude,location.coordinate.longitude);
//反地理編碼
[self.geoC reverseGeocodeLocation:location completionHandler:^(NSArray<CLPlacemark *> * _Nullable placemarks, NSError * _Nullable error) {
if(error == nil)
{
CLPlacemark *pl = [placemarks firstObject];
CLLocationCoordinate2D corAfter;
//判斷是否在中國
if ([pl.country isEqualToString:@"中國"]) {
corAfter = [WGS84TOGCJ02 transformFromWGSToGCJ:location.coordinate];
}else {
corAfter = location.coordinate;
}
//如果位置暫時沒有變,那就不更新
if (self.mapView.camera.target.latitude == corAfter.latitude &&
self.mapView.camera.target.longitude == corAfter.longitude) {
return ;
}
GMSCameraPosition *camera = [GMSCameraPosition cameraWithTarget:corAfter zoom:self.zoomLevel];
if (self.mapView.hidden == YES) {
self.mapView.hidden = NO;
}
[self.mapView animateToCameraPosition:camera];
[self listLikelyPlaces];
GMSMarker *info = [[GMSMarker alloc]init];
info.position = [WGS84TOGCJ02 transformFromWGSToGCJ:location.coordinate];
info.title = pl.name;
info.snippet = pl.thoroughfare;
info.map = self.mapView;
}
}];
}
這里的效果實現(xiàn),就和Google Maps的一樣了.準(zhǔn)!
但是這里又拋出一個問題.就是: 這個自帶的藍(lán)點(diǎn)怎么處理?
此時此刻的心情 : #$^@&#$%*^!#@#!@%