亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

一、前言

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

離線輪廓圖的加載首先引入該區(qū)域的坐標(biāo)點(diǎn)數(shù)組js文件,然后通過(guò)讀取該文件的數(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í)別,縮略圖、比例尺、路況信息等控件的可見(jiàn)。

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

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

可顯示點(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)畫(huà)效果 0-不處理 1-跳動(dòng) 2-墜落

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

函數(shù)接口友好和統(tǒng)一,使用簡(jiǎn)單方便,就一個(gè)類(lèi)。

支持js動(dòng)態(tài)交互添加點(diǎn)、刪除點(diǎn)、清空點(diǎn)、重置點(diǎn),不需要刷新頁(yè)面。

支持任意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;
    }

    //判斷不同的類(lèi)型,添加多個(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)灣的金門(mén)島,都是獨(dú)立的區(qū)域形狀
                //這個(gè) boundarys 通過(guò)最上面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(';'));");

                //范圍可編輯,開(kāi)啟以后可以拖動(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類(lèi)即可
            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)畫(huà)
            list << QString("  %1.setAnimation(BMAP_ANIMATION_BOUNCE);").arg(name);
        } else if (type == OverlayType_CurveLine) {
            //開(kāi)啟編輯功能
            list << QString("  %1.enableEditing();").arg(name);
        }
    }
} 

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

相關(guān)文章

  • C++ STL 序列式容器與配接器的簡(jiǎn)單使用

    C++ STL 序列式容器與配接器的簡(jiǎn)單使用

    本文主要介紹了C++ STL 序列式容器與配接器的簡(jiǎn)單使用,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-06-06
  • Qt股票組件之自選股列表拖拽、右鍵常用菜單功能的實(shí)現(xiàn)

    Qt股票組件之自選股列表拖拽、右鍵常用菜單功能的實(shí)現(xiàn)

    這篇文章主要介紹了Qt股票組件之自選股列表拖拽、右鍵常用菜單功能的實(shí)現(xiàn)方法,本文通過(guò)實(shí)例文字相結(jié)合的形式給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-07-07
  • 基于C語(yǔ)言實(shí)現(xiàn)學(xué)生管理系統(tǒng)

    基于C語(yǔ)言實(shí)現(xiàn)學(xué)生管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了基于C語(yǔ)言實(shí)現(xiàn)學(xué)生管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • C++中char*轉(zhuǎn)換為L(zhǎng)PCWSTR的解決方案

    C++中char*轉(zhuǎn)換為L(zhǎng)PCWSTR的解決方案

    最近在學(xué)習(xí)C++,遇到了一個(gè)char*轉(zhuǎn)換為L(zhǎng)PCWSTR的問(wèn)題,通過(guò)查找資料終于解決了,所以下面這篇文章主要介紹了C++中char*轉(zhuǎn)LPCWSTR的解決方案,文中通過(guò)詳細(xì)的示例代碼介紹的很詳細(xì),有需要的朋友可以參考借鑒,下面來(lái)一起看看吧。
    2017-01-01
  • QT中QColorDialog開(kāi)發(fā)實(shí)例

    QT中QColorDialog開(kāi)發(fā)實(shí)例

    QColorDialog是Qt框架中用于選擇顏色的對(duì)話框類(lèi),本文主要介紹了QT中QColorDialog開(kāi)發(fā)實(shí)例,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-11-11
  • 純C語(yǔ)言:檢索與周游廣度深度遍歷源碼分享

    純C語(yǔ)言:檢索與周游廣度深度遍歷源碼分享

    這篇文章主要介紹了檢索與周游廣度深度遍歷源碼,有需要的朋友可以參考一下
    2014-01-01
  • C++筆記-設(shè)置cout輸出數(shù)據(jù)的寬度和填充方式

    C++筆記-設(shè)置cout輸出數(shù)據(jù)的寬度和填充方式

    這篇文章主要介紹了C++筆記-設(shè)置cout輸出數(shù)據(jù)的寬度和填充方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • C語(yǔ)言實(shí)現(xiàn)學(xué)生檔案管理系統(tǒng)

    C語(yǔ)言實(shí)現(xiàn)學(xué)生檔案管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)學(xué)生檔案管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • C++實(shí)現(xiàn)bmp格式圖像讀寫(xiě)

    C++實(shí)現(xiàn)bmp格式圖像讀寫(xiě)

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)bmp格式圖像讀寫(xiě),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • 搭建C語(yǔ)言開(kāi)發(fā)環(huán)境(Windows平臺(tái))匯總

    搭建C語(yǔ)言開(kāi)發(fā)環(huán)境(Windows平臺(tái))匯總

    本文給大家匯總了5種在WIN平臺(tái)下搭建C語(yǔ)言開(kāi)發(fā)環(huán)境的方法,包括一、在Windows平臺(tái)配置GNU環(huán)境,二、使用Sublime Test開(kāi)發(fā)C語(yǔ)言程序,三、使用VisualStudio開(kāi)發(fā)C語(yǔ)言程序,四、搭建EclipseCDT集成開(kāi)發(fā)環(huán)境,五、搭建Clion集成開(kāi)發(fā)環(huán)境,有需要的小伙伴可以參考下
    2015-11-11

最新評(píng)論