当前位置:   article > 正文

鸿蒙ArkTS如何接入地图【已解决】_鸿蒙开发arkts地图

鸿蒙开发arkts地图

问题描述

鸿蒙ArkTS语言开发地图APP应用时,开发出现瓶颈。经过调研,很多地图厂商只接入了鸿蒙Java,就算是有ArkTS版功能也比较少(我的调研不一定全面哈),而自己手动写地图也很麻烦。

解决方法

使用鸿蒙的Web组件,将HTML页面嵌入到鸿蒙APP中。

简单来说就是,各大地图厂商是适配普通Web页面的开发的,那么就用HTML去使用地图接口,鸿蒙 ArkTS 作为壳子。

这个方法可以为很多目前因为鸿蒙不完善而堵塞开发的问题提供一个新思路。

1. 编写HTML(以高德地图为例)

该HTML的功能:1. 创建地图,2. 批量添加标记,3. 点击标记显示信息

可以继续拓展功能......

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8" />
  5. <meta
  6. name="viewport"
  7. content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"
  8. />
  9. <title>xxxx</title>
  10. <style>
  11. html,
  12. body,
  13. #container {
  14. width: 100%;
  15. height: 100%;
  16. margin: 0;
  17. padding: 0;
  18. }
  19. </style>
  20. </head>
  21. <body style="position: absolute">
  22. <div
  23. id="mapContainer"
  24. style="width: 100%; height: 100vh; border: 1px solid #000000"
  25. ></div>
  26. <script type="text/javascript">
  27. window._AMapSecurityConfig = {
  28. securityJsCode: "xxx",
  29. };
  30. </script>
  31. <script src="https://webapi.amap.com/loader.js"></script>
  32. <script type="text/javascript">
  33. var AMapStore = {
  34. AMapBox: "", // 高德地图容器
  35. map: {},
  36. marker: [], // 标记
  37. };
  38. // 存储地点信息
  39. const locations = [];
  40. // 加载高德地图容器
  41. async function LoaderMap() {
  42. try {
  43. const AMap = await AMapLoader.load({
  44. key: "xxxx", // 请替换成你申请的应用key
  45. version: "2.0", // 指定要加载的 JS API 的版本
  46. });
  47. AMapStore.AMapBox = AMap;
  48. } catch (e) {
  49. console.error(e);
  50. }
  51. }
  52. // 建立地图
  53. async function createMap() {
  54. AMapStore.map = await new AMapStore.AMapBox.Map("mapContainer", {
  55. viewMode: "2D",
  56. zoom: 15.4,
  57. center: [xx, xx],
  58. });
  59. }
  60. // 标记所有地点
  61. function AllMapMaker() {
  62. for (let i = 0; i < locations.length; i += 1) {
  63. MapMaker(locations[i].coordinates, i, locations[i].name);
  64. }
  65. }
  66. // 标记地图
  67. function MapMaker(positionNum, num, name) {
  68. AMapStore.marker.push(
  69. new AMapStore.AMapBox.Marker({
  70. icon: "https://webapi.amap.com/theme/v1.3/markers/n/mark_b.png",
  71. position: [positionNum[0], positionNum[1]],
  72. title: name,
  73. offset: new AMapStore.AMapBox.Pixel(-13, -30),
  74. })
  75. );
  76. let infoWindow; // 声明 infoWindow 变量以便在点击地图时进行访问
  77. // 添加标记点击事件监听器
  78. AMapStore.marker[num].on("click", () => {
  79. // 如果之前有打开的信息窗体,则先关闭
  80. if (infoWindow) {
  81. infoWindow.close();
  82. }
  83. // 创建信息窗体
  84. infoWindow = new AMapStore.AMapBox.InfoWindow({
  85. content: `<div style="max-width: 300px;">${locations[num].details}</div>`,
  86. offset: new AMapStore.AMapBox.Pixel(40.15, -42),
  87. zIndex: 1000,
  88. });
  89. // 打开信息窗体
  90. infoWindow.open(AMapStore.map, AMapStore.marker[num].getPosition());
  91. });
  92. // 添加地图点击事件监听器
  93. AMapStore.map.on("click", () => {
  94. // 关闭信息窗体
  95. if (infoWindow) {
  96. infoWindow.close();
  97. }
  98. });
  99. AMapStore.map.add(AMapStore.marker[num]);
  100. }
  101. // 初始化一切
  102. async function init() {
  103. await LoaderMap();
  104. await createMap();
  105. await AllMapMaker();
  106. }
  107. init();
  108. </script>
  109. </body>
  110. </html>

2. 安置HTML文件

在resources下创建rawfile文件夹,将html文件放入即可

3. 接入鸿蒙ArkTS

  1. import web_webview from '@ohos.web.webview';
  2. @Entry
  3. @Component
  4. struct WebComponent {
  5. webviewController: web_webview.WebviewController = new web_webview.WebviewController();
  6. build() {
  7. Column() {
  8. // 组件创建时,通过$rawfile加载本地文件map.html
  9. Web({ src: $rawfile("map.html"), controller: this.webviewController })
  10. }
  11. }
  12. }

4. 在模拟机或真机运行

在鸿蒙自带的预览器运行会报错

地图加载过程,涉及网络资源获取,需要配置ohos.permission.INTERNET网络访问权限。

以ArkTS的Stage模型为例:

需要在module.json5配置文件中声明权限,添加下列代码即可

  1. {
  2. "module": {
  3. ......
  4. "requestPermissions":[
  5. {
  6. "name": "ohos.permission.INTERNET"
  7. }
  8. ],
  9. ......
  10. }
  11. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/714998
推荐阅读
相关标签
  

闽ICP备14008679号