Dart调用JS对10000条定位数据滤波

news2024/11/17 3:02:18

使用Dart调用JS,还是为了练习跨语言调用;

一、编写对应的JS代码

平时在开发时不推荐将算法放在JS里,我这里是简单的做一下数据过滤;
首先生成一些随机定位数据,在实际开发中可以使用真实数据;

// 随机定位点
function getRandomCoordinate() {
    return {
        latitude: getRandomFloat(110, 115),
        longitude: getRandomFloat(110, 115)
    };
}

// 随机数
function getRandomFloat(min, max) {
    return min+Math.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[index+1];
        
        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[index+1];
        
        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使用闭包接收,然后可以在需要时调用闭包。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1359567.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ROS学习笔记(9)进一步深入了解ROS第三步

0.前提 1. (C)Why did you include the header file of the message file instead of the message file itself?&#xff08;为包含消息的头文件而不是消息本身&#xff1f;&#xff09; 回答&#xff1a;msg文件是描述ROS消息字段的文本文件&#xff0c;用于生成不同语言消息…

【亚马逊云科技】自家的AI助手 - Amazon Q

写在前面&#xff1a;博主是一只经过实战开发历练后投身培训事业的“小山猪”&#xff0c;昵称取自动画片《狮子王》中的“彭彭”&#xff0c;总是以乐观、积极的心态对待周边的事物。本人的技术路线从Java全栈工程师一路奔向大数据开发、数据挖掘领域&#xff0c;如今终有小成…

生活中的物理3——神奇陷阱(随机倒下的抽屉柜门)

1实验 材料&#xff1a;大自然&#xff08;风&#xff09;、抽屉门松掉的抽屉 实验 1、找一个大风的日子&#xff0c;打开窗户&#xff08;不要找下雨天&#xff0c;不然你会被你亲爱的嫲嫲KO&#xff09; 2、让风在抽屉面前刮过 3、你发现了什么&#xff1f;&#xff1f;&…

毛戈平公司上市终止:产品依赖代工,研发投入低,毛戈平夫妇套现

时隔一年&#xff0c;毛戈平化妆品股份有限公司&#xff08;下称“毛戈平”或“毛戈平公司”&#xff09;在A股的上市之旅再次宣告终止。 据贝多财经了解&#xff0c;毛戈平公司最早于2016年12月预披露招股书&#xff0c;准备在上海证券交易所上市&#xff0c;原计划募资5.12亿…

防火安全球阀,到2027年市场增长至68亿美元

防火安全球阀是一种在火灾、爆炸等危险环境下仍能正常使用的阀门。它被广泛用于石化、化工、船舶、电力等领域&#xff0c;以保障生产和人员安全。下面我们将从全球市场和中国市场两个方面对其发展趋势进行分析。全球市场分析&#xff1a; 从全球市场的角度来看&#xff0c;防火…

【linux】更改infiniband卡在Debian系统的网络接口名

在Debian或任何其他基于Linux的系统中&#xff0c;网络接口的名称由udev系统管理。通过创建udev规则&#xff0c;可以修改网络接口名称。以下是更改InfiniBand卡接口名称的一般步骤&#xff1a; 1. 找到网络接口的属性&#xff0c;以编写匹配的udev规则 可以使用udevadm命令查…

[每周一更]-(第55期):Go的interface

参考地址 https://juejin.cn/post/6978322067775029261https://gobyexample.com/interfaceshttps://go.dev/tour/methods/9 介绍下Go的interface 在Go语言中&#xff0c;interface是一种特殊的数据类型&#xff0c;用于定义一组方法的规范。它描述了一个对象可以具备的行为&…

Android ValueAnimator属性动画ObjectAnimator使View颜色渐变,Kotlin

Android ValueAnimator属性动画ObjectAnimator使View颜色渐变&#xff0c;Kotlin 设置背景颜色渐变&#xff1a; private var iv: ImageView? nulloverride fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activit…

图表征模型研究

图表征对于知识图谱是很重要的&#xff0c;如何将图进行embedding&#xff0c;并输入到深度学习模型中&#xff0c;是一个热点问题。 1. GraphSage模型 主要应用于同构图中&#xff0c;是一种归纳式的图表征模型&#xff0c;首先从一个图中训练出embedding方法&#xff0c;在…

创意与技术的结晶:AI魔法绘图与中文描述的完美结合

在人类文明的长河中&#xff0c;创意与技术一直是推动发展的重要动力。随着科技的日新月异&#xff0c;人工智能&#xff08;AI&#xff09;在创意领域的应用逐渐崭露头角&#xff0c;而AI魔法绘图与中文描述的结合&#xff0c;更是将这一趋势推向了新的高度。AI魔法绘图是一种…

解决uniapp打包成apk后uni.getStorageSync获取不到值

uniapp写的项目&#xff0c;在hbuilderx中云打包成apk后我在登录存储的token死都获取不到&#xff0c;导致后续接口请求头没有token连接不到接口&#xff0c;只有运行到手机或者模拟器还有打包成apk后是获取不到&#xff0c;其他的小程序还有网页都可以获取到 试过了很多种方法…

[蓝桥杯学习]​树上差分

差分 前缀和 sum_i sum_i-1 a_i 差分 diff_i a_i - a_i-1 差分的好处 点的差分 问题引入 解决问题 要用到差分的思想&#xff0c;每次从叶子向上的回溯&#xff0c;让父结点子结点的cnt值&#xff0c;但是仅仅这样&#xff0c;还不行 回溯的过程中&#xff0c;LCA被加…

docker-compose Install spug 3

前言 Spug 面向中小型企业设计的轻量级无 Agent 的自动化运维平台,整合了主机管理、主机批量执行、主机在线终端、文件在线上传下载、应用发布部署、在线任务计划、配置中心、监控、报警等一系列功能。 创建一键安装spug 脚本 自动化脚本兼容(ubuntu,RedHat系列及复刻系列,…

2024最新阿里云服务器地域(城市)对照表

2024年阿里云服务器地域分布表&#xff0c;地域指数据中心所在的地理区域&#xff0c;通常按照数据中心所在的城市划分&#xff0c;例如华北2&#xff08;北京&#xff09;地域表示数据中心所在的城市是北京。阿里云地域分为四部分即中国、亚太其他国家、欧洲与美洲和中东&…

网工内推 | 保险业网工,有绩效奖金,CISP认证优先,最高16K

01 华贵人寿保险股份有限公司 招聘岗位&#xff1a;系统管理岗&#xff08;主机管理方向&#xff09; 职责描述&#xff1a; 1.负责数据中心私有云平台的规划建设以及后期的运行维护&#xff1b; 2.负责公司操作系统的规划、部署与日常维护&#xff1b; 3.负责操作系统运维相关…

Linux GDB 调试

文章目录 一、Qemu二、Gdbvscode 调试 三、RootFs 一、Qemu qemu 虚拟机 Linux内核学习 Linux 内核调试 一&#xff1a;概述 Linux 内核调试 二&#xff1a;ubuntu20.04安装qemu Linux 内核调试 三&#xff1a;《QEMU ARM guest support》翻译 Linux 内核调试 四&#xff1a;…

【Java并发】深入浅出 synchronized关键词原理-下

上一篇文章&#xff0c;简要介绍了syn的基本用法和monter对象的结构&#xff0c;本篇主要深入理解&#xff0c;偏向锁、轻量级锁、重量级锁的本质。 对象内存布局 Hotspot虚拟机中&#xff0c;对象在内存中存储的布局可以分为三块区域:对象头(Header)、实例数据 (Instance Da…

MySQL数据库期末知识点总结(复习版)

一、数据库基本知识 数据库中的数据有什么特点 1、数据是按某种结构组织的 2、数据有整体性、共享性和较高的独立性 数据管理技术经历了哪三个阶段 1、手工管理 2、文件管理 3、数据库管理 数据库管理系统的主要功能有哪些 数据库管理系统的主要功能包括数据定义、数据…

判断完全数-第11届蓝桥杯省赛Python真题精选

[导读]&#xff1a;超平老师的Scratch蓝桥杯真题解读系列在推出之后&#xff0c;受到了广大老师和家长的好评&#xff0c;非常感谢各位的认可和厚爱。作为回馈&#xff0c;超平老师计划推出《Python蓝桥杯真题解析100讲》&#xff0c;这是解读系列的第27讲。 判断完全数&#…

java大数据hadoop2.92安装伪分布式文件系统

Apache Hadoop 3.3.6 – Hadoop: Setting up a Single Node Cluster. 1、解压缩到某个路径 /usr/local/hadoop 2、修改配置文件 /usr/local/hadoop/etc/hadoop/hadoop-env.sh export JAVA_HOME/usr/local/javajdk 3、修改配置文件 /usr/local/hadoop/etc/hadoop/core-sit…