這篇文章主要講解了“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)。
同時(shí)支持在線地圖和離線地圖兩種模式。
同時(shí)支持webkit內(nèi)核、webengine內(nèi)核、miniblink內(nèi)核、IE內(nèi)核。
支持設(shè)置多個(gè)標(biāo)注點(diǎn),信息包括名稱、地址、經(jīng)緯度。
可設(shè)置地圖是否可單擊、拖動(dòng)、鼠標(biāo)滾輪縮放。
可設(shè)置協(xié)議版本、秘鑰、主題樣式、中心坐標(biāo)、中心城市、地理編碼位置等。
可設(shè)置地圖縮放比例和級(jí)別,縮略圖、比例尺、路況信息等控件的可見。
支持地圖交互,比如鼠標(biāo)按下獲取對(duì)應(yīng)位置的經(jīng)緯度。
支持查詢路線,可設(shè)置起點(diǎn)位置、終點(diǎn)位置、路線模式、路線方式、路線方案(最少時(shí)間、最少換乘、最少步行、不乘地鐵、最短距離、避開高速)。
可顯示點(diǎn)線面工具,可直接在地圖上劃線、點(diǎn)、矩形、圓形等。
可設(shè)置行政區(qū)劃,指定某個(gè)城市區(qū)域繪制圖層,在線地圖自動(dòng)輸出行政區(qū)劃邊界點(diǎn)集合到j(luò)s文件給離線地圖使用。
可靜態(tài)或者動(dòng)態(tài)添加多個(gè)覆蓋物。支持點(diǎn)、折線、多邊形、矩形、圓形、弧線、點(diǎn)聚合等。
提供函數(shù)接口處理經(jīng)緯度解析成地址和地址解析成經(jīng)緯度坐標(biāo)。
提供的demo直接可以單獨(dú)選點(diǎn)執(zhí)行對(duì)應(yīng)的處理比如路線查詢。
可以拿到路線查詢到的點(diǎn)坐標(biāo)信息集合,比如用于機(jī)器人坐標(biāo)導(dǎo)航等。
封裝了豐富的函數(shù)比如刪除指定點(diǎn)和所有點(diǎn),刪除指定覆蓋物和所有覆蓋物等。
標(biāo)注點(diǎn)彈框信息可以自定義內(nèi)容,標(biāo)準(zhǔn)html格式。
標(biāo)注點(diǎn)單擊事件可選 0-不處理 1-自己彈框 2-發(fā)送信號(hào)。
標(biāo)注點(diǎn)可設(shè)置動(dòng)畫效果 0-不處理 1-跳動(dòng) 2-墜落
標(biāo)注點(diǎn)可設(shè)置本地圖片文件等。
函數(shù)接口友好和統(tǒng)一,使用簡(jiǎn)單方便,就一個(gè)類。
支持js動(dòng)態(tài)交互添加點(diǎn)、刪除點(diǎn)、清空點(diǎn)、重置點(diǎn),不需要刷新頁(yè)面。
支持任意Qt版本、任意系統(tǒng)、任意編譯器。
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 << "
地址: | ' + addr + ' | "; tips << "
感謝各位的閱讀,以上就是“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)注!