技術共有

Qt/C書き込み地図アプリ/オフライン地図ダウンロード/経路計画/軌跡再生/大量ポイント/座標変換

2024-07-08

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

1. はじめに

このマップ コンポーネントは長年にわたって書かれてきましたが、当初はプロジェクトのニーズを満たすためだけに、あまりスケーラビリティを考慮せずに書かれていました。過去数年間で多くの開発が行われた後、現場での実用的なアプリケーションとユーザーから提出された多数の改善提案により、対応する地図関連のコードを完全に書き直すというアイデアが徐々に生まれました。 、Web ページの中間に大量のコードを記述する代わりに、基本クラスのサブクラスや、js 関数を介して対話するさまざまな関数インターフェイスの設計などです。

以前のマップの例は、思いついたことをそのまま書いたもので、どんどん追加していったため、インターフェイス上の機能のデモも比較的分かりづらかったです。すべてのサンプルがリファクタリングされているため、今回はすべてのサンプルを再構築する必要があり、サンプルのデモが多すぎる場合は、それぞれの小さなサンプルのコードを保存するために別のディレクトリが作成され、関数を学習するのに非常に便利です。以前は、サンプルコードがクラス内に山積みになっていると、コードファイル内にコードが多すぎることが最も面倒でした。可能であればグループに分けることができます。

2. 機能的特徴

  1. デフォルトで Baidu Map を使用して、複数のマップ コアをサポートします。
  2. オンライン マップとオフライン マップ モードの両方を同時にサポートします。オフライン マップは、インターネットに接続されていないシナリオでの使用に便利です。
  3. マップ ナビゲーション、マップ タイプ、サムネイル、縮尺、パノラマ ナビゲーション、リアルタイム交通状況、描画ツール、結果パネルなど、さまざまなマップ コントロールのアクティブ化をサポートします。
  4. 地図のドラッグ、キーボード操作、ホイール ズーム、ダブルクリックによる拡大、地図範囲など、複数の地図機能の動的な有効化と無効化をサポートします。
  5. 考えられるすべてのアプリケーション シナリオ要件をカバーする、非常に豊富なパラメーターを備えた対話用の多数の js 関数インターフェイスを提供します。
  6. 統合された信号とスロットのメカニズムにより、マップ内の結果は統合された信号として送信され、受信後にタイプに従って区別されます。
  7. マウスを押して対応する場所の緯度と経度を取得するなど、地図の操作をサポートします。ラベル ポイントをクリックすると、対応するポイントに関する情報がポップアップ表示されます。
  8. 注釈の追加、注釈の削除、注釈の移動、および注釈のクリアをサポートします。
  9. マーキング ポイントでは、アイコン イメージを指定し、回転角度を設定し、リッチ テキスト プロンプト情報を含めることができます。
  10. ラベル ポイント イベントは、シングルクリック信号通知と情報を表示するポップアップ ボックスをサポートします。
  11. アドレスから座標および座標からアドレスへのインターフェイスを提供します。
  12. 折れ線グラフ、多角形、長方形、円、円弧などを含むさまざまなグラフィック描画をサポートします。
  13. フローティング描画ツールバーを表示して、地図上に線、マーク点、長方形、円などを直接描画できます。
  14. 長方形エリアや円形エリアなど、さまざまなエリア検索に対応しており、キーワード一致による検索結果を地図上に表示できます。
  15. オフラインの行政区画境界点データを動的に追加できます。行政区画を検索し、そのエリアの境界点データを取得できます。データはファイルに保存してオフラインで使用できます。
  16. ポイント集約機能をサポートし、複数の小さなラベル ポイントが 1 つの大きなラベル ポイントにマージされ、密集したポイントによって引き起こされる不快な相互作用を防ぎます。
  17. 多数のポイントを追加でき、各ポイントをクリックして対応する座標と情報を取得できます。
  18. マークされた点、四角形、多角形、折れ線グラフなどのすべてのカバレッジ情報をアクティブに取得できます。
  19. バスルート、自動運転ルート、徒歩ルート、自転車ルートなどの経路計画をサポートし、最短時間、最短乗り換え、高架ルートなしなどのさまざまな戦略をサポートします。
  20. 経路計画結果は地図上に表示され、経路点座標も取得できます。このデータはファイルに保存できるため、ナビゲーションや軌道移動のためにロボットやドローンに送信できます。
  21. ストリートマップ、衛星マップ、ハイブリッドマップなど、さまざまなマップビューを設定できます。
  22. ミッドナイトブルー、グラスグリーンなど、さまざまなスタイルを設定できます。
  23. オフライン マップ ダウンロード モジュールを提供します。Baidu マップや Google マップなどのさまざまなマップ コア、道路地図や衛星地図のダウンロードなどのさまざまなマップ タイプ、さまざまなマップ レベル、およびマルチスレッドの非常に高速なダウンロードを選択できます。
  24. テーブルの行には、ダウンロード タイムアウトや再試行回数など、対応するタイルのダウンロードの進行状況がリアルタイムで表示されます。タイルのダウンロードが完了するたびにシグナル通知が送信され、パラメーターにはダウンロード時間が含まれます。
  25. 各地域の概略図を自動的にダウンロードし、スクリプト ファイルまたはテキスト ファイルに保存する、州および都市の概略図ダウンロード モジュールを提供します。
  26. さまざまな領域の輪郭境界の手動調整をサポートし、調整後、調整された境界点セットをアクティブに取得できます。
  27. 動的なポイントの例を提供し、速度や時間などのカスタマイズされた情報を使用してマップ上のポイントを手動で選択し、ラベルを追加します。
  28. 大規模なポイントの例を提供し、ラベル ポイント、ポイント集約、およびバッチでの大規模なポイントを追加します。環境でサポートされている最大のポイント パフォーマンスをテストするために使用されます。
  29. GPS 座標変換をサポートし、オンラインとオフラインの両方の方法を提供します。通常、デバイスは標準の GPS 座標を受信します。これは、Baidu マップ上の Baidu 座標に変換する必要があります。
  30. 動的軌跡の例が示されています。マップ上でマウスを押して開始点と終了点を選択すると、ルートが照会され、パス軌跡のポイントが取得され、タイマーが軌跡の移動をシミュレートします。データをフィルタリングして、過剰なウェイポイントを設定されたポイント数までフィルタリングできます。
  31. 指定したトラックポイントリストに従って再生できるトラックの再生例を示します。トラックポイントデータをインポートして再生することもできます。また、市街地図、衛星地図、混合地図でのトラック再生もサポートしています。
  32. echart コンポーネントを使用して、地方および地方自治体の地域マップの例を提供し、フラッシュ ポイント マップ、移行マップ、地域マップ、世界地図、ダッシュボードなどもサポートします。タイトル、プロンプト情報、背景色、文字色、線色、領域色など、さまざまな色を設定できます。
  33. 州および都市の地域地図の例、内蔵世界地図、全国地図、州地図、地域地図、郡まで正確、すべての地図はオフラインで使用できます。都市の名前、値、経度、緯度のコレクションを設定できます。
  34. ユニバーサル ブラウザ コンポーネントが組み込まれており、webkit/webengine/miniblink およびその他のカーネルをサポートします。 Web ページおよびローカル Web ページ ファイルを開く方法を示す Web ページ コントロールの例を提供します。
  35. あらゆる Qt バージョン、あらゆるシステム、あらゆるコンパイラをサポートします。

3. コードの使用法

  1. 2 つのコンポーネント ディレクトリ core_map (マップ コンポーネント)/core_webview (ブラウザ コンポーネント) をプロジェクト ディレクトリにコピーし、pro でインポート コードを入力してプロジェクトに追加します。 $PWD/…/ は上位ディレクトリを表します。
include ($$PWD/../core_map/core_map.pri)
include ($$PWD/../core_webview/core_webview.pri)
  1. たとえば、Pro でマップ カーネルを有効にするには、Baidu マップ カーネルでは、PRO ファイルに DEFINES = baidux を定義する行を追加する必要があります。
  2. ヘッダー ファイルをインポートします。
#include "webview.h"
#include "mapbase.h"
  1. 新しいフォームを作成し、その上に複数のブラウザ コントロールを配置できる GridLayout を使用することをお勧めします。
  2. ブラウザ クラスとマップ クラスをインスタンス化します。
//实例化浏览器控件
WebView *webView = new WebView(this);
//加入到布局
webView-