Android 百度地圖轉(zhuǎn)換 bd09ll轉(zhuǎn)bd09mc(墨卡托)

這個(gè)需求是怎么來(lái)的呢?

由于集成百度AR的Sdk,研究過(guò)后,發(fā)現(xiàn)這個(gè)sdk計(jì)算全是使用墨卡托,因?yàn)橛玫桨俣鹊亩ㄎ籹dk,百度提供的AR demo,定位使用的是bd09mc,以下來(lái)自百度AR的demo

 mLocationClient = new LocationClient(context.getApplicationContext());
        // 聲明LocationClient類
        // mLocationClient.registerLocationListener(myListener);
        // 注冊(cè)監(jiān)聽(tīng)函數(shù)
        LocationClientOption option = new LocationClientOption();
        option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);
        option.setCoorType("bd09"); // bd09就是bd09mc墨卡托

而我們的需求是,允許用戶手動(dòng)修改自己的定位,類似滴滴長(zhǎng)按marker后,拖動(dòng)marker移動(dòng)指定位置后,返回該點(diǎn)的坐標(biāo)

問(wèn)題來(lái)了,百度全局設(shè)置只有兩種坐標(biāo):
gcj02:國(guó)測(cè)局坐標(biāo);
bd09ll:百度經(jīng)緯度坐標(biāo);
所以拖動(dòng)后,marker返回的要么是gcj02或者bd09ll,和我們AR要求的bd09mc墨卡托明顯不符
然后看百度文檔,尋找bd09ll轉(zhuǎn)bd09mc(墨卡托)的方法
結(jié)果找半天,沒(méi)有找到
百度文檔只提供了 其他谷歌,高德,騰訊,gcj02及 bd09mc 轉(zhuǎn)化為bd09ll
也就是只能提供其他地圖轉(zhuǎn)百度地圖坐標(biāo)的方法
我就無(wú)語(yǔ)了 bd09mc 和 bd09ll互轉(zhuǎn)呢?這兩個(gè)都是百度的,為啥沒(méi)有方法互轉(zhuǎn)???
然后就開(kāi)始在網(wǎng)上找方法 ,相信應(yīng)該很多人遇到類似問(wèn)題
結(jié)果不其然 找到一篇2015年發(fā)布的文章 https://blog.csdn.net/SLAMDUNK006/article/details/50156205
已經(jīng)過(guò)了整整6年了
這文章就是用了百度webapi ,官方文檔 https://lbsyun.baidu.com/index.php?title=webapi/guide/changeposition
詳細(xì)的不說(shuō)了,看文檔即可,無(wú)非需要?jiǎng)?chuàng)建一個(gè)web項(xiàng)目獲取ak即可
然后一頓操作猛如虎,直接在搞定了,確實(shí)可以完成 bd09ll轉(zhuǎn)bd09mc
難道沒(méi)有更好的辦法了???

第二種方法,直接調(diào)用百度自己封裝的方法

這個(gè)就比較操蛋了,我們不是在文檔找不到么?這個(gè)咋轉(zhuǎn)?
別急!說(shuō)說(shuō)我是怎么找到的這個(gè)轉(zhuǎn)換方法的
這個(gè)也是google找到的,一篇2015年的文章,作者:A Coder,又是2015年,看來(lái)2015年百度地圖很火啊
地址 https://www.bigjin.com/post/bd09mc-bd09ll.html
于是我也直接考過(guò)來(lái)轉(zhuǎn)化,發(fā)現(xiàn)與百度webapi有差距,難道這個(gè)不準(zhǔn)確?我就考慮這文章作者的轉(zhuǎn)換方法是怎么來(lái)的?不會(huì)是自己悟出來(lái)吧?
于是乎 我覺(jué)得自己從百度AR的sdk找答案
功夫不負(fù)有心人,終于找到百度自己封裝的方法 ,跟A Coder的工具類很相似

文件包路徑map.baidu.ar.camera.find.FindArCamGLRender

        Map map = CoordinateConverter.convertLL2MC(((PoiInfoImpl)selectPois.get(i)).getPoiInfo().location.longitude, ((PoiInfoImpl)selectPois.get(i)).getPoiInfo().location.latitude);
        itemGLPoi.setLoc(((Double)map.get("x")).longValue(), ((Double)map.get("y")).longValue(), 100L);

很明顯,CoordinateConverter就是百度自己封裝的工具類 ,convertLL2MC方法就是將bd09ll轉(zhuǎn)bd09mc,經(jīng)過(guò)反復(fù)測(cè)試
轉(zhuǎn)化完全正確。

CoordinateConverter所在文件包:map.baidu.ar.utils,很明顯示ARsdk才會(huì)有這個(gè)工具類

折騰好久 終于解決了,百度sdk埋了大坑,這種工具類居然沒(méi)有放在文檔說(shuō)明,真是坑死個(gè)人。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容