기술나눔

Qt/C 지도 작성 애플리케이션/오프라인 지도 다운로드/경로 계획/트랙 재생/대량 포인트/좌표 변환

2024-07-08

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

1. 서문

이 지도 구성 요소는 수년 동안 작성되었습니다. 초기 디자인은 단지 프로젝트의 요구 사항을 충족하기 위한 것이었고 확장성을 너무 많이 고려하지 않았습니다. 지난 몇 년간 많은 개발을 거쳐 현장에서의 실제 적용과 사용자들의 수많은 개선 제안이 점차 해당 지도 관련 코드를 완전히 다시 작성하는 아이디어로 이어졌습니다. , 기본 클래스 하위 클래스의 디자인, 웹 페이지 중간에 많은 코드를 작성하는 대신 js 함수를 통해 상호 작용하는 다양한 기능 인터페이스 등이 있습니다.

이전 맵 예시들은 생각나는 대로 작성했는데, 계속해서 추가하다 보니, 인터페이스에서의 기능 시연도 상대적으로 부풀어 오르게 되었습니다. 이번에는 모든 예제를 포함하여 리팩토링되었습니다. 너무 많은 예제 데모의 경우 각각의 작은 예제의 코드를 저장하기 위해 별도의 디렉토리가 생성되고 코드가 분할되어 기능을 배우는 것이 매우 편리합니다. 이전에는 예제 코드가 한 클래스에 쌓여 있으면 찾는데 시간이 걸리곤 했는데, 프로그래머들이 가장 짜증나는 점은 코드 파일에 너무 많다는 점이었습니다. 가능하다면 그룹으로 나눌 수 있습니다.

2. 기능적 특징

  1. 기본적으로 Baidu Map을 사용하여 여러 맵 코어를 지원합니다.
  2. 온라인 지도와 오프라인 지도 모드를 동시에 지원합니다. 오프라인 지도는 인터넷에 연결되지 않은 상황에서 사용하기 편리합니다.
  3. 지도 내비게이션, 지도 유형, 썸네일, 축척, 파노라마 내비게이션, 실시간 교통 상황, 그리기 도구, 결과 패널 등과 같은 다양한 지도 컨트롤 활성화를 지원합니다.
  4. 지도 끌기, 키보드 조작, 휠 확대/축소, 두 번 클릭하여 확대, 지도 범위 지정과 같은 여러 지도 기능의 동적 활성화 및 비활성화를 지원합니다.
  5. 상상할 수 있는 모든 애플리케이션 시나리오 요구 사항을 포괄하는 매우 풍부한 매개 변수와 함께 상호 작용을 위한 수많은 js 기능 인터페이스를 제공합니다.
  6. 통일된 신호와 슬롯 메커니즘, 맵의 결과는 통일된 신호로 전송되며, 수신 후 유형에 따라 구별됩니다.
  7. 마우스를 눌러 해당 위치의 위도와 경도를 얻는 등 지도 상호 작용을 지원합니다. 라벨 포인트를 클릭하면 해당 포인트에 대한 정보가 팝업됩니다.
  8. 주석 추가, 주석 삭제, 주석 이동 및 주석 지우기를 지원합니다.
  9. 표시 지점은 아이콘 이미지를 지정하고, 회전 각도를 설정하고, 서식 있는 텍스트 프롬프트 정보를 가질 수 있습니다.
  10. 레이블 포인트 이벤트는 단일 클릭 신호 알림 및 팝업 상자를 지원하여 정보를 표시합니다.
  11. 주소-좌표 및 좌표-주소 인터페이스를 제공합니다.
  12. 꺾은선형 차트, 다각형, 직사각형, 원, 호 등을 포함한 다양한 그래픽 그리기를 지원합니다.
  13. 플로팅 그리기 도구 모음을 표시하여 지도에 선, 마크 포인트, 직사각형, 원 등을 직접 그릴 수 있습니다.
  14. 직사각형 영역, 원형 영역 등 다양한 지역 검색을 지원하며, 키워드 매칭을 기반으로 검색 결과를 지도에 표시할 수 있습니다.
  15. 오프라인 행정구역 경계점 데이터를 동적으로 추가할 수 있습니다. 행정 구역을 검색하고 해당 지역에 대한 경계점 데이터를 얻을 수 있습니다. 오프라인 사용을 위해 데이터를 파일에 저장할 수 있습니다.
  16. 포인트 집계 기능을 지원합니다. 여러 개의 작은 라벨 포인트를 하나의 큰 라벨 포인트로 병합하여 밀집된 포인트로 인해 발생하는 불친절한 상호 작용을 방지합니다.
  17. 많은 수의 포인트를 추가할 수 있으며, 각 포인트를 클릭하면 해당 좌표와 정보를 얻을 수 있습니다.
  18. 표시된 점, 직사각형, 다각형, 선 차트 등과 같은 모든 커버리지 정보를 적극적으로 얻을 수 있습니다.
  19. 버스 경로, 자율 주행 경로, 도보 경로, 자전거 경로를 포함한 경로 계획을 지원합니다. 다양한 쿼리는 최소 시간, 최소 환승 및 고가 경로 없음을 포함한 다양한 전략을 지원합니다.
  20. 경로 계획 결과는 지도에 표시되며 경로 지점 좌표 설정도 얻을 수 있습니다. 이 데이터는 파일로 저장되어 내비게이션 및 궤적 이동을 위해 로봇이나 드론에 전송될 수 있습니다.
  21. 거리 지도, 위성 지도, 하이브리드 지도 등 다양한 지도 보기를 설정할 수 있습니다.
  22. 미드나잇 블루, 잔디 녹색 및 기타 스타일과 같은 다양한 스타일을 설정할 수 있습니다.
  23. 오프라인 지도 다운로드 모듈을 제공합니다. Baidu 지도 또는 Google 지도와 같은 다양한 지도 코어, 거리 지도 또는 위성 지도 다운로드와 같은 다양한 지도 유형, 다양한 지도 수준 및 멀티스레드 초고속 다운로드를 선택할 수 있습니다.
  24. 표 행에는 다운로드 시간 초과 및 재시도 횟수를 포함하여 해당 타일 다운로드 진행 상황이 실시간으로 표시됩니다. 타일 다운로드가 완료될 때마다 신호 알림이 전송되며 매개변수에는 다운로드 시간이 포함됩니다.
  25. 각 지역의 외곽 지도를 자동으로 다운로드하여 스크립트 파일이나 텍스트 파일로 저장할 수 있는 도 및 시 외곽 지도 다운로드 모듈을 제공합니다.
  26. 다양한 영역의 윤곽선 경계에 대한 수동 조정을 지원합니다. 조정 후 조정된 경계점 세트를 적극적으로 얻을 수 있습니다.
  27. 동적 포인트 예시를 제공하고, 지도에서 포인트를 수동으로 선택하고, 속도, 시간 등의 맞춤형 정보와 함께 라벨을 추가합니다.
  28. 대규모 포인트 예제를 제공하고 라벨 포인트, 포인트 집계 및 대규모 포인트를 일괄 추가합니다. 환경에서 지원되는 최대 포인트 성능을 테스트하는 데 사용됩니다.
  29. GPS 좌표 변환을 지원하며 온라인과 오프라인 방식을 모두 제공합니다. 일반적으로 장치는 Baidu 지도에서 Baidu 좌표로 변환해야 하는 표준 GPS 좌표를 수신합니다.
  30. 동적 궤적의 예가 제공됩니다. 지도에서 마우스를 눌러 시작점과 끝점을 선택한 후 경로를 쿼리하고 경로 궤적 지점을 획득하고 타이머가 궤적 이동을 시뮬레이션합니다. 데이터를 필터링하여 과도한 웨이포인트를 설정된 포인트 수까지 필터링할 수 있습니다.
  31. 지정된 트랙 포인트 목록에 따라 재생할 수 있는 트랙 재생 예를 제공하며, 재생을 위해 트랙 포인트 데이터를 가져올 수도 있습니다. 또한 거리 지도, 위성 지도, 혼합 지도의 트랙 재생도 지원합니다.
  32. echart 컴포넌트를 활용한 시·도 지역별 지도 예시를 제공하며, 플래싱 포인트 지도, 이주 지도, 지역 지도, 세계 지도, 대시보드 등도 지원합니다. 제목, 프롬프트 정보, 배경색, 텍스트 색상, 선 색상, 영역 색상 등 다양한 색상을 설정할 수 있습니다.
  33. 지방 및 도시 지역 지도의 예, 내장된 세계 지도, 전국 지도, 지방 지도, 지역 지도, 카운티에 맞는 모든 지도를 오프라인에서 사용할 수 있습니다. 도시의 이름, 값, 경도 및 위도 컬렉션을 설정할 수 있습니다.
  34. 내장된 범용 브라우저 구성 요소이며 webkit/webengine/miniblink 및 기타 커널을 지원합니다. 웹 페이지 및 로컬 웹 페이지 파일 열기를 보여 주는 웹 페이지 제어 예제를 제공합니다.
  35. 모든 Qt 버전, 모든 시스템, 모든 컴파일러를 지원합니다.

3. 코드 사용

  1. 두 개의 구성 요소 디렉터리인 core_map(맵 구성 요소)/core_webview(브라우저 구성 요소)를 프로젝트 디렉터리에 복사하고 pro에서 가져오기 코드를 입력한 후 프로젝트에 추가합니다. $PWD/…/는 상위 디렉터리를 나타냅니다.
include ($$PWD/../core_map/core_map.pri)
include ($$PWD/../core_webview/core_webview.pri)
  1. 예를 들어, Baidu 맵 커널에서 pro에서 맵 커널을 활성화하려면 pro 파일에 DEFINES = baidux를 정의하는 줄을 추가해야 합니다.
  2. 헤더 파일을 가져옵니다.
#include "webview.h"
#include "mapbase.h"
  1. 새 양식을 작성하고 그 위에 레이아웃을 배치하십시오. 여러 브라우저 컨트롤을 넣을 수 있는 그리드 레이아웃을 사용하는 것이 좋습니다.
  2. 브라우저 클래스와 지도 클래스를 인스턴스화합니다.
//实例化浏览器控件
WebView *webView = new WebView(this);
//加入到布局
webView-