溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

Qt如何實(shí)現(xiàn)地址經(jīng)緯度互轉(zhuǎn)

發(fā)布時(shí)間:2021-12-15 10:16:15 來(lái)源:億速云 閱讀:276 作者:小新 欄目:互聯(lián)網(wǎng)科技

小編給大家分享一下Qt如何實(shí)現(xiàn)地址經(jīng)緯度互轉(zhuǎn),相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

一、前言

地址和經(jīng)緯度互相轉(zhuǎn)換的功能也經(jīng)常用到,比如上次的路線(xiàn)方案查詢(xún)的功能,之前官網(wǎng)是提供了直接輸入出發(fā)地點(diǎn)和目的地的中文漢字,就可以查詢(xún)到最優(yōu)的路線(xiàn),后面只支持輸入出發(fā)地點(diǎn)和目的地的經(jīng)緯度坐標(biāo)了,這個(gè)就有點(diǎn)繞了,讓用戶(hù)輸入什么經(jīng)緯度坐標(biāo),那是個(gè)什么鬼?沒(méi)有幾個(gè)用戶(hù)搞得懂的,所以就需要先將用戶(hù)輸入的出發(fā)地點(diǎn)和目的地的中文漢字先查詢(xún)到對(duì)應(yīng)的經(jīng)緯度坐標(biāo),然后再傳入路線(xiàn)查詢(xún)的JS函數(shù)中查詢(xún)結(jié)果即可,為什么突然關(guān)閉了這個(gè)地址經(jīng)緯度自動(dòng)轉(zhuǎn)換的功能呢?我去后臺(tái)看了下,原來(lái)這項(xiàng)功能變成收費(fèi)模塊了。

地址經(jīng)緯度互換的功能只有在線(xiàn)地圖有,因?yàn)樾枰?a title="服務(wù)器" target="_blank" href="http://www.kemok4.com/">服務(wù)器查詢(xún)對(duì)應(yīng)的數(shù)據(jù),拿到返回的數(shù)據(jù),百度地圖中需要用到BMap.Geocoder來(lái)實(shí)現(xiàn)這兩個(gè)功能的互換,他內(nèi)置了getPoint函數(shù)負(fù)責(zé)將地址轉(zhuǎn)換為經(jīng)緯度坐標(biāo),getLocation函數(shù)負(fù)責(zé)將經(jīng)緯度坐標(biāo)轉(zhuǎn)為地址,于是將這兩個(gè)功能封裝成JS函數(shù),每次需要的時(shí)候直接調(diào)用即可。

二、功能特點(diǎn)

  1. 同時(shí)支持在線(xiàn)地圖和離線(xiàn)地圖兩種模式。

  2. 同時(shí)支持webkit內(nèi)核、webengine內(nèi)核、IE內(nèi)核。

  3. 支持設(shè)置多個(gè)標(biāo)注點(diǎn),信息包括名稱(chēng)、地址、經(jīng)緯度。

  4. 可設(shè)置地圖是否可單擊、拖動(dòng)、鼠標(biāo)滾輪縮放。

  5. 可設(shè)置協(xié)議版本、秘鑰、主題樣式、中心坐標(biāo)、中心城市、地理編碼位置等。

  6. 可設(shè)置地圖縮放比例和級(jí)別,縮略圖、比例尺、路況信息等控件的可見(jiàn)。

  7. 支持地圖交互,比如鼠標(biāo)按下獲取對(duì)應(yīng)位置的經(jīng)緯度。

  8. 支持查詢(xún)路線(xiàn),可設(shè)置起點(diǎn)位置、終點(diǎn)位置、路線(xiàn)模式、路線(xiàn)方式、路線(xiàn)方案(最少時(shí)間、最少換乘、最少步行、不乘地鐵、最短距離、避開(kāi)高速)。

  9. 可顯示點(diǎn)線(xiàn)面工具,可直接在地圖上劃線(xiàn)、點(diǎn)、矩形、圓形等。

  10. 可設(shè)置行政區(qū)劃,指定某個(gè)城市區(qū)域繪制圖層,在線(xiàn)地圖自動(dòng)輸出行政區(qū)劃邊界點(diǎn)集合到j(luò)s文件給離線(xiàn)地圖使用。

  11. 可靜態(tài)或者動(dòng)態(tài)添加多個(gè)覆蓋物。支持點(diǎn)、折線(xiàn)、多邊形、矩形、圓形、弧線(xiàn)、點(diǎn)聚合等。

  12. 函數(shù)接口友好和統(tǒng)一,使用簡(jiǎn)單方便,就一個(gè)類(lèi)。

  13. 支持js動(dòng)態(tài)交互添加點(diǎn)、刪除點(diǎn)、清空點(diǎn)、重置點(diǎn),不需要刷新頁(yè)面。

  14. 支持任意Qt版本、任意系統(tǒng)、任意編譯器。

三、效果圖

Qt如何實(shí)現(xiàn)地址經(jīng)緯度互轉(zhuǎn)

四、相關(guān)代碼

void MapBaiDu::addGeocoder(QStringList &list)
{
    //地址解析成坐標(biāo)+坐標(biāo)解析成地址
    list << QString("  var geo = new BMap.Geocoder();");

    list << QString("  function getPointByAddr(addr) {");
    list << QString("    geo.getPoint(addr, function(result) {");
    list << QString("      if (result) {");
    list << QString("        window.%1('geocoder', result.lng + \",\" + result.lat);").arg(callFun);
    list << QString("      }");
    list << QString("    });");
    list << QString("  }");

    list << QString("  function getAddrByPoint(point) {");
    list << QString("    var list = point.split(',');");
    list << QString("    var pot = new BMap.Point(list[0], list[1]);");
    list << QString("    geo.getLocation(pot, function(result) {");
    list << QString("      if (result) {");
    list << QString("        window.%1('geocoder', result.address);").arg(callFun);
    list << QString("      }");
    list << QString("    });");
    list << QString("  }");
}

void frmMapBaiDu::on_btnAddrToPoint_clicked()
{
    QString addr = ui->txtAddr->text().trimmed();
    runJs(QString("getPointByAddr('%1')").arg(addr));
}

void frmMapBaiDu::on_btnPointToAddr_clicked()
{
    QString point = ui->txtPoint->text().trimmed();
    runJs(QString("getAddrByPoint('%1')").arg(point));
}

以上是“Qt如何實(shí)現(xiàn)地址經(jīng)緯度互轉(zhuǎn)”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

qt
AI