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

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

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

一、前言

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

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

二、功能特點

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

同時支持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/1ZxG-oyUKe286LPMPxOrO2A 提取碼:o05q 文件名:bin_map.zip

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

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

四、效果圖

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

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

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

        //為了支持多個覆蓋物,每個覆蓋物對應(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) {
            //每個圖形都有點集合
            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) {
            //每個圖形都有點集合
            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;
            }

            //取第二個值作為半徑
            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) {
            //弧形點集合
            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ū)劃邊界點集合
            if (mapLocal) {
                //可能會有多個數(shù)據(jù),比如臺灣的金門島,都是獨立的區(qū)域形狀
                //這個 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ū)域的點有多少個
                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);

                //取出點集合
                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(';'));");

                //范圍可編輯,開啟以后可以拖動邊界然后可以重新輸出邊界點集合
                //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)點集合
                //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) {
            //點集合
            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(","));
            //最簡單的用法,生成一個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è)置跳動的點動畫
            list << QString("  %1.setAnimation(BMAP_ANIMATION_BOUNCE);").arg(name);
        } else if (type == OverlayType_CurveLine) {
            //開啟編輯功能
            list << QString("  %1.enableEditing();").arg(name);
        }
    }
} 

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

相關(guān)文章

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

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

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

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

    迭代器失效就是迭代器底層對應(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,因為要C++兼容C,所以保留struct關(guān)鍵字,struct與class的用法完全相同
    2023-03-03
  • 詳解C++二叉搜索樹的原理及實現(xiàn)

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

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

    VC多線程編程詳解

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

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

    本文主要介紹了C++解決TCP粘包的問題實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(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ì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-09-09
  • C++高并發(fā)內(nèi)存池的整體設(shè)計和實現(xiàn)思路

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

    這篇文章主要介紹了C++高并發(fā)內(nèi)存池的整體設(shè)計和實現(xiàn)思路詳解,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    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語言實現(xiàn)用戶態(tài)線程庫案例

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

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

最新評論

永济市| 信宜市| 徐水县| 靖州| 璧山县| 大石桥市| 临邑县| 南平市| 甘孜县| 鹤壁市| 建水县| 秦安县| 永登县| 松桃| 西乌| 弋阳县| 施秉县| 江达县| 亚东县| 梓潼县| 元谋县| 天等县| 班戈县| 洛宁县| 定南县| 铁岭市| 巍山| 崇州市| 锦屏县| 桂东县| 始兴县| 周至县| 洛浦县| 应城市| 剑川县| 长岛县| 开化县| 博湖县| 罗甸县| 绩溪县| 亳州市|