Flutter for OpenHarmony:latlong2 — 地图坐标计算与转换实战(适配鸿蒙 HarmonyOS Next ohos)

Flutter for OpenHarmony:latlong2 — 地图坐标计算与转换实战(适配鸿蒙 HarmonyOS Next ohos)

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net

在这里插入图片描述

前言

在鸿蒙(OpenHarmony)地图开发中,地理坐标(经纬度)的严谨处理是业务基石。latlong2 是一个纯 Dart 实现的地理座标计算库,支持大圆距离、方位角及中点计算,为基于位置的服务(LBS)提供了高性能的数学支撑。

一、核心价值

1.1 基础概念

在地球这种近似椭球体的表面上计算距离,不能简单套用平面几何。latlong2 默认提供了多种严谨的数学模型。

起点: 经纬度 A

计算引擎

终点: 经纬度 B

Haversine 算法: 大圆距离

Vincenty 算法: 更高精度的椭球体距离

计算 Bearing: A 到 B 的方位角

1.2 进阶概念

  • Haversine 公式:计算简单、速度快,绝大多数鸿蒙应用场景(如配送距离显示)已完全足够。
  • Vincenty 公式:考虑了地球极点稍扁的特性,偏差可控制在厘米级。

二、核心 API / 组件详解

2.1 创建坐标点

在鸿蒙适配中,我们通常将经纬度对象化:

import'package:latlong2/latlong.dart';// 华为总部大楼坐标示例finalLatLng hqLocation =LatLng(22.62,114.06);
在这里插入图片描述

2.2 计算两点间距离

constDistance distance =Distance();// 获取单位为米(m)的距离final double meter = distance.as(LengthUnit.Meter,LatLng(22.5,114.0),LatLng(22.6,114.1));print("🚀 在鸿蒙设备上计算出的距离为: ${meter}m");
在这里插入图片描述

三、场景示例

3.1 场景一:鸿蒙外卖应用中的“附近门店”排序

我们需要根据用户当前经纬度对所有门店进行距离测算。

import'package:latlong2/latlong.dart';voidsortStoresByDistance(LatLng userPos,List<Store> stores){const distance =Distance();// 💡 技巧:利用 Haversine 快速排序 stores.sort((a, b){final distA = distance.as(LengthUnit.Meter, userPos, a.pos);final distB = distance.as(LengthUnit.Meter, userPos, b.pos);return distA.compareTo(distB);});}
在这里插入图片描述

四、OpenHarmony 平台适配挑战

4.1 坐标系转换挑战(GCJ-02 v.s. WGS-84)

鸿蒙设备内置的 GPS 通常返回的是 WGS-84 原始坐标,而国内大多数地图图层(如高德)使用的是 GCJ-02(火星坐标系)。

适配策略

  1. 纯算法转换latlong2 本身处理坐标,不处理坐标系转换。建议配合专门的转换插件或自行实现偏移算法后再传给 latlong2 进行数学计算。
  2. 离线计算:由于其不依赖鸿蒙原生 API,非常适合在鸿蒙离线网关上作为地理围栏的判定算法。

五、综合实战示例代码

这是一个完整的鸿蒙地图助手页,演示了路径方位角与中点计算:

import'package:flutter/material.dart';import'package:latlong2/latlong.dart';classHarmonyMapHelperextendsStatelessWidget{constHarmonyMapHelper({super.key});@overrideWidgetbuild(BuildContext context){// 两个鸿蒙园区坐标点final p1 =LatLng(22.62,114.06);final p2 =LatLng(22.65,114.10);const distance =Distance();// 1. 计算距离final distKm = distance.as(LengthUnit.Kilometer, p1, p2);// 2. 计算从 P1 指向 P2 的角度final bearing = distance.bearing(p1, p2);// 3. 计算中间坐标(中继站位置)final midPoint =LatLng((p1.latitude + p2.latitude)/2,(p1.longitude + p2.longitude)/2);returnScaffold( appBar:AppBar(title:constText('latlong2 鸿蒙地理计算')), body:Center( child:Column( children:[constIcon(Icons.location_on, size:60, color:Colors.red),Text('两点直线距离: ${distKm.toStringAsFixed(2)} 公里'),Text('初始前进方位角: $bearing °'),constDivider(),Text('建议中继点坐标:'),Text('Lat: ${midPoint.latitude}, Lng: ${midPoint.longitude}'),],),),);}}
在这里插入图片描述

六、总结

latlong2 把繁杂的地理球体计算封装成了极其易用的 Dart API。在鸿蒙场景下,它是处理 LBS(基于位置的服务)应用业务层数据处理的绝佳选择。

核心建议

  1. 涉及简单的距离展示使用 Haversine (默认方式)。
  2. 需要跨越半个地球的极高精度测量请切换到 Vincenty 算法。

Read more

无线联邦学习:在保护隐私的无线网络中,让AI协同进化

无线联邦学习:在保护隐私的无线网络中,让AI协同进化

🔥作者简介: 一个平凡而乐于分享的小比特,中南民族大学通信工程专业研究生,研究方向无线联邦学习 🎬擅长领域:驱动开发,嵌入式软件开发,BSP开发 ❄️作者主页:一个平凡而乐于分享的小比特的个人主页 ✨收录专栏:无线通信技术,本专栏介绍无线通信相关技术 欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖💖 无线联邦学习:在保护隐私的无线网络中,让AI协同进化 一、什么无线联邦学习? 想象这样一个场景:全国各地的医院都想联合训练一个AI模型来诊断疾病,但患者的医疗数据极其敏感,不能离开医院。传统方法是把所有数据集中到一个中心服务器,但这会造成隐私泄露风险。怎么办? 无线联邦学习就像一位“知识快递员”——它不收集原始数据,而是让各地的医院在本地训练模型,然后只把模型“更新心得”(梯度或参数)通过无线网络传给中心服务器,由服务器汇总大家的智慧,形成一个更强大的模型。 核心思想 * 数据不动模型动:原始数据永远留在本地设备 * 仅上传模型更新:只传输学习到的参数,而非数据本身 * 无线传输媒介:通过Wi-Fi、5G等无线网络进行通信 本地设备3 本地设备2 本地设

By Ne0inhk
【企业级】RuoYi-Vue-Plus AI 智能开发助手 | Claude Code + Codex 双引擎 | 40+ 专业技能包 | 10 大快捷命令 | 开箱即用

【企业级】RuoYi-Vue-Plus AI 智能开发助手 | Claude Code + Codex 双引擎 | 40+ 专业技能包 | 10 大快捷命令 | 开箱即用

RuoYi-Vue-Plus AI 智能编程助手 商品简介 基于 RuoYi-Vue-Plus 5.X 企业级后端框架,深度定制的 AI 智能编程助手配置包。支持 Claude Code 和 OpenAI Codex 双 AI 引擎,内置 40+ 专业开发技能、10 大快捷命令、智能钩子系统,让 AI 真正理解您的项目架构和开发规范,实现 10 倍开发效率提升。 核心亮点 🚀 双 AI 引擎支持 引擎配置目录说明Claude Code.claude/Anthropic Claude 官方 CLI 工具配置OpenAI Codex.codex/OpenAI Codex CLI

By Ne0inhk
Miniforge详细安装教程(macOs和Windows)

Miniforge详细安装教程(macOs和Windows)

(注:主要是解决商业应用anaconda收费问题,这是轻量级的代替,个人完全可以使用anaconda和miniconda)            Miniforge 是一个轻量级的包管理器,类似于 Anaconda 和 Miniconda。它主要用于安装基于 conda 的 Python 环境,专注于兼容 ARM 架构的设备(如 Apple M1/M2 /M3芯片)和其它 CPU 架构。Miniforge 使用 conda-forge 作为默认的包管理渠道。下面是如何在不同系统中安装 Miniforge 的步骤。下面这些是本人安装过程出现的一些问题,及解决办法。 1. 在 macOS 和 Linux 上安装 Miniforge 步骤 1:下载 Miniforge 1. 访问 Miniforge GitHub

By Ne0inhk
会提问的人,正在用AI收割下一个十年

会提问的人,正在用AI收割下一个十年

文章目录 * 引言:一场关于AI的颠覆性对话 * 从对话到收入:AI时代的新型生产关系 * 会说话就能赚钱?这不是天方夜谭 * 从想法到产品:三天的魔法 * 技术民主化:AI不再是工程师的专属 * 打破技术壁垒的革命 * 文科生的优势在哪里? * AI时代的商业逻辑:用户付费意愿超预期 * 价值认知的转变 * 为什么用户愿意付费? * 新的商业模式 * AI的边界:思考仍然是人类的专属 * 技术的局限性 * 人机协作的最佳模式 * 实践指南:如何开始你的AI创作之旅 * 第一步:转变思维方式 * 第二步:从小项目开始 * 第三步:快速迭代 * 第四步:关注用户价值 * 第五步:建立商业模式 * 《脉向AI》:探索AI时代的无限可能 * 为什么要关注这期访谈? * 这不仅仅是一次访谈 * 结语:属于每个人的AI时代 引言:一场关于AI的颠覆性对话 在这个技术迅猛发展的时代,我们总是习惯性地认为,掌握AI技术是程序员和工程师的专属特权。但如果我告诉你,文科生可能才是A

By Ne0inhk