HarmonyOS 鸿蒙Next中Location Kit和Map Kit的使用

发布于 1周前 作者 h691938207 来自 鸿蒙OS

HarmonyOS 鸿蒙Next中Location Kit和Map Kit的使用 geoLocationManager能提供一个WGS84转GCJ02的方法么,现在只有Map Kit里面有该方法。

4 回复

当前鸿蒙LocationKit使用WGS84坐标系,国内的高德地图就是用的 GCJ-02 坐标系。

坐标系相关可参考:https://cloud.tencent.com/developer/article/2192763

转化函数参考:https://blog.csdn.net/m0_49083276/article/details/132543952

例如:$wgs84togcj02(116.21444326466906, 39.90445824169115) => {lng: 116.22051284252636, lat: 39.90569596220289}

更多关于HarmonyOS 鸿蒙Next中Location Kit和Map Kit的使用的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在 JavaScript 中,可以通过数学公式将 WGS84 坐标系转换为 GCJ02 坐标系。GCJ02 是中国大陆使用的加密坐标系,通常称为火星坐标系。

以下是一个实现 WGS84 转 GCJ02 的 JavaScript 函数:

// 常量定义
const PI = 3.1415926535897932384626;
const A = 6378245.0;
const EE = 0.00669342162296594323;

// 判断是否在中国大陆范围内
function outOfChina(lng, lat) {
  return (lng < 72.004 || lng > 137.8347) || (lat < 0.8293 || lat > 55.8271);
}

// 转换纬度
function transformLat(x, y) {
  let ret = -100.0 + 2.0 * x + 3.0 * y + 0.2 * y * y + 0.1 * x * y + 0.2 * Math.sqrt(Math.abs(x));
  ret += (20.0 * Math.sin(6.0 * x * PI) + 20.0 * Math.sin(2.0 * x * PI)) * 2.0 / 3.0;
  ret += (20.0 * Math.sin(y * PI) + 40.0 * Math.sin(y / 3.0 * PI)) * 2.0 / 3.0;
  ret += (160.0 * Math.sin(y / 12.0 * PI) + 320 * Math.sin(y * PI / 30.0)) * 2.0 / 3.0;
  return ret;
}

// 转换经度
function transformLon(x, y) {
  let ret = 300.0 + x + 2.0 * y + 0.1 * x * x + 0.1 * x * y + 0.1 * Math.sqrt(Math.abs(x));
  ret += (20.0 * Math.sin(6.0 * x * PI) + 20.0 * Math.sin(2.0 * x * PI)) * 2.0 / 3.0;
  ret += (20.0 * Math.sin(x * PI) + 40.0 * Math.sin(x / 3.0 * PI)) * 2.0 / 3.0;
  ret += (150.0 * Math.sin(x / 12.0 * PI) + 300.0 * Math.sin(x / 30.0 * PI)) * 2.0 / 3.0;
  return ret;
}

// WGS84 转 GCJ02
function wgs84ToGcj02(lng, lat) {
  if (outOfChina(lng, lat)) {
    return [lng, lat];
  }
  let dLat = transformLat(lng - 105.0, lat - 35.0);
  let dLon = transformLon(lng - 105.0, lat - 35.0);
  const radLat = lat / 180.0 * PI;
  let magic = Math.sin(radLat);
  magic = 1 - EE * magic * magic;
  const sqrtMagic = Math.sqrt(magic);
  dLat = (dLat * 180.0) / ((A * (1 - EE)) / (magic * sqrtMagic) * PI);
  dLon = (dLon * 180.0) / (A / sqrtMagic * Math.cos(radLat) * PI);
  const mgLat = lat + dLat;
  const mgLon = lng + dLon;
  return [mgLon, mgLat];
}

// 示例使用
const wgs84Coords = [116.404, 39.915]; // 北京的WGS84坐标
const gcj02Coords = wgs84ToGcj02(wgs84Coords[0], wgs84Coords[1]);
console.log(`GCJ02坐标: 经度 ${gcj02Coords[0]}, 纬度 ${gcj02Coords[1]}`);

解释

  1. 常量定义:

    • PI 为圆周率。
    • A 为地球长半轴。
    • EE 为地球的偏心率平方。
  2. outOfChina: 判断坐标是否在中国大陆范围内。如果不在,则不需要转换。

  3. transformLat 和 transformLon: 用于转换纬度和经度的辅助函数。

  4. wgs84ToGcj02: 主函数,接收 WGS84 坐标(经度和纬度),返回转换后的 GCJ02 坐标。

使用示例

在示例中,我们将北京的 WGS84 坐标 [116.404, 39.915] 转换为 GCJ02 坐标,并打印结果。

这个函数可以直接在浏览器或 Node.js 环境中运行。

在HarmonyOS鸿蒙Next中,Location Kit和Map Kit是两个重要的服务组件,分别用于位置服务和地图展示。

Location Kit提供了一系列API,用于获取设备的地理位置信息。它支持多种定位方式,包括GPS、Wi-Fi和基站定位。开发者可以使用Location Kit获取设备的经纬度、海拔、速度、方向等数据。Location Kit还支持地理围栏功能,可以设置特定区域,当设备进入或离开该区域时触发相应的事件。

Map Kit则提供了地图展示和交互功能。它支持多种地图类型,如标准地图、卫星地图和地形图。开发者可以使用Map Kit在地图上标注点、线、面等元素,并实现地图的缩放、平移、旋转等操作。Map Kit还支持路径规划、地点搜索等高级功能,可以帮助开发者构建丰富的地图应用。

这两个Kit可以通过HarmonyOS的分布式能力,实现跨设备的位置和地图数据共享。例如,用户可以在手机上进行路径规划,然后将规划结果同步到车机或智能手表上,实现无缝的导航体验。

在HarmonyOS鸿蒙Next中,Location Kit用于获取设备的地理位置信息,支持GPS、基站、Wi-Fi等多种定位方式,开发者可通过LocationManager类实现定位功能。Map Kit则提供地图显示、标注、路径规划等功能,基于MapView控件可轻松集成地图服务。两者结合可实现精准定位与地图展示,常用于导航、位置分享等场景。使用前需在config.json中配置权限,并确保设备支持相应服务。

回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!