当前位置: 首页 > news >正文

基于Java和PostGIS的AOI面数据球面面积计算实践

目录

前言

一、计算方法简介

二、球面面积计算

1、AOI数据转Polygon

2、Geotools面积计算

3、GeographicLib面积计算

4、PostGIS面积计算

三、结果分析

1、不同算法结果对比

2、与互联网AOI对比

3、与天地图测面对比

四、总结


前言

        在现代地理信息系统(GIS)中,AOI(Area of Interest)面数据的处理和分析是一个核心任务。AOI面数据通常用于表示地理区域,如城市、国家、自然保护区等。准确计算这些区域的面积对于城市规划、环境监测、资源管理等领域至关重要。然而,由于地球的曲率,传统的平面面积计算方法在处理大范围地理数据时会产生显著误差。在实际应用中,AOI面数据的球面面积计算可以应用于多种场景。例如,在城市规划中,准确计算城市区域的面积有助于评估城市扩展的潜力;在环境监测中,计算自然保护区的面积有助于评估生态系统的健康状况;在资源管理中,计算农田的面积有助于评估农业生产的潜力。因此,基于Java和PostGIS的AOI面数据球面面积计算具有广泛的应用前景。因此,球面面积计算成为解决这一问题的关键。

        在Java中实现球面面积计算时,可以使用JTS Topology Suite(JTS)库来处理空间数据。JTS提供了丰富的几何操作函数,支持点、线、面等空间数据类型的处理。通过JTS,可以方便地读取AOI面数据,并将其转换为球面坐标系。然后,可以应用球面三角剖分方法,计算每个球面三角形的面积,并累加得到总面积。PostGIS的ST_Area函数可以直接计算球面面积,但为了验证自定义算法的准确性,可以将Java计算的结果与PostGIS的结果进行对比。通过对比,可以发现两者之间的差异,并进一步优化自定义算法。

        本文详细讲解如何基于Java语言,分别使用Geotools、GeographicLib和PostGIS空间函数来分别计算对应的AOI数据的球面面积,为了验证计算结果。我们将采用天地图标绘、互联网查询公开数据的方式来验证空间数据的范围面积。天地图标绘由于采样的点趋向于简单,因此可能采集的精度可能有所损失。而使用互联网的数据则由于可能采集的面范围不一致,存在一定的误差。本例将说明三种不同的方式与实际结果的误差值。为大家对面状的球面面积计算有一个参考。

一、计算方法简介

        在实际应用中,AOI面数据通常以矢量数据的形式存储,如Shapefile、GeoJSON等。这些数据包含了地理区域的边界信息,通常由一系列经纬度坐标点组成。为了计算球面面积,需要将这些坐标点转换为球面坐标系,并应用球面几何公式进行计算。PostGIS提供了ST_Area函数,可以直接计算球面面积,但为了更深入地理解计算过程,可以通过Java实现自定义的球面面积计算算法。球面面积计算的核心在于将地理坐标转换为球面坐标系,并应用球面三角剖分方法。球面三角剖分将AOI面数据划分为多个球面三角形,然后计算每个三角形的面积并累加得到总面积。球面三角形的面积计算可以使用L'Huilier公式或球面余弦定理。这些公式考虑了地球的曲率,能够提供更准确的计算结果。

        为了确保球面面积计算的准确性,可以采用多种方法进行验证。例如,可以使用已知面积的地理区域进行测试,比较计算结果与已知面积的差异。此外,还可以使用不同的算法进行对比,如平面面积计算与球面面积计算的对比,以评估球面面积计算的必要性。需要说明的是,在面向GIS的应用当中,对于空间坐标系可以分为地理坐标系和投影坐标系。地理坐标系一般用经纬度标识,它的单位是度,因此直接进行面积计算得出的单位是平方度,是现实中不太好理解的。而投影坐标系是米制单位,通常符合实际的计算结果,如果数据已经是投影坐标,可以直接进行计算就可以得到平方米的面积。

二、球面面积计算

        本节将重点介绍在Java和PostGIS空间数据库中来分别进行球面面积计算的方法。计算之前,我们准备了6组对比的数据,这6组数据来自于高德地图中获取的AOI数据。后续我们将会对这六组数据来进行球面面积求解,在后续的对比中也会对这几组数据进行对比。

1、AOI数据转Polygon

        在高德地图中,AOI数据是一个收尾坐标连接起来的坐标字符串。因此我们需要对这串坐标字符进行解析,转换成我们的空间面数据,后续针对这类数据来进行面积求解。因此首先我们要将字符串的数据转换成Polygon,这里我们以Geotools为例,讲解如何把字符串数组转换成Polygon,核心代码如下:

/**
* - 将AOI字符串转换成Polygon对象
* @return
*/
public static Polygon convertAoi2Polygon(String aoistr) {String [] AOI_Str_Array = aoistr.split(";");// 获取GeometryFactory实例GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory(null);Coordinate[] coords = {};if( AOI_Str_Array.length > 0) {coords = new Coordinate[AOI_Str_Array.length];}//处理坐标for (int i = 0; i < AOI_Str_Array.length; i++) {String loc = AOI_Str_Array[i];String [] latlon = loc.split(",");double lng = Double.parseDouble(latlon[0]);double lat = Double.parseDouble(latlon[1]);//将高德坐标转换成WGS84坐标double [] gcj284 = CoordinateTransformUtil.gcj02towgs84(lng, lat);coords[i] = new Coordinate(gcj284[0], gcj284[1]);}LinearRing shell = geometryFactory.createLinearRing(coords);Polygon polygon = geometryFactory.createPolygon(shell, null);polygon.setSRID(4326);//设置4326的坐标return polygon;
}

2、Geotools面积计算

        这里介绍使用Geotools来实现简化的球面面积近似计算,当然这里的地球半径等使用的一个固定常数,6371008.8。首先需要在Maven中引入以下依赖:

<dependency><groupId>org.geotools</groupId><artifactId>gt-referencing</artifactId><version>28.2</version>
</dependency>

         然后进行球面面积的近似计算,核心方法如下:

// 简化的球面面积近似计算(实际项目需优化)
private static double approximateSphericalArea(Coordinate p1, Coordinate p2) {// 此处为示例逻辑,真实计算需使用积分或地理公式// 例如:使用 Haversine 公式计算梯形面积double R = 6371008.8; // 地球平均半径(米)double dLon = Math.toRadians(p2.x - p1.x);double lat1 = Math.toRadians(p1.y);double lat2 = Math.toRadians(p2.y);return 0.5 * R * R * dLon * (Math.sin(lat2) + Math.sin(lat1));
}

        最后定义一个使用 GeodeticCalculator 逐边计算多边形面积的方法,在这个方法的实现中,我们使用累加的方法来进行计算,核心方法如下:

/*** -使用 GeodeticCalculator 逐边计算多边形面积*/
public static double calculateGeodeticArea(Geometry geometry, CoordinateReferenceSystem crs) throws Exception {if (!(geometry instanceof Polygon)) {throw new IllegalArgumentException("仅支持 Polygon 类型");}Polygon polygon = (Polygon) geometry;Coordinate[] coords = polygon.getExteriorRing().getCoordinates();GeodeticCalculator calculator = new GeodeticCalculator(crs);double totalArea = 0.0;// 使用球面三角形累加算法(类似 JTS 原有逻辑)for (int i = 0; i < coords.length - 1; i++) {Coordinate p1 = coords[i];Coordinate p2 = coords[i + 1];calculator.setStartingGeographicPoint(p1.x, p1.y);calculator.setDestinationGeographicPoint(p2.x, p2.y);// 累加每个边的贡献面积(需自行实现积分逻辑,此处简化)// 实际应参考 JTS 原有算法或使用第三方库(如 GeographicLib)totalArea += approximateSphericalArea(p1, p2);}return Math.abs(totalArea); // 返回绝对值
}

3、GeographicLib面积计算

        如果觉得使用Geotools来计算面积比较繁琐,接下来我们使用一个简化的库,利用这个库可以更便捷的对一个面数据的面积进行求解。这个库就是:GeographicLib-Java。首先依然需要的Pom.xml中引用以下依赖:

<dependency><groupId>net.sf.geographiclib</groupId><artifactId>GeographicLib-Java</artifactId><version>1.52</version>
</dependency>

        计算球面面积的核心方法更加简单,如下所示:

public static double calculateExactGeodeticArea(Polygon polygon) {Geodesic geodesic = Geodesic.WGS84;PolygonArea areaCalc = new PolygonArea(geodesic, false);for (Coordinate coord : polygon.getExteriorRing().getCoordinates()) {areaCalc.AddPoint(coord.y, coord.x); // 注意经纬度顺序}PolygonResult result = areaCalc.Compute();return Math.abs(result.area); // 单位:平方米
}

4、PostGIS面积计算

        在空间数据库中进行球面面积的计算比较简单,为了求解平方米的单位,我们可以将数据转换成geograghy的类型来进行球面的计算,在使用空间面积函数st_area即可实现面积的求解,这里以某小学的空间面数据为例,讲解如何在PostGIS数据库中实现球面面积求解。具体可以体现为以下的SQL:

SELECTst_area ( ST_GeomFromText ( 'POLYGON ((112.87852 28.190856,112.879078 28.190562,112.879613 28.19024,112.880025 28.18993,112.880453 28.189525,112.880568 28.189433,112.880562 28.189324,112.880064 28.188912,112.879793 28.188709,112.879188 28.18857,112.878529 28.188726,112.87848 28.188768,112.878465 28.188882,112.87852 28.190856))', 4326 -- 指定 SRID) :: geography );

        在数据库终端运行以下的SQL以后可以得到以下的执行结果,其结果就是面积结果。

32860.61062525073

三、结果分析

        这里将统一对生成的结果进行一个简单的对比和分析。通过对比和说明,结合实际的情况,可以看到那种计算方法更加接近实际情况。

1、不同算法结果对比

        在应用程序中我们使用6组数据分别调用Geotools和GeographicLib-Java库,其中的一个小学我们还使用了PostGIS的空间函数直接求解的方式。调用代码如下:

public static void main(String[] args) throws NoSuchAuthorityCodeException, FactoryException, Exception {//计算梅溪湖的AOI 面积Polygon polygon = convertAoi2Polygon(MXH_AOI);System.out.println("梅溪湖的球面面积为:" + calculateExactGeodeticArea(polygon));System.out.println("m2 " + calculateGeodeticArea(polygon, CRS.decode("EPSG:4326")));System.out.println("*************************************************************");polygon = convertAoi2Polygon(MXQX_AOI);System.out.println("梅溪青秀的球面面积为:" + calculateExactGeodeticArea(polygon));System.out.println("m2 " + calculateGeodeticArea(polygon, CRS.decode("EPSG:4326")));System.out.println("*************************************************************");polygon = convertAoi2Polygon(YMGY_AOI);System.out.println("杨梅公园的球面面积为:" + calculateExactGeodeticArea(polygon));System.out.println("m2 " + calculateGeodeticArea(polygon, CRS.decode("EPSG:4326")));System.out.println("**************************************************************");polygon = convertAoi2Polygon(BBG_AOI);System.out.println("梅溪新天地的球面面积为:" + calculateExactGeodeticArea(polygon));System.out.println("m2 " + calculateGeodeticArea(polygon, CRS.decode("EPSG:4326")));System.out.println("************************************************************");polygon = convertAoi2Polygon(THL_AOI);System.out.println("桃花岭风景区的球面面积为:" + calculateExactGeodeticArea(polygon));System.out.println("m2 " + calculateGeodeticArea(polygon, CRS.decode("EPSG:4326")));System.out.println("*************************************************************");polygon = convertAoi2Polygon(YYSX_AOI);System.out.println("实验小学的球面面积为:" + calculateExactGeodeticArea(polygon));System.out.println("m2 " + calculateGeodeticArea(polygon, CRS.decode("EPSG:4326")));
}

        程序运行结果如下:

        这里把面积的结果整理成以下表格。请注意,在以下的表格中,面积的单位是平方米:

序号

AOI名称

GeographicLib

Geotools
1梅溪湖风景区3003365.93972519833007843.6566917896
2梅溪青秀33133.08818446487633182.49462517351
3杨梅公园20309.346586976220339.625071160495
4步步高梅溪新天地234694.91455752775235044.35333895683
5桃花岭风景区5551323.143812265559616.194570124
6岳麓区实验小学32884.2097526374332933.23007472232

        通过以上的表格可以看到,两种不同的计算方式的结果还是有一些差异,不过这些差异并不大。 

2、与互联网AOI对比

        以桃花岭公园为例,桃花岭景区位于湖南长沙岳麓区,是岳麓山风景名胜区的重要组成部分。桃花岭公园规划面积约4360亩。景区内包括洪寺庵水库、腊八寺遗址等重要景点。

        将4360亩换算成平方米,大约是3583333.33平方米, 实际上我们算出来的面积有5551323.14381226,当然我们通过高德AOI获取的数据与原始的面积可能存在一些出入,所以导致了在计算与互联网公式面积的一个差异,当然如果有更准去的数据,也可以在评论区留言修正。

3、与天地图测面对比

        在上面的小节中,可能出现实际的面积与计算的结果有较大的出入的问题,接下来我们以某小学等为例,使用天地图的测面积方法来实现面积的预估,看与实际的差距有多大,首先来看下天地图中的面积测算。该小学的面积大约是3.46公顷,合34500平方米。

         来看后台的计算的结果分别是:32884.20975263743(GeographicLib)和32933.23007472232(Geotools),再来看PostGIS中的计算结果是:32860.61062525073,可以看到对于该小学的面积计算,三者都是比较接近的。同时三者与实际的面积也相差不大。

四、总结

        以上就是本文的主要内容。通过实验的方式可以看到,使用PostGIS生成的面积最小,而GeographicLib其次,而使用Geotools的生成是最大的。当然,这与Geotools中的地球半径等客观因素油酸。总之,基于Java和PostGIS的AOI面数据球面面积计算是一个复杂但重要的任务。通过结合Java的编程能力和PostGIS的空间数据处理能力,可以构建一个高效、准确的球面面积计算系统。在实际应用中,需要考虑多种因素,如数据精度、投影方式、地球模型等,并通过多种方法进行验证,以确保计算结果的准确性。通过模块化设计和JDBC集成,可以提高系统的灵活性和可维护性,满足不同应用场景的需求。行文仓促,定有不足之处,欢迎各位朋友在评论区批评指正,不胜感激。

相关文章:

基于Java和PostGIS的AOI面数据球面面积计算实践

目录 前言 一、计算方法简介 二、球面面积计算 1、AOI数据转Polygon 2、Geotools面积计算 3、GeographicLib面积计算 4、PostGIS面积计算 三、结果分析 1、不同算法结果对比 2、与互联网AOI对比 3、与天地图测面对比 四、总结 前言 在现代地理信息系统&#xff08;G…...

新建一个reactnative 0.72.0的项目

npx react-native0.72.0 init ProjectName --version 0.72.0 下面是初始化&#xff0c;并且添加了对应路由的库依赖&#xff0c;Android项目能run起来的版本号 { "name": "ProjectName", "version": "0.0.1", "private&quo…...

计算机网络网络层(下)

一、互联的路由选择协议&#xff08;网络层控制层面内容&#xff09; &#xff08;一&#xff09;有关路由选择协议的几个概念 1.理想的路由算法 &#xff08;1&#xff09;理想路由算法应具备的特点&#xff1a;算法必须正确和完整的&#xff0c;算法在计算上应简单&#x…...

Visual studio 打包方法

1.扩展->搜索“”install“->下载 2.安装&#xff08;安装后重新启动visual studio&#xff09; 3.在已有的解决方案上右键 添加 ** 新建项目 4.在该模板下有三个文件夹 第一个文件夹&#xff08;Application Folder&#xff09;添加 你已有c#的releas 的程序exe 所在…...

ubuntu---100条常用命令

目录 一、文件与目录管理二、系统信息与管理三、用户与权限管理四、网络配置与管理五、软件包管理六、其他常用命令 在 Ubuntu 系统中&#xff0c;掌握常用命令能显著提升操作效率。以下是 100 条常用命令&#xff0c;涵盖文件管理、系统信息、用户权限、网络配置、软件包管理等…...

UI-TARS Desktop:用自然语言操控电脑,AI 重新定义人机交互

在人工智能技术飞速发展的今天,从文本生成到图像识别,AI 的能力边界不断被打破。而字节跳动近期开源的 UI-TARS Desktop,则将这一技术推向了更复杂的交互场景——通过自然语言直接控制计算机界面,实现了图形用户界面(GUI)的智能化自动化。这款工具不仅降低了操作门槛,更…...

Linux精确列出非法 UTF-8 字符的路径或文件名

Docker构建的时候报错:failed to solve: Internal: rpc error: code = Internal desc = grpc: error while marshaling: string field contains invalid UTF-8 1、创建一个test.sh文件 find . -print0 | while IFS= read -r -d file;...

ubuntu部署supabase

安装supabse https://supabase.com/docs/guides/local-development/cli/getting-started?queryGroupsplatform&platformlinux brew install supabase/tap/supabase supabase init supabase start需要使用brewuser进行安装&#xff1a; brew安装参考链接&#xff1a; ht…...

《Effective Python》第1章 Pythonic 思维总结——编写优雅、高效的 Python 代码

《Effective Python》第1章 Pythonic 思维总结——编写优雅、高效的 Python 代码 在编程的世界里&#xff0c;每个语言都有其独特的风格和最佳实践。对于 Python 而言&#xff0c;“Pythonic”已经成为描述遵循 Python 特定风格的代码的代名词。这种风格不仅让代码更易读、更简…...

线代第二章矩阵第八节逆矩阵、解矩阵方程

文章目录 逆矩阵定义推论可逆性质 解矩阵方程 逆矩阵 定义 设A为n阶方阵&#xff0c;若存在n阶方阵B,使ABBAE,那么A就是可逆阵&#xff0c; 只有方阵有资格讨论可逆还是不可逆 若A可逆&#xff0c;逆阵是唯一的 未必所有方阵都可逆&#xff01;&#xff01; 比方说&#…...

Java SE(12)——异常(Exception)

1.概念 在Java中&#xff0c;异常(Exception)是指程序在运行过程中发生的不正常情况 例如&#xff1a; 算数异常(ArithmeticException) 空指针异常(NullPointerException) 数组越界异常(ArrayIndexOutOfBoundsException) 根据上述的异常信息可以看出&#xff1a;每个具体的异…...

力扣算法---总结篇

5.13 数组总结 数组是存放在连续内存空间上的相同类型数据的集合。 数组可以方便的通过下标索引的方式获取到下标对应的数据。 正是因为数组在内存空间的地址是连续的&#xff0c;所以我们在删除或者增添元素的时候&#xff0c;就难免要移动其他元素的地址。 数组的元素是不…...

空指针检测方法

空指针检测有以下几种常见方法&#xff1a; 静态代码分析 工具检测 &#xff1a;利用专业的静态代码分析工具&#xff0c;如 国产的库博静态代码检测工具&#xff08;COBOT&#xff09;、Checkmarx、Fortify、PVS-Studio 等&#xff0c;这些工具可以在不实际运行程序的情况下…...

Kubernetes Horizontal Pod Autosscaler(HPA)核心机制解析

一、HPA设计目标 弹性伸缩&#xff1a;根据实时负载动态调整Pod副本&#xff0c;平衡资源利用率与服务可用性声明式管理&#xff1a;通过目标指标阈值定义扩缩容规则&#xff0c;而非手动干预多云兼容&#xff1a;无缝集成云原生监控体系&#xff0c;支持混合云场景 二、核心…...

现代化QML组件开发教程

现代化QML组件开发教程 目录 QML基础介绍QML项目结构基本组件详解自定义组件开发状态与过渡高级主题最佳实践 QML基础介绍 什么是QML QML (Qt Meta Language) 是一种声明式语言&#xff0c;专为用户界面设计而创建。它是Qt框架的一部分&#xff0c;让开发者能够创建流畅、…...

DeepBook 与 CEX 的不同

如果你曾经使用过像币安或 Coinbase 这样的中心化交易所&#xff08;CEX&#xff09;&#xff0c;你可能已经熟悉了订单簿系统 — — 这是一种撮合买卖双方进行交易的机制。而 DeepBook 是 Sui 上首个完全链上的中央限价订单簿。 那么&#xff0c;是什么让 DeepBook 如此独特&…...

《构建社交应用的安全结界:双框架对接审核API的底层逻辑与实践》

用户生成内容如潮水般涌来。从日常的生活分享&#xff0c;到激烈的观点碰撞&#xff0c;这些内容赋予社交应用活力&#xff0c;也带来管理难题。虚假信息、暴力言论、侵权内容等不良信息&#xff0c;如同潜藏的暗礁&#xff0c;威胁着社交平台的健康生态。内容审核机制&#xf…...

hashicorp vault机密管理系统的国产化替代:安当SMS凭据管理系统,量子安全赋能企业密钥管理

引言&#xff1a;国产化替代浪潮下的密钥管理新机遇 在数字化转型与信息安全自主可控的双重驱动下&#xff0c;企业级密钥管理市场正迎来前所未有的变革。传统海外解决方案如HashiCorp Vault虽功能强大&#xff0c;但在国产化适配、量子安全前瞻性布局等方面逐渐显现局限性。与…...

详解注意力机制

## 1. 引言 注意力机制&#xff08;Attention Mechanism&#xff09;是深度学习领域中的一项关键技术&#xff0c;最初源于人类视觉注意力的启发。在人类视觉系统中&#xff0c;我们能够快速识别图像中的重要区域&#xff0c;同时忽略不相关的部分。注意力机制将这种能力引入到…...

从 Vue3 回望 Vue2:响应式的内核革命

从 Vue3 回望 Vue2 02 | 响应式的内核革命&#xff1a;从 defineProperty 到 Proxy一、Vue2 的响应式系统&#xff1a;defineProperty 的极限边界1.1 基础实现机制1.2 Vue2 的典型痛点❌ 无法侦测新增属性❌ 无法拦截数组索引❌ 深层递归导致性能问题❌ 对象粒度低、不可统一代…...

[Java实战]Spring Boot 3构建 RESTful 风格服务(二十)

[Java实战]Spring Boot 3构建 RESTful 风格服务&#xff08;二十&#xff09; 一. 环境准备 openJDK 17&#xff1a;Spring Boot 3 要求 Java 17 及以上。Spring Boot 3.4.5&#xff1a;使用最新稳定版。Ehcache 3.10&#xff1a;支持 JSR-107 标准&#xff0c;兼容 Spring C…...

--openssl-legacy-provider is not allowed in NODE_OPTIONS 报错的处理方式

解决方案 Node.js 应用&#xff1a; 从 Node.js v17 开始&#xff0c;底层升级到 OpenSSL 3.0&#xff0c;可能导致旧代码报错&#xff08;如 ERR_OSSL_EVP_UNSUPPORTED&#xff09;。 通过以下命令启用旧算法支持&#xff1a; node --openssl-legacy-provider your_script.js…...

【MySQL】第三弹——表的CRUD进阶(一)数据库约束

文章目录 &#x1f680;数据库的约束<font color #FF0000 size3>约束类型:&#x1fa90;<font color #FF0000 size3>①.NOT NULL非空约束&#x1fa90;<font color #FF0000 size3>②.UNIQUE唯一性约束&#x1fa90;<font color #FF0000 size3>③.DEFAU…...

python通过curl访问deepseek的API调用案例

废话少说&#xff0c;开干&#xff01; API申请和充值 下面是deepeek的API网站 https://platform.deepseek.com/ 进去先注册&#xff0c;是不是手机账号密码都不重要&#xff0c;都一样&#xff0c;完事充值打米&#xff0c;主要是打米后左侧API Keys里面创建一个API Keys&am…...

哈希表:数据世界的超级索引

在数据的浩瀚宇宙中&#xff0c;哈希表就像是一座超级图书馆的索引系统&#xff0c;能够让我们瞬间找到所需的信息。作为 C 算法小白&#xff0c;今天我就带大家一起探索这座神奇的图书馆&#xff0c;揭开哈希表的神秘面纱。 什么是哈希表&#xff1f; 哈希表&#xff08;Has…...

RDMA网络通信技术、NCCL集合通讯(GPU)

在高性能计算&#xff08;HPC&#xff09;、人工智能训练和数据密集型场景中&#xff0c;RDMA&#xff08;远程直接内存访问&#xff09; 和 NCCL&#xff08;NVIDIA Collective Communications Library&#xff09;是两项关键技术&#xff0c;用于优化节点间数据传输效率和大规…...

无人机失联保护模块技术解析!

一、技术要点 1. 信号监测与状态判断 实时信号质量评估&#xff1a;通过监测信号强度&#xff08;RSSI&#xff09;、误码率、信道质量等参数&#xff0c;动态判断是否触发失联保护。 多源冗余设计&#xff1a;结合GPS、视觉定位&#xff08;如底部光学/红外传感器&#x…...

用自写的jQuery库+Ajax实现了省市联动

1. 省市联动&#xff1a;在网页上&#xff0c;选择对应的省份之后&#xff0c;动态的关联出该省份对应的市。选择对应的市之后&#xff0c;动态地关联出城市对应的区。 2. 设计数据库表 t_area &#xff08;区域表&#xff09; id(PK-自增) code name pcode ------------…...

Promise.all静态方法

由于是Promise类的静态方法 所以 使用类名.方法名() 的形式调用...

在Flutter上如何实现按钮的拖拽效果

1、使用 Draggable 和 DragTarget 配合一起使用 Draggable 定义可拖拽对象和拖动时&#xff0c;拖动对象的样子 DragTarget 定义拖拽后接收对象&#xff0c;可拿到Draggable携带的数据 import package:flutter/material.dart;class Test extends StatefulWidget {const Test({s…...

linux入门学习(介绍、常用命令、vim、shell)

文章目录 前言Linux介绍Linux内核版本Linux发行版本Linux的安装&#xff08;仅作参考&#xff09;Linux系统启动过程加载内核启动初始化进程init确定运行级别加载开机启动程序用户登录 Linux文件目录文件类型 Linux终端命令行格式查阅命令帮助信息tab键自动补全终端命令行中的常…...

archlinux中挂载macOS的硬盘

问&#xff1a; 你好&#xff0c;我如何在archlinux中挂载macOS的硬盘呢&#xff1f;/dev/sda4 5344161792 7813773311 2469611520 1.2T Apple HFS/HFS AI回答&#xff1a; 你好&#xff01;在 Arch Linux 中挂载 macOS 的 HFS 或 HFS 硬盘&#xff08;例如 /dev/sda4&#x…...

Java Web 应用安全响应头配置全解析:从单体到微服务网关的实践

背景&#xff1a;为什么安全响应头至关重要&#xff1f; 在 Web 安全领域&#xff0c;响应头&#xff08;Response Headers&#xff09;是防御 XSS、点击劫持、跨域数据泄露等攻击的第一道防线。通过合理配置响应头&#xff0c;可强制浏览器遵循安全策略&#xff0c;限制恶意行…...

Generative Diffusion Prior for Unified Image Restoration and Enhancement论文阅读

Generative Diffusion Prior for Unified Image Restoration and Enhancement 1. 论文的研究目标及实际意义1.1 研究目标1.2 实际问题与产业意义2. 论文的创新方法及公式解析2.1 核心思路2.2 关键公式与算法2.2.1 DDPM基础2.2.2 条件引导概率建模2.2.3 两种引导策略2.2.4 退化模…...

MongoDB 的主要优势和劣势是什么?适用于哪些场景?

MongoDB 的主要优势 (Advantages) 灵活的文档模型 (Flexible Document Model): 无需预定义模式 (Schemaless/Flexible Schema): 这是 MongoDB 最核心的优势之一。它存储 JSON 格式的文档&#xff0c;每个文档可以有不同的字段和结构。这使得在开发过程中修改数据结构非常容易&a…...

人脸识别备案:筑牢人脸信息 “安全墙”

人脸识别备案制度主要依据《人脸识别技术应用安全管理办法》建立&#xff0c;人脸识别技术广泛应用于安防、金融、门禁、交通等领域&#xff0c;带来便利高效的同时&#xff0c;人脸信息安全问题也引发担忧。为规范技术应用、保护个人信息权益&#xff0c;人脸识别备案制度应运…...

Excelize 开源基础库发布 2.9.1 版本更新

Excelize 是 Go 语言编写的用于操作 Office Excel 文档基础库&#xff0c;基于 ECMA-376&#xff0c;ISO/IEC 29500 国际标准。可以使用它来读取、写入由 Excel、WPS、OpenOffice 等办公软件创建的电子表格文档。支持 XLAM / XLSM / XLSX / XLTM / XLTX 等多种文档格式&#xf…...

工具类------对象与 Map 之间的相互转换

entity2Map - 将 Java 对象转换为 Mapmap2Entity - 将 Map 转换为 Java 对象 package com.toolconclusion.transition;import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.util.HashMap; import java.util.Map;public class E…...

BGP实验练习2

需求&#xff1a; 1.AS1存在两个环回&#xff0c;一个地址为192.168.1.0/24&#xff0c;该地址不能再任何协议中宣告 AS3存在两个环回&#xff0c;该地址不能再任何协议中宣告 AS1还有一个环回地址为10.1.1.0/24&#xff0c;AS3另一个环回地址是11.1.1.0/24 最终要求这两…...

centos7.x下,使用宝塔进行主从复制的原理和实践

操作原理&#xff1a; 一、主库配置 1.修改 MySQL 配置文件 # 编辑主库配置文件&#xff08;路径根据实际系统可能不同&#xff09; vim /etc/my.cnf # 添加以下配置 [mysqld] server-id 1 # 唯一 ID&#xff0c;主库设置为 1 log-bin mysql-bin …...

项目图标组件处理

我们如何复用项目里的图标&#xff0c;如何维护和引用图标&#xff1f; 为了形成便于使用的图标库&#xff0c;做了如下调研&#xff1a; iconfont&#xff08;webfont&#xff09;unocsssvgriconParkunplugin-icons 我们希望达到的目的 开发自行维护&#xff0c;而不是由设…...

el-tree结合checkbox实现数据回显

组件代码 <el-tree:data"vertiList"show-checkboxnode-key"id":props"defaultProps"ref"treeRefx"class"custom-tree"check-change"handleCheckChange"> </el-tree>获取选择的节点 handleCheckChan…...

虚拟机Ubuntu系统怎么扩展容量,扩展容量后进不去系统怎么办?

当我解压大文件时&#xff0c;突然报错&#xff0c;说我空间不足&#xff0c;我关闭虚拟机&#xff0c;删除了快照&#xff0c;在设置里点击扩展容量后&#xff0c;发现进不去系统了。 1.扩展容量 扩展容量需要关闭快照&#xff0c;请提前做好数据备份&#xff01; 2.进不去界…...

道通EVO MAX系列无人机-支持二次开发

道通EVO MAX系列无人机-支持二次开发 EVO Max 系列采用Autel Autonomy自主飞行技术&#xff0c;实现复杂环境下的全局路径规划、3D场景重建、自主绕障和返航&#xff1b;高精度视觉导航能力&#xff0c;使其在信号干扰强、信号遮挡、信号弱等复杂环境下&#xff0c;依然获得高精…...

解构认知边界:论万能方法的本体论批判与方法论重构——基于跨学科视阈的哲学-科学辩证

一、哲学维度的本体论批判 &#xff08;1&#xff09;理性主义的坍缩&#xff1a;从笛卡尔幻想到哥德尔陷阱 笛卡尔在《方法论》中构建的理性主义范式&#xff0c;企图通过"普遍怀疑-数学演绎"双重机制确立绝对方法体系。然而哥德尔不完备定理&#xff08;Gdel, 19…...

论文学习_Understanding the AI-powered Binary Code Similarity Detection

摘要&#xff1a;近年来&#xff0c;AI驱动的二进制代码相似性检测&#xff08;Binary Code Similarity Detection, 简称 BinSD&#xff09;已广泛应用于程序分析领域。该技术通过神经网络将复杂的二进制代码比较问题转化为代码嵌入向量之间的距离度量。然而&#xff0c;由于现…...

使用PHP对接日本股票市场数据

本文将介绍如何通过StockTV提供的API接口&#xff0c;使用PHP语言来获取并处理日本股票市场的数据。我们将以查询公司信息、查看涨跌排行榜和实时接收数据为例&#xff0c;展示具体的操作流程。 准备工作 首先&#xff0c;请确保您已经从StockTV获得了API密钥&#xff0c;并且…...

(vue)el-steps从别的页面跳转进来怎么实现和点击同样效果

(vue)el-steps从别的页面跳转进来怎么实现和点击同样效果 需求&#xff1a; 解决思路&#xff1a;监听路由&#xff0c;给active赋值对应下标 组件&#xff1a; <el-steps:active"active"finish-status"process"class"steps custom-steps":…...

什么是原码和补码

补码的本质确实是模运算&#xff08;Modular Arithmetic&#xff09;&#xff0c;这是理解补码为何能统一加减法的核心数学原理。下面用最通俗的语言和例子解释清楚&#xff1a; —### 1. 先理解什么是“模运算”- 模运算就是“周期性计数”&#xff0c;比如钟表&#xff1a; -…...

vscode 同一个工作区,不同文件夹之间跳转问题

你说的问题&#xff0c;其实和 VS Code 的「工作区」机制、c_cpp_properties.json、compile_commands.json 或 LSP 后端&#xff08;如 clangd&#xff09;的索引行为有关。 ⸻ &#x1f4cc; 你的现象总结&#xff1a; 操作方式 是否能跳转 说明 打开整个上层文件夹&#x…...