flutter高德地图大头针
1、效果图

2、pub get
#地图定位
amap_flutter_map: ^3.0.0
amap_flutter_location: ^3.0.0
3、上代码
import 'dart:async';
import 'dart:io';import 'package:amap_flutter_location/amap_flutter_location.dart';
import 'package:amap_flutter_location/amap_location_option.dart';
import 'package:fate_blind_box/theme/theme_color.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';import 'package:amap_flutter_map/amap_flutter_map.dart';
import 'package:amap_flutter_base/amap_flutter_base.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:url_launcher/url_launcher.dart';
import '../../../utils/loading.dart';
import '../../Home/map/canteen.dart';class AMapPage extends StatelessWidget {final String title;final String iosKey;final String androidKey;final LatLng? latLng;final void Function(AMapController controller)? onMapCreated;AMapPage(this.title,this.iosKey, this.androidKey, {Key? key, this.latLng, this.onMapCreated}) : super(key: key);// 添加线段//lines 结构 [LatLng(26.642386, 106.65195799999998), LatLng(26.641542, 106.65062999999998), LatLng(26.641402, 106.65063499999997), LatLng(26.641411, 106.65086300000002), LatLng(26.641334, 106.65067099999999), LatLng(26.641374, 106.650688), LatLng(26.641567, 106.65078499999998), LatLng(26.641656, 106.651207), LatLng(26.641708, 106.651408), LatLng(26.641413, 106.65066100000001), LatLng(26.641484, 106.65012100000001)]//定义@overrideWidget build(BuildContext context) {List<Marker> markers = [Marker(position: const LatLng(39.909215, 116.41005),icon:BitmapDescriptor.fromIconPath("images/ic_mapIcon1.png"),infoWindow: const InfoWindow(title: '东城区',snippet: '',),onTap: (marker){},),Marker(position: const LatLng(39.9305, 116.36003),icon:BitmapDescriptor.fromIconPath("images/ic_mapIcon2.png"),infoWindow: const InfoWindow(title: '西城区',snippet: '',),onTap: (marker){},),Marker(position: const LatLng(39.9484, 116.48548),icon:BitmapDescriptor.fromIconPath("images/ic_mapIcon3.png"),infoWindow: const InfoWindow(title: '朝阳区',snippet: '',),onTap: (marker){},),Marker(position: const LatLng(39.8585, 116.28625),icon:BitmapDescriptor.fromIconPath("images/ic_mapIcon4.png"),infoWindow: const InfoWindow(title: '丰台区',snippet: '',),onTap: (marker){},),Marker(position: const LatLng(39.90564, 116.2229),icon:BitmapDescriptor.fromIconPath("images/ic_mapIcon5.png"),infoWindow: const InfoWindow(title: '石景山区',snippet: '',),onTap: (marker){},),Marker(position: const LatLng(39.95931, 116.29812),icon:BitmapDescriptor.fromIconPath("images/ic_mapIcon1.png"),infoWindow: const InfoWindow(title: '海淀区',snippet: '',),onTap: (marker){},),Marker(position: const LatLng(39.94043, 116.10137),icon:BitmapDescriptor.fromIconPath("images/ic_mapIcon2.png"),infoWindow: const InfoWindow(title: '门头沟区',snippet: '',),onTap: (marker){},),Marker(position: const LatLng(39.74786, 116.14257),icon:BitmapDescriptor.fromIconPath("images/ic_mapIcon3.png"),infoWindow: const InfoWindow(title: '房山区',snippet: '',),onTap: (marker){},),Marker(position: const LatLng(39.90564, 116.2229),icon:BitmapDescriptor.fromIconPath("images/ic_mapIcon4.png"),infoWindow: const InfoWindow(title: '石景山区',snippet: '',),onTap: (marker){},),Marker(position: const LatLng(116.65716, 39.90966),icon:BitmapDescriptor.fromIconPath("images/ic_mapIcon5.png"),infoWindow: const InfoWindow(title: '通州区',snippet: '',),onTap: (marker){},),Marker(position: const LatLng(116.65417, 40.1302),icon:BitmapDescriptor.fromIconPath("images/ic_mapIcon1.png"),infoWindow: const InfoWindow(title: '顺义区',snippet: '',),onTap: (marker){},),Marker(position: const LatLng(116.2312, 40.22072),icon:BitmapDescriptor.fromIconPath("images/ic_mapIcon3.png"),infoWindow: const InfoWindow(title: '昌平区',snippet: '',),onTap: (marker){},),Marker(position: const LatLng(116.34149, 39.72668),icon:BitmapDescriptor.fromIconPath("images/ic_mapIcon4.png"),infoWindow: const InfoWindow(title: '大兴区',snippet: '',),onTap: (marker){},),Marker(position: const LatLng(116.63168, 40.31602),icon:BitmapDescriptor.fromIconPath("images/ic_mapIcon5.png"),infoWindow: const InfoWindow(title: '怀柔区',snippet: '',),onTap: (marker){},),Marker(position: const LatLng(117.12133, 40.14056),icon:BitmapDescriptor.fromIconPath("images/ic_mapIcon1.png"),infoWindow: const InfoWindow(title: '平谷区',snippet: '',),onTap: (marker){},),Marker(position: const LatLng(116.84295, 40.37618),icon:BitmapDescriptor.fromIconPath("images/ic_mapIcon2.png"),infoWindow: const InfoWindow(title: '密云县',snippet: '',),onTap: (marker){},),Marker(position: const LatLng(115.97494, 40.45672),icon:BitmapDescriptor.fromIconPath("images/ic_mapIcon3.png"),infoWindow: const InfoWindow(title: '延庆县',snippet: '',),onTap: (marker){},),];final size = MediaQuery.of(context).size;CameraPosition kInitialPosition = CameraPosition(target: latLng ?? const LatLng(39.909187, 116.397451),zoom: 10.0,);return Scaffold(appBar: title.isNotEmpty ? AppBar(title: Text(title,style: const TextStyle(color: Colors.black, fontSize: 18, fontWeight: FontWeight.bold),),// title:title,elevation: 0,backgroundColor: Colors.white,) :null,backgroundColor: ThemeColor.sendMsgColor,body: AMapWidget(initialCameraPosition: kInitialPosition,buildingsEnabled: false,onMapCreated: onCreated,privacyStatement: const AMapPrivacyStatement(hasShow: true, hasAgree: true, hasContains: true),apiKey: AMapApiKey(iosKey: iosKey,androidKey: androidKey,),markers:Set<Marker>.of(markers),// Set<marker>.of(markers.values),onTap: (marker){},onPoiTouched: (marker){print('object');},),);}/// 高德地图static Future<bool> gotoGaoDeMap(keywords,longitude, latitude) async {var url = '${Platform.isAndroid ? 'android' : 'ios'}amap://navi?sourceApplication=amap&lat=$latitude&lon=$longitude&dev=0&style=2';bool canLaunchUrl = await canLaunch(url);if (!canLaunchUrl) {toast('未检测到高德地图~');return false;}await launch(url);return true;}/// 腾讯地图static Future<bool> gotoTencentMap(longitude, latitude) async {var url = 'qqmap://map/routeplan?type=drive&fromcoord=CurrentLocation&tocoord=$latitude,$longitude&referer=IXHBZ-QIZE4-ZQ6UP-DJYEO-HC2K2-EZBXJ';bool canLaunchUrl = await canLaunch(url);if (!canLaunchUrl) {toast('未检测到腾讯地图~');// ToastUtil.show('未检测到腾讯地图~');return false;}await launch(url);return canLaunchUrl;}void onCreated(AMapController controller) {AMapApprovalNumber.setApprovalNumber(controller);if (onMapCreated != null) onMapCreated!(controller);}}/// 获取审图号
/// 这里设计的很奇怪,当地图创建后才知道这个号码,但是这个号码不一定要显示在地图之上,却一定要显示在app之内,主要是和上架后的合规有关
class AMapApprovalNumber {static String? mapContentApprovalNumber;static String? satelliteImageApprovalNumber;static Function(String? mapContentApprovalNumber, String? satelliteImageApprovalNumber)? _listener;static void addListener(Function(String? mapContentApprovalNumber, String? satelliteImageApprovalNumber) run) {_listener = run;}static void setApprovalNumber(AMapController? mapController) async {//普通地图审图号mapContentApprovalNumber = await mapController?.getMapContentApprovalNumber();//卫星地图审图号satelliteImageApprovalNumber = await mapController?.getSatelliteImageApprovalNumber();if (kDebugMode) {print('地图审图号(普通地图): $mapContentApprovalNumber');print('地图审图号(卫星地图): $satelliteImageApprovalNumber');}if (_listener != null) _listener!(mapContentApprovalNumber, satelliteImageApprovalNumber);}
}///需要在程序启动时向用户展示隐私政策等
///高德地图的定位插件,可以进行连续定位,返回当前位置的经纬度以及转译过的位置信息
mixin AMapLocationStateMixin<WIDGET extends StatefulWidget> on State<WIDGET> {String get title;String get iosKey;String get androidKey;/// 是否拥有定位权限bool get hasLocationPermission => _hasLocationPermission;///获取到的定位信息Map<String, Object> get locationResult => _locationResult ?? {};///整理过的数据LocationInfo get locationInfo => LocationInfo(locationResult);///开始定位void startLocation() {///开始定位之前设置定位参数_setLocationOption();_locationPlugin.startLocation();}///停止定位void stopLocation() {_locationPlugin.stopLocation();}Map<String, Object>? _locationResult;StreamSubscription<Map<String, Object>>? _locationListener;final AMapFlutterLocation _locationPlugin = AMapFlutterLocation();// final List<LatLng> _traackPath = [];late AMapController _mapController;@overridevoid initState() {super.initState();setPath();AMapFlutterLocation.updatePrivacyShow(true, true);AMapFlutterLocation.updatePrivacyAgree(true);/// 动态申请定位权限_requestLocationPermission();AMapFlutterLocation.setApiKey(androidKey, iosKey);///iOS 获取native精度类型if (Platform.isIOS) {_requestAccuracyAuthorization();}///注册定位结果监听_locationListener = _locationPlugin.onLocationChanged().listen((Map<String, Object> result) {setState(() {_locationResult = result;});});}// AMapController _mapController;Map mapMakerListMap = <dynamic, Marker>{};Map mapPolylineListMap = <dynamic, Polyline>{};final List<LatLng> _trackPath = [];late final List trackList;late final List<LatLng> pointList;late final LatLng center;late final double zoom;// 设置轨迹路径setPath() {if (trackList.isNotEmpty) {for (var item in trackList) {if (item is Map<String, dynamic>) {LatLng? latLng = LatLng.fromJson(item);if (latLng != null) {_trackPath.add(latLng);}}if (item is List && item.length == 2) {LatLng latLng = LatLng(item[0], item[1]);_trackPath.add(latLng);}}}mapClean();}mapClean() async {mapMakerListMap.clear();mapPolylineListMap.clear();setState(() => null);}@overridevoid dispose() {super.dispose();///移除定位监听if (null != _locationListener) {_locationListener?.cancel();}///销毁定位_locationPlugin.destroy();}///设置定位参数void _setLocationOption() {AMapLocationOption locationOption = AMapLocationOption();///是否单次定位locationOption.onceLocation = false;///是否需要返回逆地理信息locationOption.needAddress = true;///逆地理信息的语言类型locationOption.geoLanguage = GeoLanguage.DEFAULT;locationOption.desiredLocationAccuracyAuthorizationMode = AMapLocationAccuracyAuthorizationMode.ReduceAccuracy;locationOption.fullAccuracyPurposeKey = "AMapLocationScene";///设置Android端连续定位的定位间隔locationOption.locationInterval = 2000;///设置Android端的定位模式<br>///可选值:<br>///<li>[AMapLocationMode.Battery_Saving]</li>///<li>[AMapLocationMode.Device_Sensors]</li>///<li>[AMapLocationMode.Hight_Accuracy]</li>locationOption.locationMode = AMapLocationMode.Hight_Accuracy;///设置iOS端的定位最小更新距离<br>locationOption.distanceFilter = -1;///设置iOS端期望的定位精度/// 可选值:<br>/// <li>[DesiredAccuracy.Best] 最高精度</li>/// <li>[DesiredAccuracy.BestForNavigation] 适用于导航场景的高精度 </li>/// <li>[DesiredAccuracy.NearestTenMeters] 10米 </li>/// <li>[DesiredAccuracy.Kilometer] 1000米</li>/// <li>[DesiredAccuracy.ThreeKilometers] 3000米</li>locationOption.desiredAccuracy = DesiredAccuracy.Best;///设置iOS端是否允许系统暂停定位locationOption.pausesLocationUpdatesAutomatically = false;///将定位参数设置给定位插件_locationPlugin.setLocationOption(locationOption);}///获取iOS native的accuracyAuthorization类型Future<AMapAccuracyAuthorization> _requestAccuracyAuthorization() async {AMapAccuracyAuthorization currentAccuracyAuthorization = await _locationPlugin.getSystemAccuracyAuthorization();if (kDebugMode) {if (currentAccuracyAuthorization == AMapAccuracyAuthorization.AMapAccuracyAuthorizationFullAccuracy) {print("精确定位类型");} else if (currentAccuracyAuthorization == AMapAccuracyAuthorization.AMapAccuracyAuthorizationReducedAccuracy) {print("模糊定位类型");} else {print("未知定位类型");}}return currentAccuracyAuthorization;}bool _hasLocationPermission = false;/// 申请定位权限Future<void> _requestLocationPermission() async {//获取当前的权限var status = await Permission.location.status;if (status == PermissionStatus.granted) {//已经授权_hasLocationPermission = true;} else {//未授权则发起一次申请status = await Permission.location.request();if (status == PermissionStatus.granted) {_hasLocationPermission = true;} else {_hasLocationPermission = false;}}if (kDebugMode) {if (_hasLocationPermission) {print("定位权限申请通过");} else {print("定位权限申请不通过");}}}
}class LocationInfo {//TODO:应当再此类对信息做转换,明确数据类型String? locTime;String? province;String? callbackTime;String? district;double? speed;double? latitude;double? longitude;String? country;String? city;String? cityCode;String? street;String? streetNumber;String? address;String? description;double? bearing;double? accuracy;String? adCode;double? altitude;int? locationType;LocationInfo(Map<String, Object> locationResult) {locTime = locationResult["locTime"] as String;province = locationResult["province"] as String;callbackTime = locationResult["callbackTime"] as String;district = locationResult["district"] as String;speed = locationResult["speed"] as double;latitude = double.parse(locationResult["latitude"] as String);longitude = double.parse(locationResult["longitude"] as String);country = locationResult["country"] as String;city = locationResult["city"] as String;print(city);cityCode = locationResult["cityCode"] as String;street = locationResult["street"] as String;streetNumber = locationResult["streetNumber"] as String;address = locationResult["address"] as String;description = locationResult["description"] as String;bearing = locationResult["bearing"] as double;accuracy = locationResult["accuracy"] as double;adCode = locationResult["adCode"] as String;altitude = locationResult["altitude"] as double;locationType = locationResult["locationType"] as int;}}
相关文章:
flutter高德地图大头针
1、效果图 2、pub get #地图定位 amap_flutter_map: ^3.0.0 amap_flutter_location: ^3.0.0 3、上代码 import dart:async; import dart:io;import package:amap_flutter_location/amap_flutter_location.dart; import package:amap_flutter_location/amap_location_option…...
【线性代数】矩阵求导的本质与分子布局、分母布局的本质(矩阵求导——本质篇)
矩阵求导的本质与分子布局、分母布局的本质(矩阵求导——本质篇) 说在前面一. 函数与标量、向量、矩阵二. 矩阵求导的本质三. 矩阵求导结果的布局四. 分子布局、分母布局的本质五. 向量变元的实值标量函数 说在前面 我将严谨地说明矩阵求导的本质与分子布…...
快速了解状态管理库Pinia及其使用方法
目录 1.pinia是什么 2.为什么要使用pinia 3.pinia的优点 4.pinia在项目中使用 ①创建一个使用pinia的Vue3项目 ②在页面使用store 1.pinia是什么 Pinia 起源于一次探索 Vuex 下一个迭代的实验,如果你学过Vue2,那么你一定使用过Vuex。Vuex在Vue2中主…...
scratch绘制同心圆 2023年5月中国电子学会图形化编程 少儿编程 scratch编程等级考试四级真题和答案解析
目录 scratch绘制同心圆 一、题目要求 1、准备工作 2、功能实现 二、案例分析 <...
【LeetCode】3. 无重复字符的最长子串
3. 无重复字符的最长子串(中等) 方法:滑动窗口 哈希表 思路 这道题主要用到思路是:滑动窗口 什么是滑动窗口? 其实就是一个队列,比如例题中的 abcabcbb,进入这个队列(窗口)为 ab…...
苹果macOS 14开发者预览版Beta 7发布 新增超过100款视频壁纸和屏保
8 月 31 日,苹果向 Mac 电脑用户推送了 macOS 14 开发者预览版 Beta 7 更新(内部版本号:23A5337a),本次更新距离上次发布隔了 8 天。 苹果发布 Beta 7 更新的同时,还发布了第 6 个公测版,正式版…...
Redis 7 第五讲 事务、管道、发布订阅 过渡篇
事务 理论 可以一次执行多个命令,本质是一组命令的集合。一个事务中的所有命令都会序列化,按顺序地串行化执行而不会被其它命令插入,不许加塞 一个队列中,一次性、顺序性、排他性的执行一系列命令 Redis事务 VS 关系型数据库事务…...
[SpringBoot3]视图技术Thymeleaf
七、视图技术Thymeleaf Thymeleaf是一个表现层的模板引擎,一般被使用在Web环境中,它可以处理HTML、XML、JS等文档,简单来说,它可以将JSP作为Java Web应用的表现层,有能力展示与处理数据。这样,同一个模板文…...
wangluobiancheng
UDP send: receive: TCP...
大数据之hadoop入门
大数据概念 大数据:无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现李和流程优化能力的海量、高增长率和多样化的信息资产。 大的概念是相对来说的:目前来说࿰…...
浅谈多人游戏原理和简单实现。
😜作 者:是江迪呀✒️本文关键词:websocket、网络、原理、多人游戏☀️每日 一言:这世上有两种东西无法直视,一是太阳,二是人心! 一、我的游戏史 我最开始接触游戏要从一盘300游戏…...
活动预告 | 龙智、紫龙游戏与JFrog专家将出席龙智DevSecOps研讨会,探讨企业大规模开发创新
2023年9月8日(周五)下午13:30-19:45,龙智即将携手Atlassian与JFrog在上海共同举办主题为“大规模开发创新:如何提升企业级开发效率与质量”的线下研讨会。 在此次研讨会上,龙智高级咨询顾问、Atlassian认证专家叶燕秀…...
米每秒和千米每小时的换算
千米每时和米每秒怎么换算?1米/秒3600米/3600秒 米每秒和千米每小时的换算(米每秒和千米每小时的换算) 3.6千米/小时。 3.6千米/小时1米/秒米每秒和千米每小时的换算1 米/秒(米每秒)3.6 千米/时(千米每小时)。 1米每秒3600米每时3.6千米每时。因为1小时3600秒。小时是一个时…...
js实现图形验证码
图形验证码起什么作用: 可以防止:恶意破解密码、刷票、论坛灌水,有效防止某个黑客对某一个特定注册用户用特定程序暴力破解方式进行不断的登录尝试。 验证码一般是防止批量注册的,人眼看起来都费劲,何况是机器。不少…...
一句话画出动漫效果
链接: AI Comic Factory - a Hugging Face Space by jbilcke-hfDiscover amazing ML apps made by the communityhttps://huggingface.co/spaces/jbilcke-hf/ai-comic-factory 选择类型: Japanese 输入提示词: beauty and school love st…...
【openGauss2.1.0 TPC-C数据导入】
openGauss2.1.0 TPC-C数据导入 一、下载tpch测试数据二、导入测试数据 一、下载tpch测试数据 使用普通用户如omm登录服务器执行如下命令下载测试数据库:git clone https://gitee.com/xzp-blog/tpch-kit.git二、导入测试数据 进入dbgen目录下,生成makef…...
vue+elementui表格导出
htmlToExcel.js import FileSaver from file-saver import XLSX from xlsxconst htmlToExcel {getExcel(dom, title 默认标题) {var excelTitle titlevar wb XLSX.utils.table_to_book(document.querySelector(dom))/* 获取二进制字符串作为输出 */var wbout XLSX.write(w…...
掌握前端利器:JavaScript页面渲染高阶方法解析与实战
引言 前端开发中,页面渲染的速度和质量是衡量一个开发者水平的重要标准。而在众多的前端技术中,JavaScript以其强大的页面渲染能力独占鳌头。本文将深入探讨JavaScript在页面渲染中的应用,并通过实例展示其高阶方法,旨在帮助读者…...
面试题——网络IO模型
一、socket socket是在应用层和传输层中间的抽象层,它把传输层(TCP/UDP)的复杂操作抽象成一些简单的接口,供应用层调用实现进程在网络中的通信。Socket起源于UNIX,在Unix一切皆文件的思想下,进程间通信就被…...
【JUC基础】JUC入门基础(二)
目录 异步回调JMM 理解对 volatile 的理解1、保证可见性2、不保证原子性3、禁止指令重排 对 JMM 的理解 详解单例模式饿汉式懒汉式DCL懒汉式:双重检测锁模式的懒汉式单例静态内部类实现单例通过反射破坏单例,修改后的DCL饿汉式枚举实现单例防止反射破坏 …...
python如何将word的doc另存为docx
将 DOCX 文件另存为 DOCX 格式(Python 实现) 在 Python 中,你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是,.doc 是旧的 Word 格式,而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...
[Java恶补day16] 238.除自身以外数组的乘积
给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O(n) 时间复杂度…...
pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)
目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关࿰…...
短视频矩阵系统文案创作功能开发实践,定制化开发
在短视频行业迅猛发展的当下,企业和个人创作者为了扩大影响力、提升传播效果,纷纷采用短视频矩阵运营策略,同时管理多个平台、多个账号的内容发布。然而,频繁的文案创作需求让运营者疲于应对,如何高效产出高质量文案成…...
iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈
在日常iOS开发过程中,性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期,开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发,但背后往往隐藏着系统资源调度不当…...
【无标题】路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论
路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论 一、传统路径模型的根本缺陷 在经典正方形路径问题中(图1): mermaid graph LR A((A)) --- B((B)) B --- C((C)) C --- D((D)) D --- A A -.- C[无直接路径] B -…...
多模态图像修复系统:基于深度学习的图片修复实现
多模态图像修复系统:基于深度学习的图片修复实现 1. 系统概述 本系统使用多模态大模型(Stable Diffusion Inpainting)实现图像修复功能,结合文本描述和图片输入,对指定区域进行内容修复。系统包含完整的数据处理、模型训练、推理部署流程。 import torch import numpy …...
机器学习的数学基础:线性模型
线性模型 线性模型的基本形式为: f ( x ) ω T x b f\left(\boldsymbol{x}\right)\boldsymbol{\omega}^\text{T}\boldsymbol{x}b f(x)ωTxb 回归问题 利用最小二乘法,得到 ω \boldsymbol{\omega} ω和 b b b的参数估计$ \boldsymbol{\hat{\omega}}…...
python读取SQLite表个并生成pdf文件
代码用于创建含50列的SQLite数据库并插入500行随机浮点数据,随后读取数据,通过ReportLab生成横向PDF表格,包含格式化(两位小数)及表头、网格线等美观样式。 # 导入所需库 import sqlite3 # 用于操作…...
20250609在荣品的PRO-RK3566开发板的Android13下解决串口可以执行命令但是脚本执行命令异常的问题
20250609在荣品的PRO-RK3566开发板的Android13下解决串口可以执行命令但是脚本执行命令异常的问题 2025/6/9 20:54 缘起,为了跨网段推流,千辛万苦配置好了网络参数。 但是命令iptables -t filter -F tetherctrl_FORWARD可以在调试串口/DEBUG口正确执行。…...
