真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Qt如何編寫地圖標(biāo)注點(diǎn)交互

這篇文章主要講解了“Qt如何編寫地圖標(biāo)注點(diǎn)交互”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“Qt如何編寫地圖標(biāo)注點(diǎn)交互”吧!

專注于為中小企業(yè)提供成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)莒縣免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了成百上千企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過(guò)網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。

一、前言

地圖項(xiàng)目應(yīng)用中,標(biāo)注點(diǎn)的交互使用頻率非常高,這應(yīng)該是最常用的場(chǎng)景,比如從數(shù)據(jù)庫(kù)中讀取出來(lái)設(shè)備的信息包括經(jīng)緯度坐標(biāo),然后需要在地圖上顯示對(duì)應(yīng)的設(shè)備,這就需要用addMarker函數(shù)來(lái)動(dòng)態(tài)添加標(biāo)注點(diǎn),關(guān)于封裝的這個(gè)函數(shù),陸陸續(xù)續(xù)經(jīng)歷過(guò)好多年的完善,很奇怪為啥這么簡(jiǎn)單的功能還需要完善,其實(shí)這也是實(shí)戰(zhàn)項(xiàng)目應(yīng)用中不斷積累的,滿足各種簡(jiǎn)單的和復(fù)雜的應(yīng)用場(chǎng)景而來(lái),這個(gè)函數(shù)帶有很多參數(shù),至少10個(gè),接下來(lái)就羅列下具體的參數(shù)含義以及遇到的需求場(chǎng)景。

  • v0.1:addMarker(name, point),很簡(jiǎn)單,初學(xué)者級(jí)別,只需要傳入名稱和經(jīng)緯度坐標(biāo)。

  • v0.2:addMarker(name, addr, title, tips, point),多了三個(gè)參數(shù),分別是地址、標(biāo)題、提示內(nèi)容,最開始做的時(shí)候是傳入的字符串內(nèi)容是啥就顯示啥,后面發(fā)現(xiàn)還不夠靈活,比如很多用戶就需要自定義內(nèi)容甚至顏色進(jìn)行提示信息顯示,這就需要支持html格式的內(nèi)容。

  • v0.3:addMarker(name, addr, title, tips, width, point, action),多了兩個(gè)參數(shù),一個(gè)表示彈框的寬度,當(dāng)設(shè)定了寬度的話就按照設(shè)定的值展示,action有3種選擇,表示單擊以后觸發(fā)什么動(dòng)作 0-不處理 1-自己彈框 2-發(fā)送信號(hào),默認(rèn)0表示不處理,如果添加標(biāo)注點(diǎn)的時(shí)候填入的1則按照設(shè)定的提示內(nèi)容進(jìn)行彈框,2則不彈框,但是會(huì)將標(biāo)識(shí)信息信號(hào)的形式發(fā)給界面,讓界面自己處理,比如單擊一個(gè)標(biāo)注點(diǎn)以后彈窗顯示對(duì)應(yīng)點(diǎn)的實(shí)時(shí)視頻。

  • v0.4:addMarker(name, addr, title, tips, width, point, action, animation, iconfile, iconindex),多了三個(gè)參數(shù),animation表示動(dòng)畫效果 0-不處理 1-跳動(dòng) 2-墜落,用來(lái)區(qū)分不同的設(shè)備,iconfile 表示圖標(biāo)文件路徑,不設(shè)置則采用默認(rèn)圖標(biāo),注意圖片的尺寸,iconindex 表示圖標(biāo)對(duì)應(yīng)在圖片中的索引,本地文件則當(dāng)做圖片尺寸。提示信息會(huì)根據(jù)尺寸自動(dòng)調(diào)整到合適位置顯示。

  • v0.5:增加刪除標(biāo)注點(diǎn)函數(shù)deleteMarker(name)和移動(dòng)標(biāo)注點(diǎn)函數(shù)moveMarker(name, point),如果name為空則表示所有標(biāo)注點(diǎn)。

二、功能特點(diǎn)

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

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

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

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

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

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

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

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

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

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

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

  12. 提供函數(shù)接口處理經(jīng)緯度解析成地址和地址解析成經(jīng)緯度坐標(biāo)。

  13. 提供的demo直接可以單獨(dú)選點(diǎn)執(zhí)行對(duì)應(yīng)的處理比如路線查詢。

  14. 可以拿到路線查詢到的點(diǎn)坐標(biāo)信息集合,比如用于機(jī)器人坐標(biāo)導(dǎo)航等。

  15. 封裝了豐富的函數(shù)比如刪除指定點(diǎn)和所有點(diǎn),刪除指定覆蓋物和所有覆蓋物等。

  16. 標(biāo)注點(diǎn)彈框信息可以自定義內(nèi)容,標(biāo)準(zhǔn)html格式。

  17. 標(biāo)注點(diǎn)單擊事件可選 0-不處理 1-自己彈框 2-發(fā)送信號(hào)。

  18. 標(biāo)注點(diǎn)可設(shè)置動(dòng)畫效果 0-不處理 1-跳動(dòng) 2-墜落

  19. 標(biāo)注點(diǎn)可設(shè)置本地圖片文件等。

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

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

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

三、效果圖

Qt如何編寫地圖標(biāo)注點(diǎn)交互 Qt如何編寫地圖標(biāo)注點(diǎn)交互

四、相關(guān)代碼

void MapBaiDu::addMarker(QStringList &list)
{
    //動(dòng)態(tài)添加點(diǎn)
    //name      表示標(biāo)注點(diǎn)名稱 顯示在圖標(biāo)旁邊的文本 為空則不顯示
    //addr      表示標(biāo)注點(diǎn)地址
    //title     表示彈框信息html格式標(biāo)題
    //tips      表示彈框信息html格式內(nèi)容
    //width     表示彈框的寬度
    //point     表示經(jīng)緯度坐標(biāo)
    //action    表示單擊以后觸發(fā)什么動(dòng)作 0-不處理 1-自己彈框 2-發(fā)送信號(hào)
    //animation 表示動(dòng)畫效果 0-不處理 1-跳動(dòng) 2-墜落
    //iconfile  表示圖標(biāo)文件路徑,不設(shè)置則采用默認(rèn)圖標(biāo),注意圖片的尺寸
    //iconindex 表示圖標(biāo)對(duì)應(yīng)在圖片中的索引,本地文件則當(dāng)做圖片尺寸
    list << QString("  function addMarker(name, addr, title, tips, width, point, action, animation, iconfile, iconindex) {");
    list << QString("    var list = point.split(',');");
    //設(shè)置點(diǎn)經(jīng)緯度坐標(biāo)
    list << QString("    var pot = new BMap.Point(list[0], list[1]);");
    //設(shè)置文本文字 offset為對(duì)應(yīng)標(biāo)簽顯示的位置偏移值
    list << QString("    var label = new BMap.Label(name, {\"offset\":new BMap.Size(20, -10)});");

    //設(shè)置圖標(biāo),不設(shè)置則采用默認(rèn)圖標(biāo)
    list << QString("    if (!iconfile) {");
    list << QString("      var marker = new BMap.Marker(pot);");
    list << QString("    } else if (iconfile == 'http://lbsyun.baidu.com/jsdemo/img/fox.gif') {");
    list << QString("      var icon = new BMap.Icon(iconfile, new BMap.Size(300, 157));");
    list << QString("      var marker = new BMap.Marker(pot, {icon: icon});");
    list << QString("    } else if (iconfile == 'http://api.map.baidu.com/img/markers.png') {");
    list << QString("      var icon = new BMap.Icon(iconfile, new BMap.Size(23, 25), {offset: new BMap.Size(10, 25), imageOffset: new BMap.Size(0, 0 - iconindex * 25)});");
    list << QString("      var marker = new BMap.Marker(pot, {icon: icon});");
    list << QString("    } else {");
    list << QString("      var size = 50;");
    list << QString("      if (iconindex) {");
    list << QString("        size = iconindex;");
    list << QString("      }");
    list << QString("      label = new BMap.Label(name, {\"offset\":new BMap.Size(size, -10)});");
    list << QString("      var icon = new BMap.Icon(iconfile, new BMap.Size(size, size));");
    list << QString("      var marker = new BMap.Marker(pot, {icon: icon});");
    list << QString("    }");

    list << QString("    map.addOverlay(marker);");
    list << QString("    if (name != '') {");
    list << QString("      marker.setLabel(label);");
    list << QString("    }");
    list << QString("    addClick(marker, name, addr, title, tips, width, action);");

    //彈跳效果-BMAP_ANIMATION_BOUNCE 墜落效果-BMAP_ANIMATION_DROP
    list << QString("    if (animation == 1) {");
    list << QString("      marker.setAnimation(BMAP_ANIMATION_BOUNCE);");
    list << QString("    } else if (animation == 2) {");
    list << QString("      marker.setAnimation(BMAP_ANIMATION_DROP);");
    list << QString("    }");

    list << QString("  }");
}

void MapBaiDu::addClick(QStringList &list)
{
    //自定義方法顯示標(biāo)注詳細(xì)信息,可以改成自己的內(nèi)容,標(biāo)準(zhǔn)html格式

    //默認(rèn)格式如下,在傳入的信息為空的時(shí)候應(yīng)用
    QString title = "' + name + '
";     QStringList tips;     tips << "";     tips << "";     tips << "
地址:' + addr + '
";     list << QString("  function addClick(marker, name, addr, title, tips, width, action){");     list << QString("    if (title == '' && name != '') {");     list << QString("      title = '%1';").arg(title);     list << QString("    }");     list << QString("    if (tips == '' && addr != '') {");     list << QString("      tips = '%1';").arg(tips.join(""));     list << QString("    }");     list << QString("    var infoWindow = new BMap.InfoWindow(tips, {title:title, width:width});");     //單擊以后彈出提示信息或者發(fā)送信號(hào)出去     list << QString("    var markerClick = function() {");     list << QString("      if (action == 1) {");     list << QString("        marker.openInfoWindow(infoWindow);");     list << QString("      } else if (action == 2) {");     list << QString("        receiveData('marker', '名稱: '+ name + '  地址: ' + addr);");     list << QString("      }");     list << QString("    };");     //添加單擊監(jiān)聽器     list << QString("    marker.addEventListener('click', markerClick);");     list << QString("  }"); }

感謝各位的閱讀,以上就是“Qt如何編寫地圖標(biāo)注點(diǎn)交互”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)Qt如何編寫地圖標(biāo)注點(diǎn)交互這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!


標(biāo)題名稱:Qt如何編寫地圖標(biāo)注點(diǎn)交互
當(dāng)前網(wǎng)址:http://weahome.cn/article/jopesi.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部