HarmonyOS鸿蒙Next中系统的坐标转换方法map.convertCoordinateSync调用会一直同步卡死在此方法,没有结果返回,哪位大佬知道为啥?
HarmonyOS鸿蒙Next中系统的坐标转换方法map.convertCoordinateSync调用会一直同步卡死在此方法,没有结果返回,哪位大佬知道为啥? 系统的坐标转换方法map.convertCoordinateSync调用会一直同步卡死在此方法,没有结果返回,哪位大佬知道为啥?
我看文档里说当前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方法用于同步执行坐标转换操作。如果该方法调用后一直卡死且没有结果返回,可能是由于以下几个原因:
-
线程阻塞:
convertCoordinateSync是同步方法,如果在主线程中调用,且坐标转换操作耗时较长,可能会导致主线程阻塞,从而造成应用无响应。 -
网络问题:坐标转换可能依赖于网络服务,如果网络连接不稳定或服务不可用,可能会导致方法无法正常返回。
-
参数错误:传入的坐标参数可能不符合要求,例如坐标值超出有效范围或格式不正确,导致方法无法正确处理。
-
系统资源不足:如果系统资源(如内存、CPU)不足,可能会导致方法执行卡顿或无法完成。
-
SDK版本问题:使用的SDK版本可能存在已知问题或Bug,导致该方法无法正常工作。
-
权限问题:如果应用缺少必要的权限(如网络访问权限),可能导致坐标转换操作无法完成。
建议检查上述可能的原因,并根据具体情况进行排查。
在HarmonyOS鸿蒙Next中,map.convertCoordinateSync方法卡死可能由以下原因导致:
-
主线程阻塞:该方法为同步调用,若在主线程执行,可能会阻塞UI响应。建议在子线程中调用,或使用异步方法
map.convertCoordinate。 -
参数错误:检查传入的坐标参数是否合法,非法参数可能导致方法无法正常执行。
-
系统资源不足:若系统资源紧张,可能导致方法无法及时返回。建议检查系统资源使用情况。
-
API兼容性问题:确认使用的SDK版本与API兼容,不兼容的版本可能导致异常。
建议先尝试异步调用,并检查参数和系统资源,若问题依旧,可联系华为技术支持获取进一步帮助。

