Java根据坐标经纬度计算两点距离(5种方法)、校验经纬度是否在圆/多边形区域内的算法推荐
目录
前言
一、根据坐标经纬度计算两点距离(5种方法)
1.方法一
2.方法二
3.方法三
4.方法四
5.方法五
5.1 POM引入第三方依赖
5.2 代码
6.测试结果对比
二、校验经纬度是否在制定区域内
1.判断一个坐标是否在圆形区域内
2.判断一个坐标是否在一个多边形区域内
3.结果
总结
前言
在开发项目中会用到根据两点坐标计算之间距离的算法,网上也找了很多的方法,多多少少会存在一些问题的。以下方法已经在我本地运行通过,利用百度地图拾取坐标系统和百度地图测距工具进行测试,现将其整理了一下。以供大家参考:
一、根据坐标经纬度计算两点距离
1.方法一
package com.test.java.util;/*** 坐标位置相关util*/
public class PositionUtil {/*** 赤道半径(单位:米)*/private static final double EQUATOR_RADIUS = 6378137;/*** 方法一:(反余弦计算方式)** @param longitude1 第一个点的经度* @param latitude1 第一个点的纬度* @param longitude2 第二个点的经度* @param latitude2 第二个点的纬度* @return 返回距离,单位m*/public static double getDistance1(double longitude1, double latitude1, double longitude2, double latitude2) {// 纬度double lat1 = Math.toRadians(latitude1);double lat2 = Math.toRadians(latitude2);// 经度double lon1 = Math.toRadians(longitude1);double lon2 = Math.toRadians(longitude2);// 纬度之差double a = lat1 - lat2;// 经度之差double b = lon1 - lon2;// 计算两点距离的公式double s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) + Math.cos(lat1) * Math.cos(lat2) * Math.pow(Math.sin(b / 2), 2)));// 弧长乘赤道半径, 返回单位: 米s = s * EQUATOR_RADIUS;return s;}}
2.方法二
package com.test.java.util;/*** 坐标位置相关util*/
public class PositionUtil {/*** 地球平均半径(单位:米)*/private static final double EARTH_AVG_RADIUS = 6371000;/*** 方法二:(反余弦计算方式)** @param longitude1 第一点的经度* @param latitude1 第一点的纬度* @param longitude2 第二点的经度* @param latitude2 第二点的纬度* @return 返回的距离,单位m*/public static double getDistance3(double longitude1, double latitude1, double longitude2, double latitude2) {// 经纬度(角度)转弧度。弧度作为作参数,用以调用Math.cos和Math.sin// A经弧度double radiansAX = Math.toRadians(longitude1);// A纬弧度double radiansAY = Math.toRadians(latitude1);// B经弧度double radiansBX = Math.toRadians(longitude2);// B纬弧度double radiansBY = Math.toRadians(latitude2);// 公式中“cosβ1cosβ2cos(α1-α2)+sinβ1sinβ2”的部分,得到∠AOB的cos值double cos = Math.cos(radiansAY) * Math.cos(radiansBY) * Math.cos(radiansAX - radiansBX) + Math.sin(radiansAY) * Math.sin(radiansBY);// System.out.println("cos = " + cos); // 值域[-1,1]// 反余弦值double acos = Math.acos(cos);// System.out.println("acos = " + acos); // 值域[0,π]// System.out.println("∠AOB = " + Math.toDegrees(acos)); // 球心角 值域[0,180]// 最终结果return EARTH_AVG_RADIUS * acos;}}
3.方法三
基于谷歌地图的计算公式计算距离
package com.test.java.util;/*** 坐标位置相关util*/
public class PositionUtil {/*** 地球平均半径(单位:米)*/private static final double EARTH_AVG_RADIUS = 6371000;/*** 经纬度转化为弧度(rad)** @param d 经度/纬度*/private static double rad(double d) {return d * Math.PI / 180.0;}/*** 方法三:(基于googleMap中的算法得到两经纬度之间的距离,计算精度与谷歌地图的距离精度差不多。)** @param longitude1 第一点的经度* @param latitude1 第一点的纬度* @param longitude2 第二点的经度* @param latitude2 第二点的纬度* @return 返回的距离,单位m*/public static double getDistance2(double longitude1, double latitude1, double longitude2, double latitude2) {double radLat1 = rad(latitude1);double radLat2 = rad(latitude2);double a = radLat1 - radLat2;double b = rad(longitude1) - rad(longitude2);double s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) + Math.cos(radLat1) * Math.cos(radLat2) * Math.pow(Math.sin(b / 2), 2)));s = s * EARTH_AVG_RADIUS;s = Math.round(s * 10000d) / 10000d;return s;}}
4.方法四
基于高德地图
package com.test.java.util;/*** 计算距离*/
public class PositionUtil {/*** 方法四:(高德地图计算方法)** @param longitude1 第一点的经度* @param latitude1 第一点的纬度* @param longitude2 第二点的经度* @param latitude2 第二点的纬度* @return 返回的距离,单位m*/public static Double getDistance4(double longitude1, double latitude1, double longitude2, double latitude2) {if (longitude1 == 0 || latitude1 == 0 || latitude2 == 0 || longitude2 == 0) {return -1.0;}longitude1 *= 0.01745329251994329;latitude1 *= 0.01745329251994329;longitude2 *= 0.01745329251994329;latitude2 *= 0.01745329251994329;double var1 = Math.sin(longitude1);double var2 = Math.sin(latitude1);double var3 = Math.cos(longitude1);double var4 = Math.cos(latitude1);double var5 = Math.sin(longitude2);double var6 = Math.sin(latitude2);double var7 = Math.cos(longitude2);double var8 = Math.cos(latitude2);double[] var10 = new double[3];double[] var20 = new double[3];var10[0] = var4 * var3;var10[1] = var4 * var1;var10[2] = var2;var20[0] = var8 * var7;var20[1] = var8 * var5;var20[2] = var6;return Math.asin(Math.sqrt((var10[0] - var20[0]) * (var10[0] - var20[0]) + (var10[1] - var20[1]) * (var10[1] - var20[1]) + (var10[2] - var20[2]) * (var10[2] - var20[2])) / 2.0) * 1.27420015798544E7;// 结果四舍五入 保留2位小数//return new BigDecimal(distance).setScale(2, RoundingMode.HALF_UP).doubleValue();}}
5.方法五
该方法是利用第三方jar包计算
5.1 POM引入第三方依赖
<!--用于计算两点之间的距离--><dependency><groupId>org.gavaghan</groupId><artifactId>geodesy</artifactId><version>1.1.3</version></dependency>
5.2 代码
package com.test.java.util;import org.gavaghan.geodesy.Ellipsoid;
import org.gavaghan.geodesy.GeodeticCalculator;
import org.gavaghan.geodesy.GeodeticCurve;
import org.gavaghan.geodesy.GlobalCoordinates;/*** 坐标位置相关util*/
public class PositionUtil {/*** 方法四:(利用第三方jar包计算)* 计算两个经纬度之间的距离** @param longitude1 第一点的经度* @param latitude1 第一点的纬度* @param longitude2 第二点的经度* @param latitude2 第二点的纬度* @param ellipsoid 计算方式* @return 返回的距离,单位m*/public static double getDistance4(double longitude1, double latitude1, double longitude2, double latitude2, Ellipsoid ellipsoid) {// 创建GeodeticCalculator,调用计算方法,传入坐标系、经纬度用于计算距离GlobalCoordinates firstPoint = new GlobalCoordinates(longitude1, latitude1);GlobalCoordinates secondPoint = new GlobalCoordinates(longitude2, latitude2);GeodeticCurve geoCurve = new GeodeticCalculator().calculateGeodeticCurve(ellipsoid, firstPoint, secondPoint);return geoCurve.getEllipsoidalDistance();}}
6.测试结果对比
这里我直接一起调用者4种方法,这样看结果也更加直观些。
public static void main(String[] args) {double longitude1 = 117.344733;double latitude1 = 31.912334;double longitude2 = 117.272186;double latitude2 = 31.79422;double distance1 = PositionUtil.getDistance1(longitude1, latitude1, longitude2, latitude2);double distance2 = PositionUtil.getDistance2(longitude1, latitude1, longitude2, latitude2);double distance3 = PositionUtil.getDistance3(longitude1, latitude1, longitude2, latitude2);double distance4 = PositionUtil.getDistance4(longitude1, latitude1, longitude2, latitude2);double distance5 = PositionUtil.getDistance4(longitude1, latitude1, longitude2, latitude2, Ellipsoid.Sphere);double distance6 = PositionUtil.getDistance4(longitude1, latitude1, longitude2, latitude2, Ellipsoid.WGS84);System.out.println("方法1算出的距离:" + distance1);System.out.println("方法2算出的距离:" + distance2);System.out.println("方法3算出的距离:" + distance3);System.out.println("方法4算出的距离:" + distance4);System.out.println("方法4-Sphere算出的距离:" + distance5);System.out.println("方法4-WGS84算出的距离:" + distance6);}

可以看出,前四个方法算出的距离相对较小。而且main方法中提供的测试数据也是我自身的真实数据,结合百度地图的测距工具,我个人推荐前四个方法,与实际的误差相对较小。
二、校验经纬度是否在制定区域内
怎么样判断一个坐标点在指定的区域内?其中区域又会分为:圆,多边形和不规则的多边形。
1.判断一个坐标是否在圆形区域内
计算这个坐标点和圆心之间的距离,然后跟圆的半径进行比较,如果比半径大,就不在圆形区域内,如果小于等于圆的半径,则该坐标点在圆形区域内。
package com.test.java.util;import org.apache.commons.lang3.StringUtils;/*** 计算距离*/
public class PositionUtil {/*** 赤道半径(单位:米)*/private static final double EQUATOR_RADIUS = 6378137;/*** 方法一:(反余弦计算方式)** @param longitude1 第一个点的经度* @param latitude1 第一个点的纬度* @param longitude2 第二个点的经度* @param latitude2 第二个点的纬度* @return 返回距离,单位m*/public static double getDistance1(double longitude1, double latitude1, double longitude2, double latitude2) {// 纬度double lat1 = Math.toRadians(latitude1);double lat2 = Math.toRadians(latitude2);// 经度double lon1 = Math.toRadians(longitude1);double lon2 = Math.toRadians(longitude2);// 纬度之差double a = lat1 - lat2;// 经度之差double b = lon1 - lon2;// 计算两点距离的公式double s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) + Math.cos(lat1) * Math.cos(lat2) * Math.pow(Math.sin(b / 2), 2)));// 弧长乘赤道半径, 返回单位: 米s = s * EQUATOR_RADIUS;return s;}/*** 判断坐标点是否在圆形区域内* 计算这个坐标点和圆心点之间的距离,然后跟圆的半径进行比较,如果比半径大,就不在圆形区域内,如果小于等于圆的半径,则该坐标点在圆形区域内** @param longitude1 第一点的经度* @param latitude1 第一点的纬度* @param longitude2 第二点的经度* @param latitude2 第二点的纬度* @param radius 圆形范围半径(单位:米)* @return true:不在区域内; false:在区域内*/public static boolean isInCircle(double longitude1, double latitude1, double longitude2, double latitude2, String radius) {if (StringUtils.isBlank(radius)) {throw new RuntimeException("请输入范围半径");}return getDistance1(longitude1, latitude1, longitude2, latitude2) > Double.parseDouble(radius);}}
2.判断一个坐标是否在一个多边形区域内
这里用到JAVA的一个类GeneralPath(由直线和二次和三次(B?zier)曲线构成的几何路径。 它可以包含多个子路径)使用这个类,结合传入的各顶点参数,画一个几何图形,并通过它自身的contains方法,判断该点是否在这个几何图形内。
package com.test.java.util;import org.apache.commons.lang3.StringUtils;import java.awt.geom.GeneralPath;
import java.awt.geom.Point2D;
import java.util.ArrayList;
import java.util.List;/*** 计算距离*/
public class PositionUtil {/*** 判断坐标点是否在多边形区域内** @param pointLon 要判断的点的经度* @param pointLat 要判断的点的纬度* @param lon 区域各顶点的经度数组* @param lat 区域各顶点的纬度数组* @return true:范围内; false:范围外*/public static boolean isInPolygon(double pointLon, double pointLat, double[] lon, double[] lat) {// 将要判断的横纵坐标组成一个点Point2D.Double point = new Point2D.Double(pointLon, pointLat);// 将区域各顶点的横纵坐标放到一个点集合里面List<Point2D.Double> pointList = new ArrayList<>();double polygonPointToX;double polygonPointToY;for (int i = 0; i < lon.length; i++) {polygonPointToX = lon[i];polygonPointToY = lat[i];Point2D.Double polygonPoint = new Point2D.Double(polygonPointToX, polygonPointToY);pointList.add(polygonPoint);}return check(point, pointList);}/*** 坐标点是否在多边形内** @param point 要判断的点的横纵坐标* @param polygon 组成的顶点坐标集合*/private static boolean check(Point2D.Double point, List<Point2D.Double> polygon) {GeneralPath generalPath = new GeneralPath();Point2D.Double first = polygon.get(0);// 通过移动到指定坐标(以双精度指定),将一个点添加到路径中generalPath.moveTo(first.x, first.y);polygon.remove(0);for (Point2D.Double d : polygon) {// 通过绘制一条从当前坐标到新指定坐标(以双精度指定)的直线,将一个点添加到路径中。generalPath.lineTo(d.x, d.y);}// 将几何多边形封闭generalPath.lineTo(first.x, first.y);generalPath.closePath();// 测试指定的 Point2D 是否在 Shape 的边界内。return generalPath.contains(point);}}
3.结果
public static void main(String[] args) {double distance1 = PositionUtil.getDistance1(longitude1, latitude1, longitude2, latitude2);System.out.println("坐标与圆心的距离:" + distance1);String radius1 = "10000";boolean inCircle1 = PositionUtil.isInCircle(longitude1, latitude1, longitude2, latitude2, radius1);System.out.println("校验坐标是否在圆形范围内:" + inCircle1);String radius = "15000";boolean inCircle2 = PositionUtil.isInCircle(longitude1, latitude1, longitude2, latitude2, radius);System.out.println("校验坐标是否在圆形范围内:" + inCircle2);double pointLon = 117.274984;double pointLat = 31.790718;// 坐标在多边形范围内的参数:double[] lon = {117.272559, 117.276224, 117.278649, 117.273924};double[] lat = {31.791247, 31.792812, 31.78982, 31.788539};// 坐标在多边形范围外的参数:double[] lon1 = {117.291001, 117.299705, 117.298035, 117.291216};double[] lat1 = {31.806576, 31.806814, 31.802319, 31.802196};boolean a = PositionUtil.isInPolygon(pointLon, pointLat, lon, lat);boolean b = PositionUtil.isInPolygon(pointLon, pointLat, lon1, lat1);System.out.println("校验坐标是否在多边形范围内:" + a);System.out.println("校验坐标是否在多边形范围内:" + b);}

总结
这样的计算方式得到的距离并非是真实的距离,可以说是逻辑距离(直线距离),但其距离也已经很准确。不过毕竟是通过逻辑计算得到的距离,若要求高准确性的距离信息的话,还是借助第三方的地图api接口获取比较合适。
如果这篇文章对您有所帮助,或者有所启发的话,求一键三连:点赞、评论、收藏➕关注,您的支持是我坚持写作最大的动力。
相关文章:
Java根据坐标经纬度计算两点距离(5种方法)、校验经纬度是否在圆/多边形区域内的算法推荐
目录 前言 一、根据坐标经纬度计算两点距离(5种方法) 1.方法一 2.方法二 3.方法三 4.方法四 5.方法五 5.1 POM引入第三方依赖 5.2 代码 6.测试结果对比 二、校验经纬度是否在制定区域内 1.判断一个坐标是否在圆形区域内 2.判断一个坐标是否…...
PIC单片机如何设计延时
PIC单片机如何设计延时 PIC单片机的延时基本有两种,一种是自己设计的delay()函数,另一种就是利用其自带的Time定时器。当然一般Time定时器的精度要高于自己设计delay()函数,Time定时器是单片机内部的硬件寄存器模块,而delay()函数是利用自加自减来实现延时,代码进行顺序执…...
FFmpeg常见命令行(二):FFmpeg转封装
前言 在Android音视频开发中,网上知识点过于零碎,自学起来难度非常大,不过音视频大牛Jhuster提出了《Android 音视频从入门到提高 - 任务列表》。本文是Android音视频任务列表的其中一个, 对应的要学习的内容是:如何使…...
全面升级:华为鸿蒙HarmonyOS4正式发布,玩趣个性化,小艺AI升级
8月4日新闻,今天下午,华为正式发布了最新版本的鸿蒙操作系统——HarmonyOS 4! 在华为发布会上,鸿蒙HarmonyOS迎来了一系列令人激动的功能升级。其中包括个性化空间、多种生产力工具以及增强的手机AI助手"小艺"。这次更…...
【python】使用Selenium和Chrome WebDriver来获取 【腾讯云 Cloud Studio 实战训练营】中的文章信息
文章目录 前言导入依赖库设置ChromeDriver的路径创建Chrome WebDriver对象打开网页找到结果元素创建一个空列表用于存储数据遍历结果元素并提取数据提取标题、作者、发布时间等信息判断是否为目标文章提取目标文章的描述、阅读数量、点赞数量、评论数量等信息将提取的数据存储为…...
使用Feign 的远程调用,把mysql数据导入es
要把数据库数据导入到elasticsearch中,包括下面几步: 1)将商品微服务中的分页查询商品接口定义为一个FeignClient,放到feign-api模块中 2)搜索服务编写一个测试业务,实现下面功能: 调用item-ser…...
Java课题笔记~ MyBatis接口开发(代理开发)
使用XML文件进行开发,在调用SqlSession进行操作时,需要指定MyBatis映射文件中的方法,这种调用方式过于烦琐。为解决此问题,MyBatis提供了接口开发的方式。 接口开发的目的: 解决原生方式中的硬编码 简化后期执行SQL …...
从数学到深度学习的学习资料及教程合集
诸神缄默不语-个人CSDN博文目录 目前仅收集免费内容,最多需要买本纸质书。 付费的如果有免费版本我也会收录。 链接如失效请联系我。 这个笔记主要是为我自己准备的,算是一个可公开的to do list(其实做不完的我也知道)ÿ…...
nn.CrossEntropyLoss()报错
RuntimeError: “nll_loss_forward_reduce_cuda_kernel_2d_index” not implemented for ‘Float’ Traceback (most recent call last): File "<string>", line 1, in <module> File "/home/zz/anaconda3/envs/torch1.11/lib/python3.7/site-pack…...
【BASH】回顾与知识点梳理(一)
【BASH】回顾与知识点梳理 一 前言一. 认识与学习 BASH1.1 硬件、核心与 Shell1.2 为何要学文字接口的 shell?1.3 系统的合法 shell 与 /etc/shells 功能1.4 Bash shell 的功能1.5 查询指令是否为 Bash shell 的内建命令: type1.6 指令的下达与快速编辑按…...
AWS Amplify 部署node版本18报错修复
Amplify env:Amazon Linux:2 Build Error : Specified Node 18 but GLIBC_2.27 or GLIBC_2.28 not found on build 一、原因 报错原因是因为默认情况下,AWS Amplify 使用 Amazon Linux:2 作为其构建镜像,并自带 GLIBC 2.26。不过,…...
K8S添加yum源并安装kubectl/kubeadm/kubelet组件
1.安装kubectl/kubeadm/kubelet ##添加yum 源 cat > /etc/yum.repos.d/kubernetes.repo << EOF [kubernetes] nameKubernetes baseurlhttps://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64 enabled1 gpgcheck0 repo_gpgcheck0 gpgkeyhttps://mirr…...
kafka生产者指定ip
kafka生产者指定ip 最近工作中遇到一个问题,记录一下,需求中要求往kafka上推送信息。本来是个很简单的需求,但是踩了一个坑。 我通过spring boot集成了kafka写了一个生产者,客户那边给我三个节点的ip,然后我也没多想…...
python 封装sql 增删改查连接MySQL
select * from Teacher limit 10 连接字符串配置MysqlConfig.py class MysqlConfig:HOST 192.168.56.210PORT 3306USER rootPASSWORD 1qaz0987654321DBStudentDBCHARSET utf8封装增删改查MysqlConnection.py Author: tkhywang 2810248865qq.com Date: 2023-06-19 15:44:48 Las…...
Flink正常消费一段时间后,大量反压,看着像卡住了,但又没有报错。
文章目录 前言一、原因分析二、解决方案 前言 前面我也有提到,发现flink运行一段时间后,不再继续消费的问题。这个问题困扰了我非常久,一开始也很迷茫。又因为比较忙,所以一直没有时间能够去寻找答案,只是通过每天重启…...
软件测试需求分析的常用方法
软件测试需求分析时,应要求产品人员对需求进行讲解,并使用相对应的方法进行科学分析,否则无法保障软件测试的完整性和科学性,从而造成在项目中后期Bug频出、风险增大等问题。 而常用的测试需求分析的方法: 1、功能分解…...
数据结构10 -查找_树表查找
创建二叉搜索树 二叉搜索树 二叉搜索树是有数值的了,二叉搜索树是一个有序树。 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它…...
第126天:内网安全-隧道技术SSHDNSICMPSMB上线通讯LinuxMac
知识点 #知识点: 1、入站规则不出网上线方案 2、出站规则不出网上线方案 3、隧道技术-SMB&ICMP&DNS&SSH 4、控制上线-Linux&Mac&IOS&Android-连接方向:正向&反向(基础课程有讲过) -内网穿透…...
开发一个饲料商城小程序需要多少钱
随着宠物行业的蓬勃发展,饲料商城小程序作为一个重要的销售渠道,吸引了越来越多的投资者。那么,开发一套饲料商城小程序需要多少钱呢?本文将为您详细解答。 首先,开发一套饲料商城小程序的价格受到多个因素的影响&…...
Emacs之set-face-attribute与font-lock-add-keywords用法区别(一百二十八)
简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…...
Python爬虫实战:研究MechanicalSoup库相关技术
一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...
web vue 项目 Docker化部署
Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段: 构建阶段(Build Stage):…...
阿里云ACP云计算备考笔记 (5)——弹性伸缩
目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...
边缘计算医疗风险自查APP开发方案
核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...
在rocky linux 9.5上在线安装 docker
前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...
2.Vue编写一个app
1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...
dify打造数据可视化图表
一、概述 在日常工作和学习中,我们经常需要和数据打交道。无论是分析报告、项目展示,还是简单的数据洞察,一个清晰直观的图表,往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server,由蚂蚁集团 AntV 团队…...
嵌入式学习之系统编程(九)OSI模型、TCP/IP模型、UDP协议网络相关编程(6.3)
目录 一、网络编程--OSI模型 二、网络编程--TCP/IP模型 三、网络接口 四、UDP网络相关编程及主要函数 编辑编辑 UDP的特征 socke函数 bind函数 recvfrom函数(接收函数) sendto函数(发送函数) 五、网络编程之 UDP 用…...
JDK 17 序列化是怎么回事
如何序列化?其实很简单,就是根据每个类型,用工厂类调用。逐个完成。 没什么漂亮的代码,只有有效、稳定的代码。 代码中调用toJson toJson 代码 mapper.writeValueAsString ObjectMapper DefaultSerializerProvider 一堆实…...
SQL注入篇-sqlmap的配置和使用
在之前的皮卡丘靶场第五期SQL注入的内容中我们谈到了sqlmap,但是由于很多朋友看不了解命令行格式,所以是纯手动获取数据库信息的 接下来我们就用sqlmap来进行皮卡丘靶场的sql注入学习,链接:https://wwhc.lanzoue.com/ifJY32ybh6vc…...
