Qt編寫地圖實現(xiàn)動態(tài)點位標注的示例代碼
一、前言
動態(tài)點位標注是定制的一個功能模塊,提供直接地圖上選點設(shè)置標記點,點位信息用結(jié)構(gòu)體存儲,其中包括了經(jīng)度、緯度、速度、時間等信息,單擊對應(yīng)的標注點可以顯示詳細的彈框信息,彈框信息采用自定義的html格式顯示,而不是地圖自帶的格式,這樣顯示更方便,比如可控不同行不同顏色或者加粗。標注點可選是否標記,標記的話就是一個設(shè)備圖標顯示,不標記的就普通的顯示,一般在明顯的拐彎的地方建議設(shè)置標記。
近期在動態(tài)點位標注功能中還增加了新增點以后立即移動到地圖中心,相當于把新增的點作為地圖中心點,這樣可以保證每次都能看到新增的點位置,不然還要自己去移動拉動地圖才能看到,其實后面的路書功能也可以增加類似的處理,軌跡點在移動的時候自動切換最近的點為中心點。
二、功能特點
定時器排隊下載省市輪廓圖點坐標集合存儲到JS文件。
支持一個行政區(qū)域多個不規(guī)則區(qū)域下載。
自動計算行政區(qū)域的下載輪廓數(shù)量。
可精確選擇省份、市區(qū)、縣城,也可直接輸入行政區(qū)域的名稱。
可以設(shè)置下載間隔、隨時開始下載和停止下載。
提供編輯邊界功能,可以直接在地圖上編輯好不規(guī)則區(qū)域的點集合,然后獲取邊界點集合數(shù)據(jù),這個可以用來自己繪制區(qū)域拿到數(shù)據(jù),比如某個鄉(xiāng)鎮(zhèn)甚至某個小區(qū)的行政區(qū)域數(shù)據(jù),很牛逼。
三、體驗地址
體驗地址:https://pan.baidu.com/s/15ZKAlptW-rDcNq8zlzdYLg 提取碼:uyes 文件名:bin_map.zip
國內(nèi)站點:https://gitee.com/feiyangqingyun
國際站點:https://github.com/feiyangqingyun
四、效果圖

五、相關(guān)代碼
void frmMapMarker::append(const MarkerInfo &markerInfo)
{
//先刪除上一次添加的線條,不然會重疊不好看
runJs("deleteOverlay('Polyline')");
//取出詳細數(shù)據(jù),添加到坐標集合中進行繪制線條
QString point = markerInfo.lng + "," + markerInfo.lat;
points << point;
QString js = QString("addPolyline('%1')").arg(points.join("|"));
runJs(js);
//如果isMark則還需要添加對應(yīng)的點
if (markerInfo.isMark) {
//標注點名稱 為空則不顯示
QString name = "";
//標注點地址 為空則不顯示
QString addr = "";
//標注點彈框信息html格式標題 為空則采用默認的格式
QString title = "";
//title = "<div style=\"color:#CE5521;font-size:25px;\">標題: 測試設(shè)備</div>";
//標注點彈框信息html格式內(nèi)容 為空則采用默認的格式
QString tips = "";
QStringList list;
list << QString("<div style=\"color:#CE5521;font-size:15px;\">經(jīng)度: %1</div>").arg(markerInfo.lng);
list << QString("<div style=\"color:#CE5521;font-size:15px;\">緯度: %1</div>").arg(markerInfo.lat);
list << QString("<div style=\"color:#CE5521;font-size:15px;\">速度: %1 kv/h</div>").arg(markerInfo.speed);
list << QString("<div style=\"color:#CE5521;font-size:15px;\">時間: [%1]</div>").arg(markerInfo.time);
tips = list.join("");
//標注點彈框信息最小寬度
int width = 150;
//單擊以后觸發(fā)什么動作 0-不處理 1-自己彈框 2-發(fā)送信號
int action = 1;
//動畫效果 0-不處理 1-跳動 2-墜落
int animation = 0;
//動態(tài)圖 http://lbsyun.baidu.com/jsdemo/img/fox.gif
//靜態(tài)圖 http://api.map.baidu.com/img/markers.png 需要指定iconindex
//本地圖 m0.png ./m0.png m1.png 圖標必須放在config文件夾下 大小默認53*52
//為空則采用默認圖標
QString iconfile = "http://api.map.baidu.com/img/markers.png";
QString js = QString("addMarker('%1', '%2', '%3', '%4', %5, '%6', %7, %8, '%9')")
.arg(name).arg(addr).arg(title).arg(tips).arg(width)
.arg(point).arg(action).arg(animation).arg(iconfile);
runJs(js);
//移動中心點到當前點,不需要可以注釋掉
js = QString("setCenter('%1')").arg(point);
runJs(js);
}
int count = ui->tableWidget->rowCount() + 1;
ui->tableWidget->setRowCount(count);
QTableWidgetItem *itemLng = new QTableWidgetItem;
QTableWidgetItem *itemLat = new QTableWidgetItem;
QTableWidgetItem *itemMark = new QTableWidgetItem;
QTableWidgetItem *itemSpeed = new QTableWidgetItem;
QTableWidgetItem *itemTime = new QTableWidgetItem;
itemLng->setText(markerInfo.lng);
itemLat->setText(markerInfo.lat);
itemMark->setText(markerInfo.isMark ? "是" : "否");
itemSpeed->setText(QString::number(markerInfo.speed));
itemTime->setText(markerInfo.time);
ui->tableWidget->setItem(count - 1, 0, itemLng);
ui->tableWidget->setItem(count - 1, 1, itemLat);
ui->tableWidget->setItem(count - 1, 2, itemMark);
ui->tableWidget->setItem(count - 1, 3, itemSpeed);
ui->tableWidget->setItem(count - 1, 4, itemTime);
}
void frmMapMarker::clear()
{
points.clear();
ui->tableWidget->setRowCount(0);
runJs("deleteOverlay('')");
}
void frmMapMarker::on_btnAdd_clicked()
{
MarkerInfo markerInfo;
markerInfo.lng = ui->txtLng->text().trimmed();
markerInfo.lat = ui->txtLat->text().trimmed();
markerInfo.isMark = (ui->cboxMark->currentIndex() == 0);
markerInfo.speed = ui->txtSpeed->text().trimmed().toInt();
markerInfo.time = ui->txtTime->text().trimmed();
append(markerInfo);
}
以上就是Qt編寫地圖實現(xiàn)動態(tài)點位標注的示例代碼的詳細內(nèi)容,更多關(guān)于Qt動態(tài)點位標注的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
C語言變長數(shù)組 struct中char data[0]的用法詳解
下面小編就為大家?guī)硪黄狢語言變長數(shù)組 struct中char data[0]的用法詳解。小編覺得挺不錯的現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-01-01
C++/JAVA/C#子類調(diào)用父類函數(shù)情況總結(jié)
今天小編就為大家分享一篇關(guān)于C++/JAVA/C#子類調(diào)用父類函數(shù)情況總結(jié),小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-03-03

