中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Qt如何編寫地圖點聚合

發布時間:2021-12-15 10:07:57 來源:億速云 閱讀:133 作者:iii 欄目:互聯網科技

本篇內容介紹了“Qt如何編寫地圖點聚合”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

一、前言

在地圖上查詢結果通常以標記點的形式展現,但是如果標記點較多,不僅會大大增加客戶端的渲染時間,讓客戶端變得很卡,而且會讓人產生密集恐懼癥。為了解決這一問題,我們需要一種手段能在用戶有限的可視區域范圍內,利用最小的區域展示出最全面的信息,而又不產生重疊覆蓋。這就是點聚合功能的由來,百度地圖內置類點聚合的功能,在項目初期可能只有個位數的設備需要在地圖上顯示,隨著設備數量的增多,會發現標注點不僅密密麻麻而且變得越發卡頓,這樣就需要有個合并的功能,就某個區域的點都合并到一個點圖標展示,當用戶單擊該合并后的點以后,再去展開具體的詳細的標注點,監控行業、電力行業都用得非常頻繁。

最簡單的設置點聚合的方式是將傳入標注點坐標集合,轉換生成標注點對象數組,再生成的時候可以設置點的名稱、經緯度、其他信息等,然后實例化一個MarkerClusterer對象,再將生成的標注點對象數組傳給這個對象即可。具體的點聚合算法我們也無需知道,基本上都是比較智能的,當我們縮小地圖范圍時候可以看到多個集中的標注點消失了,變成了統一的一個點聚合圖標,單擊此圖標會自動展開下屬的所有標注點,一般建議在設置點聚合的時候要規劃好,哪些標注點屬于哪個點聚合,盡量一個區域內的放在一起。

二、功能特點

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

  2. 同時支持webkit內核、webengine內核、miniblink內核、IE內核。

  3. 支持設置多個標注點,信息包括名稱、地址、經緯度。

  4. 可設置地圖是否可單擊、拖動、鼠標滾輪縮放。

  5. 可設置協議版本、秘鑰、主題樣式、中心坐標、中心城市、地理編碼位置等。

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

  7. 支持地圖交互,比如鼠標按下獲取對應位置的經緯度。

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

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

  10. 可設置行政區劃,指定某個城市區域繪制圖層,在線地圖自動輸出行政區劃邊界點集合到js文件給離線地圖使用。

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

  12. 提供函數接口處理經緯度解析成地址和地址解析成經緯度坐標。

  13. 提供的demo直接可以單獨選點執行對應的處理比如路線查詢。

  14. 可以拿到路線查詢到的點坐標信息集合,比如用于機器人坐標導航等。

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

  16. 標注點彈框信息可以自定義內容,標準html格式。

  17. 標注點單擊事件可選 0-不處理 1-自己彈框 2-發送信號。

  18. 標注點可設置動畫效果 0-不處理 1-跳動 2-墜落

  19. 標注點可設置本地圖片文件等。

  20. 函數接口友好和統一,使用簡單方便,就一個類。

  21. 支持js動態交互添加點、刪除點、清空點、重置點,不需要刷新頁面。

  22. 支持任意Qt版本、任意系統、任意編譯器。

三、效果圖

Qt如何編寫地圖點聚合

四、相關代碼

void MapBaiDu::getPoints(QStringList &list)
{
    //通用多個點坐標轉換成 BMap.Point 對象
    //坐標格式 121.414,31.1828|121.414,31.1838|121.416,31.1838
    list << QString("  function getPoints(points) {");
    list << QString("    var pts = []");
    list << QString("    var listPoint = points.split('|');");
    list << QString("    var len = listPoint.length");
    list << QString("    for (var i = 0; i < len; i++) {");
    list << QString("      var list = listPoint[i].split(',');");
    list << QString("      var pot = new BMap.Point(list[0], list[1]);");
    list << QString("      pts.push(pot);");
    list << QString("    }");
    list << QString("    return pts;");
    list << QString("  }");
}

void MapBaiDu::getMarkers(QStringList &list)
{
    //通用多個點坐標轉換成 BMap.Marker 對象
    //坐標格式 121.414,31.1828|121.414,31.1838|121.416,31.1838
    list << QString("  function getMarkers(points) {");
    list << QString("    var markers = []");
    list << QString("    var listPoint = points.split('|');");
    list << QString("    var len = listPoint.length");
    list << QString("    for (var i = 0; i < len; i++) {");
    list << QString("      var list = listPoint[i].split(',');");
    list << QString("      var pot = new BMap.Point(list[0], list[1]);");
    list << QString("      var marker = new BMap.Marker(pot);");
    list << QString("      markers.push(marker);");
    list << QString("    }");
    list << QString("    return markers;");
    list << QString("  }");
}

void MapBaiDu::getBounds(QStringList &list)
{
    //獲取可視區域經緯度 bssw=左下角 bsne=右上角 bsce=中心
    list << QString("  function getBounds() {");
    list << QString("    var bs = map.getBounds();");
    list << QString("    var bssw = bs.getSouthWest();");
    list << QString("    var bsne = bs.getNorthEast();");
    list << QString("    var bsce = bs.getCenter();");
    list << QString("    var rect = bssw.lng + ',' + bssw.lat + ',' + bsne.lng + ',' + bsne.lat + ',' + bsce.lng + ',' + bsce.lat + ',' + map.getZoom();");
    //信號發出去
    list << QString("    receiveData('bounds', rect);");
    list << QString("  }");
}

void MapBaiDu::getBoundary(QStringList &list)
{
    //獲取邊界點集合
    list << QString("  function getBoundary() {");
    list << QString("    for (var i = 0; i < polygons.length; i++) {");
    list << QString("      var polyline = polygons[i];");
    list << QString("      var pts = polyline.getPath();");
    list << QString("      var result = '';");
    list << QString("      for (var j = 0; j < pts.length; j++) {");
    list << QString("        result += pts[j].lng + ',' + pts[j].lat + ';';");
    list << QString("      }");
    list << QString("      receiveData('newboundary', result);");
    list << QString("    }");
    list << QString("  }");
}

void MapBaiDu::getZoom(QStringList &list)
{
    //獲取當前地圖縮放級別
    list << QString("  function getZoom() {");
    list << QString("    var zoom = map.getZoom();");
    list << QString("    receiveData('zoom', zoom);");
    list << QString("  }");
}

void MapBaiDu::addMarkerClusterer(QStringList &list)
{
    //動態添加點聚合
    list << QString("  function addMarkerClusterer(points) {");
    list << QString("    var markers = getMarkers(points);");
    //最簡單的用法,生成一個marker數組,然后調用markerClusterer類即可
    list << QString("    var markerClusterer = new BMapLib.MarkerClusterer(map, {markers:markers});");
    list << QString("  }");
}

“Qt如何編寫地圖點聚合”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

qt
AI

卢湾区| 北安市| 西盟| 兴隆县| 宿松县| 广饶县| 凤台县| 塘沽区| 镇巴县| 长兴县| 加查县| 榆树市| 万宁市| 东光县| 保康县| 绩溪县| 新龙县| 海盐县| 崇阳县| 定远县| 英山县| 鄄城县| 黄龙县| 巴中市| 彰化市| 绥德县| 祁连县| 九寨沟县| 沧州市| 永登县| 杭锦旗| 历史| 庆阳市| 钟祥市| 拉孜县| 黄石市| 塔河县| 天柱县| 江都市| 千阳县| 敦化市|