最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

QT編寫地圖實現(xiàn)設(shè)備點位的示例代碼

 更新時間:2022年02月10日 16:28:54   作者:feiyangqingyun  
在地圖應(yīng)用的相關(guān)項目中,在地圖上標(biāo)識一些設(shè)備點,并對點進(jìn)行交互這個功能用的最多的,于是需要一套機(jī)制可以動態(tài)的添加、刪除、清空、重置。本文將詳細(xì)介紹這些功能如何實現(xiàn),需要的可以參考一下

一、前言

在學(xué)習(xí)JS語法的時候發(fā)現(xiàn)其實程序都大同小異,正所謂一通百通,熟悉各大概的語法以后基本都可以上手,和C++最大的不同就是他沒有數(shù)據(jù)類型的概念,作為解釋性的語言,是在執(zhí)行的時候自動去轉(zhuǎn)換數(shù)據(jù)類型,工作都交給解釋器做掉了,這樣就大大方便了程序員,到處var即可,哪怕是數(shù)組啊對象啊,萬物皆var,只有當(dāng)真正賦值的時候,才知道具體的數(shù)據(jù)類型。

在地圖應(yīng)用的相關(guān)項目中,在地圖上標(biāo)識一些設(shè)備點,并對點進(jìn)行交互這個功能用的最多的,于是需要一套機(jī)制可以動態(tài)的添加、刪除、清空、重置,重置的意思是將地圖中的所有點的經(jīng)緯度重新設(shè)置,其實就是先清空然后挨個重新添加所有點的信息,JS的異步交互功能非常強(qiáng)大,直接執(zhí)行對應(yīng)的JS函數(shù)就可以,沒有必要刷新網(wǎng)頁,最開始很多年前做的時候還不會JS,那時候想的最糟糕的辦法就是寫死在代碼中,這樣每次變動需要重新加載網(wǎng)頁,后面發(fā)現(xiàn)那真是糟糕的辦法,既然有異步刷新的辦法為何不用呢,自從學(xué)會了JS異步刷新方法以后,索性將各種方法都改成了JS函數(shù),傳入對應(yīng)的參數(shù)即可,參數(shù)盡可能的考慮到已知的各種各樣的情況,方便用戶自己添加。

二、功能特點

同時支持在線地圖和離線地圖兩種模式。

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

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

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

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

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

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

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

可顯示點線面工具,可直接在地圖上劃線、點、矩形、圓形等。

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

可靜態(tài)或者動態(tài)添加多個覆蓋物。支持點、折線、多邊形、矩形、圓形、弧線、點聚合等。

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

提供的demo直接可以單獨選點執(zhí)行對應(yīng)的處理比如路線查詢。

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

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

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

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

標(biāo)注點可設(shè)置動畫效果 0-不處理 1-跳動 2-墜落

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

函數(shù)接口友好和統(tǒng)一,使用簡單方便,就一個類。

支持js動態(tài)交互添加點、刪除點、清空點、重置點,不需要刷新頁面。

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

三、體驗地址

體驗地址:https://pan.baidu.com/s/15ZKAlptW-rDcNq8zlzdYLg  提取碼:uyes 文件名:bin_map.zip

國內(nèi)站點:https://gitee.com/feiyangqingyun

國際站點:https://github.com/feiyangqingyun

四、效果圖

五、相關(guān)代碼

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

    //設(shè)置圖標(biāo),不設(shè)置則采用默認(rèn)圖標(biāo)
    list << QString("    if (!iconfile) {");
    list << QString("      var marker = new %1.Marker(pot);").arg(mapFlag);
    list << QString("    } else if (iconfile == 'http://lbsyun.baidu.com/jsdemo/img/fox.gif') {");
    list << QString("      var icon = new %1.Icon(iconfile, new %1.Size(300, 157));").arg(mapFlag);
    list << QString("      var marker = new %1.Marker(pot, {icon: icon, rotation: rotation});").arg(mapFlag);
    list << QString("    } else if (iconfile == 'http://api.map.baidu.com/img/markers.png') {");
    list << QString("      var icon = new %1.Icon(iconfile, new %1.Size(23, 25), {offset: new %1.Size(10, 25), imageOffset: new %1.Size(0, 0 - iconindex * 25)});").arg(mapFlag);
    list << QString("      var marker = new %1.Marker(pot, {icon: icon, rotation: rotation});").arg(mapFlag);
    list << QString("    } else {");
    list << QString("      var size = 50;");
    list << QString("      if (iconindex) {");
    list << QString("        size = iconindex;");
    list << QString("      }");
    list << QString("      label = new %1.Label(name, {\"offset\":new %1.Size(size, -10)});").arg(mapFlag);
    list << QString("      var icon = new %1.Icon(iconfile, new %1.Size(size, size));").arg(mapFlag);
    list << QString("      var marker = new %1.Marker(pot, {icon: icon, rotation: rotation});").arg(mapFlag);
    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::moveMarker(QStringList &list)
{
    //動態(tài)移動點
    list << QString("  function moveMarker(name, point, rotation) {");
    list << QString("    if (name.length == 0) {");
    list << QString("      return;");
    list << QString("    }");
    list << QString("    var allOverlay = map.getOverlays();");
    list << QString("    var count = allOverlay.length;");
    list << QString("    for (var i = 0; i < count; ++i) {");
    list << QString("      var overlay = allOverlay[i];");
    //過濾只需要標(biāo)注點 Marker 的圖層覆蓋物
    list << QString("      if (overlay.toString() != '[object Marker]') {");
    list << QString("        continue;");
    list << QString("      }");
    //過濾沒有標(biāo)簽的標(biāo)注點
    list << QString("      var label = overlay.getLabel();");
    list << QString("      if (label == null) {");
    list << QString("        continue;");
    list << QString("      }");
    list << QString("      if (label.content == name) {");
    list << QString("        var marker = allOverlay[i];");
    list << QString("        marker.setPosition(getPoint(point));");
    list << QString("        marker.setRotation(rotation);");
    list << QString("        break;");
    list << QString("      }");
    list << QString("    }");
    list << QString("  }");
}

void MapBaiDu::deleteMarker(QStringList &list)
{
    //動態(tài)刪除點
    list << QString("  function deleteMarker(name) {");
    list << QString("    var allOverlay = map.getOverlays();");
    list << QString("    var count = allOverlay.length;");
    list << QString("    for (var i = 0; i < count; ++i) {");
    list << QString("      var overlay = allOverlay[i];");
    //過濾只需要標(biāo)注點 Marker 的圖層覆蓋物
    list << QString("      if (overlay.toString() != '[object Marker]') {");
    list << QString("        continue;");
    list << QString("      }");
    //名字為空則表示刪除所有
    list << QString("      if (name.length == 0) {");
    list << QString("        map.removeOverlay(overlay);");
    list << QString("      } else {");
    //過濾沒有標(biāo)簽的標(biāo)注點
    list << QString("        var label = overlay.getLabel();");
    list << QString("        if (label == null) {");
    list << QString("          continue;");
    list << QString("        }");
    list << QString("        if (label.content == name) {");
    list << QString("          map.removeOverlay(allOverlay[i]);");
    list << QString("          break;");
    list << QString("        }");
    list << QString("      }");
    list << QString("    }");
    list << QString("  }");
}

void MapBaiDu::deleteOverlay(QStringList &list)
{
    //動態(tài)刪除覆蓋物
    //type= Marker Polyline 等
    list << QString("  function deleteOverlay(type) {");
    //如果為空還要先清空點聚合的數(shù)據(jù)
    list << QString("    if (type.length == 0) {");
    list << QString("      markerClusterer.clearMarkers();");
    list << QString("    }");

    list << QString("    var allOverlay = map.getOverlays();");
    list << QString("    var count = allOverlay.length;");
    list << QString("    for (var i = 0; i < count; ++i) {");
    list << QString("      var overlay = allOverlay[i];");
    //類型為空則表示刪除所有
    list << QString("      if (type.length == 0) {");
    list << QString("        map.removeOverlay(overlay);");
    list << QString("      } else {");
    //刪除指定類型的覆蓋物
    list << QString("        var strType = '[object ' + type +']'");
    list << QString("        if (overlay.toString() == strType) {");
    list << QString("          map.removeOverlay(overlay);");
    list << QString("        }");
    list << QString("      }");
    list << QString("    }");
    list << QString("  }");
}

到此這篇關(guān)于QT編寫地圖實現(xiàn)設(shè)備點位的示例代碼的文章就介紹到這了,更多相關(guān)QT設(shè)備點位內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++實現(xiàn)字符串轉(zhuǎn)整數(shù)(atoi)的代碼詳解

    C++實現(xiàn)字符串轉(zhuǎn)整數(shù)(atoi)的代碼詳解

    在編程中,經(jīng)常會遇到將字符串轉(zhuǎn)換為整數(shù)的需求,就像標(biāo)準(zhǔn)庫中的 atoi 函數(shù)一樣,本文給大家介紹了C++中字符串轉(zhuǎn)整數(shù)(atoi)的實現(xiàn)與解析,并有詳細(xì)的代碼示例供大家參考,需要的朋友可以參考下
    2025-04-04
  • C++ move semantic移動語義介紹

    C++ move semantic移動語義介紹

    首先,移動語義和完美轉(zhuǎn)發(fā)這兩個概念是在C++的模板編程的基礎(chǔ)上,新增的特性,主要是配合模板來使用。本篇會從C++的值類型,到移動拷貝與移動賦值來理解移動語義與完美轉(zhuǎn)發(fā)
    2022-08-08
  • C++與QML進(jìn)行數(shù)據(jù)交互的常見方法總結(jié)

    C++與QML進(jìn)行數(shù)據(jù)交互的常見方法總結(jié)

    這篇文章主要為大家詳細(xì)介紹了C++與QML進(jìn)行數(shù)據(jù)交互的常見方法,文中 的示例代碼講解詳細(xì),具有一定的參考價值,有需要的小伙伴可以跟隨小編一起了解一下
    2023-10-10
  • C++ 數(shù)據(jù)結(jié)構(gòu)之水洼的數(shù)量算法

    C++ 數(shù)據(jù)結(jié)構(gòu)之水洼的數(shù)量算法

    這篇文章主要介紹了C++ 數(shù)據(jù)結(jié)構(gòu)之水洼的數(shù)量算法的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • VC6.0常見編譯錯誤提示附解決方法

    VC6.0常見編譯錯誤提示附解決方法

    這篇文章主要介紹了VC++6.0編譯過程中常遇到的一些錯誤提示并給出了錯誤原因與分析,需要的朋友尅參考下
    2013-07-07
  • QT設(shè)計秒表功能(跑步計時器)

    QT設(shè)計秒表功能(跑步計時器)

    這篇文章主要為大家詳細(xì)介紹了QT設(shè)計秒表功能,跑步計時器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • C++11獲取線程返回值的實現(xiàn)代碼

    C++11獲取線程返回值的實現(xiàn)代碼

    這篇文章主要介紹了C++11獲取線程返回值的實現(xiàn)代碼,需要的朋友可以參考下
    2019-04-04
  • C++vector的insert函數(shù)用法小結(jié)

    C++vector的insert函數(shù)用法小結(jié)

    std::vector::insert是C++中用于在指定位置插入元素的函數(shù),支持插入單個元素、多個相同元素、一個范圍的元素或初始化列表中的元素,插入操作可能會使插入點之后的迭代器失效,并且時間復(fù)雜度為O(n),本文介紹C++vector的insert函數(shù)用法小結(jié),感興趣的朋友一起看看吧
    2025-03-03
  • C語言實現(xiàn)拼圖小游戲

    C語言實現(xiàn)拼圖小游戲

    這篇文章主要為大家詳細(xì)介紹了C語言實現(xiàn)拼圖小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • PyQt5利用Qt Designer實現(xiàn)簡單界面交互

    PyQt5利用Qt Designer實現(xiàn)簡單界面交互

    本文主要介紹了PyQt5利用Qt Designer實現(xiàn)簡單界面交互,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-03-03

最新評論

理塘县| 阿图什市| 乃东县| 陆河县| 五指山市| 都匀市| 伊川县| 习水县| 黔西县| 榆中县| 武胜县| 项城市| 抚顺县| 香河县| 台中市| 永安市| 穆棱市| 昌黎县| 通渭县| 汝南县| 克东县| 马公市| 阳谷县| 丰台区| 鲁山县| 商洛市| 阿尔山市| 博兴县| 潞城市| 历史| 商南县| 耒阳市| 安宁市| 布尔津县| 东辽县| 南通市| 麟游县| 黑山县| 菏泽市| 安丘市| 上犹县|