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

QT編寫地圖實(shí)現(xiàn)離線輪廓圖的示例代碼

 更新時(shí)間:2021年12月29日 09:28:45   作者:feiyangqingyun  
這篇文章主要介紹了在利用QT編寫地圖時(shí)常常需要用到的離線輪廓圖,離線輪廓圖使用起來比線輪廓圖麻煩一點(diǎn),需要自己繪制。感興趣的小伙伴可以學(xué)習(xí)一下

一、前言

離線輪廓圖使用起來,就沒有在線輪廓圖方便了,在線的可以直接傳入名稱拿到,離線的只能自己繪制了,一般需要用區(qū)域輪廓圖下載器將你需要的區(qū)域下載好對(duì)應(yīng)的js文件,其實(shí)就是一堆坐標(biāo)點(diǎn)集合數(shù)組,這些數(shù)據(jù)可以在有網(wǎng)絡(luò)的地方的時(shí)候下載好,也可以在地圖上通過繪制不規(guī)則的多邊形區(qū)域得到,只要你熟知該區(qū)域的輪廓。

離線輪廓圖的加載首先引入該區(qū)域的坐標(biāo)點(diǎn)數(shù)組js文件,然后通過讀取該文件的數(shù)據(jù)傳入自定義的 addBoundary 函數(shù)進(jìn)行繪制,還可以設(shè)置顏色、粗細(xì)、透明度等。

二、功能特點(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),不需要刷新頁面。

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

三、體驗(yàn)地址

體驗(yàn)地址:https://pan.baidu.com/s/1ZxG-oyUKe286LPMPxOrO2A 提取碼:o05q 文件名:bin_map.zip

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

國(guó)際站點(diǎn):https://github.com/feiyangqingyun

四、效果圖

五、相關(guān)代碼?

void MapBaiDu::addOverlay(QStringList &list)
{
    if (overlayTypes.count() == 0 || overlayTypes.count() != overlayPoints.count()) {
        return;
    }

    //判斷不同的類型,添加多個(gè)覆蓋物
    int count = overlayTypes.count();
    for (int i = 0; i < count; ++i) {
        OverlayType type = overlayTypes.at(i);
        QStringList points = overlayPoints.at(i);
        QString property = getOverlayProperty();

        //為了支持多個(gè)覆蓋物,每個(gè)覆蓋物對(duì)應(yīng)的變量名都不一樣
        QString name;
        if (type == OverlayType_Marker) {
            name = QString("marker%1").arg(i + 1);
            list << QString("  var %2 = new %1.Marker(new %1.Point(%3));").arg(mapFlag).arg(name).arg(points.at(0));
        } else if (type == OverlayType_Polyline) {
            //每個(gè)圖形都有點(diǎn)集合
            QStringList listPoints;
            foreach (QString point, points) {
                listPoints << QString("new %1.Point(%2)").arg(mapFlag).arg(point);
            }

            name = QString("polyline%1").arg(i + 1);
            list << QString("  var %2 = new %1.Polyline([%3], %4);").arg(mapFlag).arg(name).arg(listPoints.join(",")).arg(property);
        } else if (type == OverlayType_Polygon) {
            //每個(gè)圖形都有點(diǎn)集合
            QStringList listPoints;
            foreach (QString point, points) {
                listPoints << QString("new %1.Point(%2)").arg(mapFlag).arg(point);
            }

            name = QString("polygon%1").arg(i + 1);
            list << QString("  var %2 = new %1.Polygon([%3], %4);").arg(mapFlag).arg(name).arg(listPoints.join(",")).arg(property);
        } else if (type == OverlayType_Rectangle) {
            if (points.count() < 2) {
                continue;
            }

            name = QString("rectangle%1").arg(i + 1);
            QString ptStart = QString("pStart%1").arg(i + 1);
            QString ptEnd = QString("pEnd%1").arg(i + 1);

            list << QString("  var %2 = new %1.Point(%3);").arg(mapFlag).arg(ptStart).arg(points.at(0));
            list << QString("  var %2 = new %1.Point(%3);").arg(mapFlag).arg(ptEnd).arg(points.at(1));
            list << QString("  var %2 = new %1.Polygon([").arg(mapFlag).arg(name);
            list << QString("    new %1.Point(%2.lng, %3.lat),").arg(mapFlag).arg(ptStart).arg(ptStart);
            list << QString("    new %1.Point(%2.lng, %3.lat),").arg(mapFlag).arg(ptEnd).arg(ptStart);
            list << QString("    new %1.Point(%2.lng, %3.lat),").arg(mapFlag).arg(ptEnd).arg(ptEnd);
            list << QString("    new %1.Point(%2.lng, %3.lat)").arg(mapFlag).arg(ptStart).arg(ptEnd);
            list << QString("  ], %1);").arg(property);
        } else if (type == OverlayType_Circle) {
            if (points.count() < 2) {
                continue;
            }

            //取第二個(gè)值作為半徑
            int circleRadius = points.at(1).toInt();
            name = QString("circle%1").arg(i + 1);
            list << QString("  var point%2 = new %1.Point(%3);").arg(mapFlag).arg(i + 1).arg(points.at(0));
            list << QString("  var %2 = new %1.Circle(point%3, %4, %5);").arg(mapFlag).arg(name).arg(i + 1).arg(circleRadius).arg(property);
        } else if (type == OverlayType_CurveLine) {
            //弧形點(diǎn)集合
            QStringList listPoints;
            foreach (QString point, points) {
                listPoints << QString("new %1.Point(%2)").arg(mapFlag).arg(point);
            }

            name = QString("curveline%1").arg(i + 1);
            list << QString("  var points%1 = [%2];").arg(i + 1).arg(listPoints.join(","));
            list << QString("  var %2 = new %1Lib.CurveLine(points%3, %4);").arg(mapFlag).arg(name).arg(i + 1).arg(property);
        } else if (type == OverlayType_Boundary) {
            //離線地圖從本地加載行政區(qū)劃邊界點(diǎn)集合
            if (mapLocal) {
                //可能會(huì)有多個(gè)數(shù)據(jù),比如臺(tái)灣的金門島,都是獨(dú)立的區(qū)域形狀
                //這個(gè) boundarys 通過最上面js文件引入產(chǎn)生的變量
                list << QString("  var pointArray = [];");
                list << QString("  var count = boundarys.length;");
                list << QString("  for (var i = 0; i < count; ++i) {");
                list << QString("    var ply = new %1.Polygon(boundarys[i].points, %2);").arg(mapFlag).arg(property);
                list << QString("    map.addOverlay(ply);");
                list << QString("    pointArray = pointArray.concat(ply.getPath());");
                list << QString("  }");
                //調(diào)整視野自適應(yīng)行政區(qū)劃區(qū)域
                list << QString("  map.setViewport(pointArray);");
            } else {
                list << QString("  var bdary = new %1.Boundary();").arg(mapFlag);
                //獲取行政區(qū)域
                list << QString("  bdary.get(\"%1\", function(rs) {").arg(points.first());
                //清除地圖覆蓋物
                list << QString("    map.clearOverlays();");
                //行政區(qū)域的點(diǎn)有多少個(gè)
                list << QString("    var datas = rs.boundaries;");
                list << QString("    var count = datas.length;");
                list << QString("    if (count <= 0) {");
                list << QString("      return;");
                list << QString("    }");

                list << QString("    var pointsAll = [];");
                list << QString("    var pointArray = [];");
                list << QString("    for (var i = 0; i < count; ++i) {");
                //建立多邊形覆蓋物
                list << QString("      var ply = new %1.Polygon(datas[i], %2);").arg(mapFlag).arg(property);

                //取出點(diǎn)集合
                list << QString("      var pts = ply.getPath();");
                list << QString("      var points = [];");
                list << QString("      for (var j = 0; j < pts.length; ++j) {");
                list << QString("        var point = pts[j].lng + ',' + pts[j].lat;");
                list << QString("        points.push(point);");
                list << QString("      }");
                list << QString("      pointsAll.push(points.join(';'));");

                //范圍可編輯,開啟以后可以拖動(dòng)邊界然后可以重新輸出邊界點(diǎn)集合
                //list << QString("      ply.enableEditing();");

                //添加覆蓋物
                list << QString("      map.addOverlay(ply);");
                list << QString("      pointArray = pointArray.concat(ply.getPath());");
                list << QString("    }");
                //調(diào)整視野自適應(yīng)行政區(qū)劃區(qū)域
                list << QString("    map.setViewport(pointArray);");

                //彈出+調(diào)試輸出+回調(diào)輸出 行政區(qū)劃的邊界坐標(biāo)點(diǎn)集合
                //list << QString("    alert(count);");
                //list << QString("    alert(datas);");
                //list << QString("    console.log(datas);");
                list << QString("    receiveData('boundary', pointsAll.join('|'));");
                list << QString("  });");
            }
        } else if (type == OverlayType_MarkerClusterer) {
            //點(diǎn)集合
            QStringList listPoints;
            foreach (QString point, points) {
                listPoints << QString("new %1.Marker(new %1.Point(%2))").arg(mapFlag).arg(point);
            }

            list << QString("  var markers = [%1];").arg(listPoints.join(","));
            //最簡(jiǎn)單的用法,生成一個(gè)marker數(shù)組,然后調(diào)用markerClusterer類即可
            list << QString("  var markerClusterer = new %1Lib.MarkerClusterer(map, {markers:markers});").arg(mapFlag);
        }

        //添加覆蓋物,行政區(qū)劃的覆蓋物已經(jīng)在上面代碼中添加
        if (!name.isEmpty()) {
            list << QString("  map.addOverlay(%1);").arg(name);
        }

        //設(shè)置其他效果,要放在addOverlay方法后面才有作用
        if (type == OverlayType_Marker) {
            //設(shè)置跳動(dòng)的點(diǎn)動(dòng)畫
            list << QString("  %1.setAnimation(BMAP_ANIMATION_BOUNCE);").arg(name);
        } else if (type == OverlayType_CurveLine) {
            //開啟編輯功能
            list << QString("  %1.enableEditing();").arg(name);
        }
    }
} 

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

相關(guān)文章

  • C++ 類的構(gòu)造函數(shù)詳解及實(shí)例

    C++ 類的構(gòu)造函數(shù)詳解及實(shí)例

    這篇文章主要介紹了C++ 類的構(gòu)造函數(shù)詳解及實(shí)例的相關(guān)資料,學(xué)習(xí)C++ 的朋友對(duì)構(gòu)造函數(shù)肯定不陌生,非常重要的基礎(chǔ)知識(shí),這里就詳細(xì)介紹下,需要的朋友可以參考下
    2016-12-12
  • C++中vector迭代器失效與深淺拷貝問題詳析

    C++中vector迭代器失效與深淺拷貝問題詳析

    迭代器失效就是迭代器底層對(duì)應(yīng)指針?biāo)赶虻目臻g倍銷毀了,導(dǎo)致使用了一塊已經(jīng)被釋放了的空間,下面這篇文章主要給大家介紹了C++中vector迭代器失效與深淺拷貝問題的相關(guān)資料,需要的朋友可以參考下
    2023-01-01
  • C++ Struct結(jié)構(gòu)體用法淺析

    C++ Struct結(jié)構(gòu)體用法淺析

    前邊我們所定義的類,均是使用struct關(guān)鍵字來定義,但是C++中真正用于定義類的關(guān)鍵字為class,因?yàn)橐狢++兼容C,所以保留struct關(guān)鍵字,struct與class的用法完全相同
    2023-03-03
  • 詳解C++二叉搜索樹的原理及實(shí)現(xiàn)

    詳解C++二叉搜索樹的原理及實(shí)現(xiàn)

    二叉搜索樹又稱二叉排序樹,二叉搜索樹是一種二叉樹,其中每個(gè)節(jié)點(diǎn)的值大于其左子樹中的任何節(jié)點(diǎn),并且小于其右子樹中的任何節(jié)點(diǎn),本文小編就給大家講講C++二叉搜索樹的操作及實(shí)現(xiàn),感興趣的同學(xué)跟著小編一起來看看吧
    2023-08-08
  • VC多線程編程詳解

    VC多線程編程詳解

    這篇文章主要介紹了VC多線程編程,實(shí)例形式詳細(xì)分析了多線程編程的原理與實(shí)現(xiàn)方法,具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2014-10-10
  • C++解決TCP粘包的問題實(shí)現(xiàn)

    C++解決TCP粘包的問題實(shí)現(xiàn)

    本文主要介紹了C++解決TCP粘包的問題實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-08-08
  • C++使用string的大數(shù)加法運(yùn)算(1)

    C++使用string的大數(shù)加法運(yùn)算(1)

    這篇文章主要為大家詳細(xì)介紹了C++使用string的大數(shù)加法運(yùn)算,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-09-09
  • C++高并發(fā)內(nèi)存池的整體設(shè)計(jì)和實(shí)現(xiàn)思路

    C++高并發(fā)內(nèi)存池的整體設(shè)計(jì)和實(shí)現(xiàn)思路

    這篇文章主要介紹了C++高并發(fā)內(nèi)存池的整體設(shè)計(jì)和實(shí)現(xiàn)思路詳解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-07-07
  • C++中new與delete、malloc與free應(yīng)用分析

    C++中new與delete、malloc與free應(yīng)用分析

    這篇文章主要介紹了C++中new與delete、malloc與free應(yīng)用分析,很重要的概念,需要的朋友可以參考下
    2014-08-08
  • C語言實(shí)現(xiàn)用戶態(tài)線程庫案例

    C語言實(shí)現(xiàn)用戶態(tài)線程庫案例

    下面小編就為大家?guī)硪黄狢語言實(shí)現(xiàn)用戶態(tài)線程庫案例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-05-05

最新評(píng)論

红桥区| 新邵县| 信宜市| 江安县| 民勤县| 祥云县| 云南省| 屏东市| 丹棱县| 明水县| 大荔县| 恭城| 陆丰市| 平潭县| 上蔡县| 汾阳市| 郓城县| 长阳| 二连浩特市| 南城县| 遂宁市| 辉县市| 沭阳县| 福清市| 东乌珠穆沁旗| 杂多县| 格尔木市| 健康| 吉水县| 霞浦县| 泰安市| 德清县| 莒南县| 水富县| 潮州市| 南昌县| 中超| 鹤山市| 东乡县| 万州区| 平阴县|