您好,登錄后才能下訂單哦!
本篇內容介紹了“QT編寫地圖實現獲取區域邊界的方法是什么”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
區域邊界也是一些坐標點集合,而且不同的行政區劃得到的區域邊界點數組集合個數不同,覺得部分都是一個集合,少部分有一些飛地之類的,需要多個閉合區域,所以會得到多個數組集合,繪制的時候都要分別取出來繪制就行。
獲取邊界點一般和行政區劃搭配起來使用,比如用戶輸入一個省市的名稱,然后自動定位到該省市,然后對該輪廓獲取所有邊界點集合輸出到js文件,最后供離線使用,獲取邊界點還有一個功能就是獲取當前區域內的左下角右上角等經緯度坐標,這個主要是供離線地圖下載使用的,百度地圖很好的提供了bdary.get(cityname, function(rs)的函數來獲取行政區劃的邊界點集合,其中rs.boundaries就是所有的邊界點集合,估計他是服務器上存儲好的每個區域的集合,查詢到了立即返回,可能早期也是人工的一點點圈起來連線好存到到數據庫的,按照此方式其實可以搞一個程序自動將全國的所有省市邊界點集合數據全部扒下來,給離線地圖使用,測試了下貌似只支持到縣城級別,不支持具體到鄉鎮。
定時器排隊下載省市輪廓圖點坐標集合存儲到JS文件。
支持一個行政區域多個不規則區域下載。
自動計算行政區域的下載輪廓數量。
可精確選擇省份、市區、縣城,也可直接輸入行政區域的名稱。
可以設置下載間隔、隨時開始下載和停止下載。
提供編輯邊界功能,可以直接在地圖上編輯好不規則區域的點集合,然后獲取邊界點集合數據,這個可以用來自己繪制區域拿到數據,比如某個鄉鎮甚至某個小區的行政區域數據,很牛逼。
體驗地址:https://pan.baidu.com/s/1ZxG-oyUKe286LPMPxOrO2A 提取碼:o05q 文件名:bin_map.zip
國內站點:https://gitee.com/feiyangqingyun
國際站點:https://github.com/feiyangqingyun
void frmMapBoundary::getBoundary() { //判斷當前索引對應的省會的復選框有沒有勾選,沒有勾選則找到下一個勾選的 int count = names.count(); while (indexMain < count - 1 && !cks.at(indexMain)->isChecked()) { indexMain++; indexSub = 0; } //到了最后一個省會的索引,停止定時器 if (indexMain == count || !cks.at(indexMain)->isChecked()) { on_btnStop_clicked(); return; } //下載到省會的最后一個縣,索引自動跳到下一個省會 QStringList list = names.at(indexMain); if (indexSub == list.count()) { indexMain++; indexSub = 0; getBoundary(); return; } QString name = list.at(indexSub); addBoundary(name); indexSub++; //更新進度條 int value = bars.at(indexMain)->value(); bars.at(indexMain)->setValue(value + 1); ui->txtTip->setText(name); } void frmMapBoundary::addBoundary() { //開啟編輯狀態 QString name = ui->cboxName->currentText(); addBoundary(name, true); } void frmMapBoundary::addBoundary(const QString &name, bool edit) { currentName = name; QString js = QString("addBoundary('%1', true, %2)").arg(name).arg(edit ? "true" : "false"); runJs(js); } void frmMapBoundary::saveBoundary(const QString &fileName, const QVariant &data) { //傳過來的是行政區劃的邊界點坐標集合,存儲到js文件 //可能會有多個數據,比如臺灣的金門島,都是獨立的區域形狀,存入數組 QStringList boundarys; QStringList list = data.toString().split("|"); foreach (QString points, list) { boundarys << QString("{'points': '%1'}").arg(points); } //最終js文件內容數據 QString boundary = QString("var boundarys = [%1]").arg(boundarys.join(", ")); QFile file(fileName); if (file.open(QFile::WriteOnly | QFile::Truncate)) { QTextStream out(&file); #if (QT_VERSION < QT_VERSION_CHECK(6,0,0)) out.setCodec("utf-8"); #endif out << boundary; } }
“QT編寫地圖實現獲取區域邊界的方法是什么”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。