<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
地圖應用中有時候需要開啟懸浮工具列,使用者可以直接在地圖上繪製矩形、多邊形、圓形、線條等,於是需要提供一個函數介面,能夠獲取到使用者繪製的這些圖形形狀對應的資訊。比如座標點、圓形的中心點和半徑、所有圖形的路徑Path座標點集合,這些資訊都是以經緯度座標的形式。一般封裝的類似功能的js函數一般有三種要求,第一種傳入空值則表示找出所有覆蓋物,第二種傳入型別則找出所有該型別的覆蓋物比如矩形,第三種傳入物件名稱則找出符合該名稱的。從一堆覆蓋物中找到符合指定型別的覆蓋物,這個對於初學者是難點,可以通過map.getOverlays()拿到所有的覆蓋物,最開始我想的策略是如何拿到對應一個覆蓋物的型別,後面發現toString()可以獲取到[object Marker] [object Circle] [object Overlay]字樣,於是針對這個去過濾型別,後面發現js通用關鍵字instanceof也可以實現這個功能,比如if (overlay instanceof BMap.Circle)就可以判斷當前覆蓋物是否是圓形。
地圖模組中很多個地方都用到了將getPath函數獲取到的路徑轉換成座標點集合字串傳出去,比如發給Qt程式處理,所以封裝了一個通用的轉換函數,專門將路徑轉成字串的座標點集合,經度和緯度之間用英文逗號 , 隔開,做個座標之間用英文分號 ; 隔開,多個不同的引數值用英文豎槓 | 隔開,這個統一的規則在所有函數和互動中都通用。比如在早期的webkit核心的瀏覽器控制元件中,就無法將陣列的陣列傳出來,於是就要轉成萬能的字串組合資料。
1 省市區域地圖封裝類功能特點
2 百度地圖封裝類功能特點
3 離線地圖下載類功能特點
4 省市輪廓下載類功能特點
體驗地址:https://pan.baidu.com/s/15ZKAlptW-rDcNq8zlzdYLg 提取碼:uyes 檔名:bin_map.zip
國內站點:https://gitee.com/feiyangqingyun
國際站點:https://github.com/feiyangqingyun
void MapBaiDu::addLocalSearch(QStringList &list) { //全域性搜尋物件 結果可選顯示在地圖中還是非同步通知 #if 1 list << QString(" var searchOptions = {renderOptions:{map: map}};"); #else list << QString(" var searchOptions = {"); list << QString(" onSearchComplete: function(results) {"); list << QString(" if (local.getStatus() != BMAP_STATUS_SUCCESS) {"); list << QString(" return;"); list << QString(" }"); list << QString(" var result = [];"); list << QString(" var count = results.getCurrentNumPois();"); list << QString(" for (var i = 0; i < count; ++i) {"); list << QString(" var poi = results.getPoi(i);"); list << QString(" var point = poi.point.lng + ',' + poi.point.lat;"); list << QString(" result.push(point + ';' + poi.title + ';' + poi.address + ';' + poi.url);"); list << QString(" }"); list << QString(" receiveData('searchresult', result.join('|'));"); list << QString(" }"); list << QString(" };"); #endif list << QString(" var local = new %1.LocalSearch(map, searchOptions);").arg(mapFlag); list << QString(" local.setSearchCompleteCallback(function(results) {"); list << QString(" "); list << QString(" });"); //通用搜尋方法 //text: 搜尋的關鍵字 支援多個可以用 | 隔開 list << QString(" function search(text) {"); list << QString(" var texts = text.split('|');"); list << QString(" local.search(texts);"); list << QString(" }"); //矩形區域搜尋 list << QString(" function searchInBounds(text, start, end) {"); list << QString(" var texts = text.split('|');"); list << QString(" if (!start || !end) {"); list << QString(" local.searchInBounds(texts, map.getBounds());"); list << QString(" return;"); list << QString(" }"); list << QString(" var bs = new %1.Bounds(getPoint(start), getPoint(end));").arg(mapFlag); list << QString(" local.searchInBounds(texts, bs);"); list << QString(" }"); //圓形區域搜尋 list << QString(" function searchNearby(text, center, radius) {"); list << QString(" var texts = text.split('|');"); list << QString(" local.searchNearby(texts, getPoint(center), radius);"); list << QString(" }"); } void MapBaiDu::getOverlayInfo(QStringList &list) { //獲取覆蓋物資訊 type = Marker Polyline 等 list << QString(" function getOverlayInfo(type) {"); 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 (!overlay.isVisible()) {"); list << QString(" continue;"); list << QString(" }"); //拿到覆蓋物型別對應字串 toString() 以後的值是 [object Marker] [object Circle] [object Overlay] list << QString(" var objType = overlay.toString();"); list << QString(" objType = objType.substr(8, objType.length - 9);"); //過濾標註點和懸停工具 list << QString(" if (objType == 'Marker' || objType == 'Overlay') {"); list << QString(" continue;"); list << QString(" }"); //如果指定了覆蓋物型別則過濾掉不符合型別的 list << QString(" if (type.length > 0 && objType != type) {"); list << QString(" continue;"); list << QString(" }"); list << QString(" var path = overlay.getPath();"); list << QString(" var points = getPathPoints(path);"); //不同型別的有不同的資訊 下面演示的是另外一種過濾方法 instanceof list << QString(" var info = objType;"); list << QString(" if (overlay instanceof %1.Circle) {").arg(mapFlag); list << QString(" var center = overlay.getCenter();"); list << QString(" var point = center.lng + ',' + center.lat;"); list << QString(" var radius = overlay.getRadius();"); list << QString(" info = objType + '|' + point + '|' + radius + '|' + points.join(';')"); list << QString(" } else {"); list << QString(" info = objType + '|' + points.join(';')"); list << QString(" }"); list << QString(" receiveData('overlayinfo', info);"); list << QString(" }"); list << QString(" }"); }
到此這篇關於Qt編寫地圖之實現覆蓋物座標和搜尋的文章就介紹到這了,更多相關Qt地圖覆蓋物座標搜尋內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45