网上做预算的网站,医院网站后台模板,网站设计怎么做有效的,成都三网合一网站建设使用Dart调用JS#xff0c;还是为了练习跨语言调用#xff1b;
一、编写对应的JS代码
平时在开发时不推荐将算法放在JS里#xff0c;我这里是简单的做一下数据过滤#xff1b; 首先生成一些随机定位数据#xff0c;在实际开发中可以使用真实数据#xff1b;
// 随机定…使用Dart调用JS还是为了练习跨语言调用
一、编写对应的JS代码
平时在开发时不推荐将算法放在JS里我这里是简单的做一下数据过滤 首先生成一些随机定位数据在实际开发中可以使用真实数据
// 随机定位点
function getRandomCoordinate() {return {latitude: getRandomFloat(110, 115),longitude: getRandomFloat(110, 115)};
}// 随机数
function getRandomFloat(min, max) {return minMath.random()*(max-min);
}将数据添加到对应容器中
// 滤波
function filterData() {console.log(开始滤波-----);var data [];// 添加10000条随机定位点for (let index 0; index 10000; index) {let coordinate getRandomCoordinate();data.push(coordinate);}console.log(data);averageFilter(data);
}滤波时需要计算弧面距离
// 计算定位之间的距离
function distance(lat1, lon1, lat2, lon2) {const R 6371; // 地球半径我使用的是平均值单位公里const dLat deg2rad(lat2-lat1); // 角度转弧度const dLon deg2rad(lon2-lon1); // 同上const dL1 deg2rad(lat1);const dL2 deg2rad(lat2);// 开始求弧面距离了const a Math.sin(dLat/2)*Math.sin(dLon/2)Math.cos(dL1)*Math.cos(dL2)*Math.sin(dLon/2)*Math.sin(dLon/2);if (a 0) {return 0;}const c 2*Math.atan2(Math.sqrt(a), Math.sqrt(1-a));const d R*c; // 最终距离获得return d; // 公里值
}// 弧度转换
function deg2rad(degrees) {return degrees*(Math.PI/180);
}开始滤波
// 平均值滤波
function averageFilter(data) {var totalDistance 0; // 总距离for (let index 0; index data.length-1; index) {const l1 data[index];const l2 data[index1];totalDistance distance(l1.latitude, l1.longitude, l2.latitude, l2.longitude);}const averageDistance totalDistance/(data.length-1);// 开始过滤var filters [];const value averageDistance*1.5; // 使用1.5倍平均值作为阀值可调整for (let index 0; index data.length-1; index) {const l1 data[index];const l2 data[index1];const d distance(l1.latitude, l1.longitude, l2.latitude, l2.longitude);if (d value) {filters.push(l2);}}console.log(平均值滤波结果);console.log(filters);console.log(------------);
}Dart中调用JS代码
import dart:js as js;void main() {js.context.callMethod(filterData, []);exit(0); // 退出
}运行结果过滤了一部分距离过远跳跃的定位数据 JS也可以调用Dart方法可以将对应的Dart方法当作参数传给JS然后JS使用闭包接收然后可以在需要时调用闭包。