HarmonyOS鸿蒙Next中系统的坐标转换方法map.convertCoordinateSync调用会一直同步卡死在此方法,没有结果返回,哪位大佬知道为啥?

HarmonyOS鸿蒙Next中系统的坐标转换方法map.convertCoordinateSync调用会一直同步卡死在此方法,没有结果返回,哪位大佬知道为啥? 系统的坐标转换方法map.convertCoordinateSync调用会一直同步卡死在此方法,没有结果返回,哪位大佬知道为啥?

3 回复

我看文档里说当前convertCoordinateSync仅支持WGS84坐标系转GCJ02坐标系

当前仅支持84转02坐标系,暂无提供GCJ02转WGS84坐标系的计划。

试一下下面这个demo:

const PI = Math.PI;
const a = 6378245.0;
const ee = 0.00669342162296594323;

function outOfChina(lng: number, lat: number): boolean {
  if (lng < 72.004 || lng > 137.8347) {
    return true;
  }
  if (lat < 0.8293 || lat > 55.8271) {
    return true;
  }
  return false;
}

function transformLat(lng: number, lat: number): number {
  let ret = -100.0 + 2.0 * lng + 3.0 * lat + 0.2 * lat * lat + 0.1 * lng * lat + 0.2 * Math.sqrt(Math.abs(lng));
  ret += (20.0 * Math.sin(6.0 * lng * PI) + 20.0 * Math.sin(2.0 * lng * PI)) * 2.0 / 3.0;
  ret += (20.0 * Math.sin(lat * PI) + 40.0 * Math.sin(lat / 3.0 * PI)) * 2.0 / 3.0;
  ret += (160.0 * Math.sin(lat / 12.0 * PI) + 320 * Math.sin(lat * PI / 30.0)) * 2.0 / 3.0;
  return ret;
}

function transformLng(lng: number, lat: number): number {
  let ret = 300.0 + lng + 2.0 * lat + 0.1 * lng * lng + 0.1 * lng * lat + 0.1 * Math.sqrt(Math.abs(lng));
  ret += (20.0 * Math.sin(6.0 * lng * PI) + 20.0 * Math.sin(2.0 * lng * PI)) * 2.0 / 3.0;
  ret += (20.0 * Math.sin(lng * PI) + 40.0 * Math.sin(lng / 3.0 * PI)) * 2.0 / 3.0;
  ret += (150.0 * Math.sin(lng / 12.0 * PI) + 300.0 * Math.sin(lng / 30.0 * PI)) * 2.0 / 3.0;
  return ret;
}

function gcj02ToWgs84(lng: number, lat: number): number[] {
  if (outOfChina(lng, lat)) {
    return [lng, lat];
  }
  let dlat = transformLat(lng - 105.0, lat - 35.0);
  let dlng = transformLng(lng - 105.0, lat - 35.0);
  let radlat = lat / 180.0 * PI;
  let magic = Math.sin(radlat);
  magic = 1 - ee * magic * magic;
  let sqrtmagic = Math.sqrt(magic);
  dlat = (dlat * 180.0) / ((a * (1 - ee)) / (magic * sqrtmagic) * PI);
  dlng = (dlng * 180.0) / (a / sqrtmagic * Math.cos(radlat) * PI);
  let mglat = lat + dlat;
  let mglng = lng + dlng;
  return [lng * 2 - mglng, lat * 2 - mglat];
}

更多关于HarmonyOS鸿蒙Next中系统的坐标转换方法map.convertCoordinateSync调用会一直同步卡死在此方法,没有结果返回,哪位大佬知道为啥?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,map.convertCoordinateSync方法用于同步执行坐标转换操作。如果该方法调用后一直卡死且没有结果返回,可能是由于以下几个原因:

  1. 线程阻塞:convertCoordinateSync是同步方法,如果在主线程中调用,且坐标转换操作耗时较长,可能会导致主线程阻塞,从而造成应用无响应。

  2. 网络问题:坐标转换可能依赖于网络服务,如果网络连接不稳定或服务不可用,可能会导致方法无法正常返回。

  3. 参数错误:传入的坐标参数可能不符合要求,例如坐标值超出有效范围或格式不正确,导致方法无法正确处理。

  4. 系统资源不足:如果系统资源(如内存、CPU)不足,可能会导致方法执行卡顿或无法完成。

  5. SDK版本问题:使用的SDK版本可能存在已知问题或Bug,导致该方法无法正常工作。

  6. 权限问题:如果应用缺少必要的权限(如网络访问权限),可能导致坐标转换操作无法完成。

建议检查上述可能的原因,并根据具体情况进行排查。

在HarmonyOS鸿蒙Next中,map.convertCoordinateSync方法卡死可能由以下原因导致:

  1. 主线程阻塞:该方法为同步调用,若在主线程执行,可能会阻塞UI响应。建议在子线程中调用,或使用异步方法map.convertCoordinate

  2. 参数错误:检查传入的坐标参数是否合法,非法参数可能导致方法无法正常执行。

  3. 系统资源不足:若系统资源紧张,可能导致方法无法及时返回。建议检查系统资源使用情况。

  4. API兼容性问题:确认使用的SDK版本与API兼容,不兼容的版本可能导致异常。

建议先尝试异步调用,并检查参数和系统资源,若问题依旧,可联系华为技术支持获取进一步帮助。

回到顶部