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

在Java中基于Geotools对PostGIS数据库的空间查询实践

目录

前言

一、相关技术背景介绍

1、评价对象AOI

2、数据处理流程

二、对AOI空间范围查询实践

1、空间查询构建

2、空间样式创建

3、成果出图

三、总结


前言

        在当今数字化浪潮下,空间数据的应用价值日益凸显,从城市规划到环境监测,从物流配送到地理信息系统(GIS)开发,精准、高效的空间数据查询成为关键环节。而 Java 作为广泛应用的编程语言,在与地理空间技术的融合中展现出独特魅力。Geotools 作为开源的 Java GIS 库,为 Java 开发者提供了强大的地理空间数据处理能力,犹如一把开启空间数据宝藏之门的钥匙。PostGIS 则是 PostgreSQL 数据库的空间扩展,能够存储和处理复杂的空间数据类型,是空间数据存储与管理的得力助手。将 Geotools 与 PostGIS 结合,意味着我们可以利用 Java 强大的编程生态和 Geotools 丰富的 GIS 功能,深度挖掘 PostGIS 中海量空间数据的潜力。

        比如我们需要对某一个风景区的商业开发程度进行评价,需要做的第一件事就是根据风景区的范围也就是AOI数据,查询这个AOI数据的范围内所有的POI数据,然后根据不同的POI类型进行分类,从而计算不同的POI类型在景区内的分布情况,加上一些空间分析和相关计算,从而可以对当前景区的一个商业情况进行初步的评估,从而为景区的优质发展提供指导和参考,以下图为例:

        本博客将深入探讨这一实践,从连接配置到复杂空间查询操作,包括点查询、区域范围查询以及空间关系判断等,全方位展示如何在 Java 环境下借助 Geotools 驾驭 PostGIS 数据库,实现高效精准的空间数据检索,为相关领域开发者提供实用的技术路径,助力空间数据应用的创新拓展。

一、相关技术背景介绍

        这里以长沙岳麓山风景区为例,主要介绍如何得出岳麓山及风景区内的POI数据的分布情况。从而为下一步对该风景区的商业及人文指数进行评价。由此我们需要对岳麓山风景区的空间范围数据,以及有了AOI范围后对其范围内的POI数据进行检索的流程进行简单说明。

1、评价对象AOI

关于如何获取AOI数据,在之前的博文中我们曾经进行过相应的说明。大家可以从相应的官方渠道获取。也可以从互联网图源来获取,比如从百度地图或者高德地图中也可以获取数据。以高德地图为例,在下面的查询界面中可以查看到具体的数据:

        我们可以在网络请求的地方对这个空间面数据进行调试,也可以将这个数据复制到我们的开发环境中,从而可以实现离线的空间计算。如下图所示:

        上面的数据也是本博客的目标AOI范围,我们后续的所有工作都将围绕这个区域来展开。 因此,如果对AOI数据不是很了解,建议先对相关知识又一个大体的认识以便于更好的掌握相关知识。

2、数据处理流程

        为了让大家对整个数据处理的流程有一个简单的认识,这里将整个数据的处理流程给读者进行分享,大致的流程步骤如下:

        从整体来说,分为三个阶段。第一个阶段是AOI即空间查询面的构建,第二界面是基于AOI面的POI检索,第三阶段就是将两个图层进行数据叠加后渲染出图。 下面将结合流程图对重要的处理节点的逻辑进行详细的介绍。

二、对AOI空间范围查询实践

        本节将重点介绍如何对AOI数据进行空间范围查询的实现进行说明。对应前文提到的三个阶段来分别展开,从查询目标的空间查询构建到空间样式创建,最后对整体成果进行出图逐级展开。

1、空间查询构建

        空间查询的构建比较简单,主要包含三个环节的工作,第一个是将字符串类型的AOI数据进行解析,刚开始是从高德地图中获取AOI字符串,由于是高德地图的坐标,因此我们首先要对坐标进行转换,将其转换为我们熟悉的WGS84的地理坐标,最后再将转换好的坐标来构建一个完整的查询面,关键代码如下所示:

/**
* - 将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);//System.out.println("高德坐标转wgs84坐标" + gcj284[0] + "=" + gcj284[1]);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;
}

        经过前面的步骤,我们已经成功的合成了我们的查询空间目标,接下来就需要基于Geotools来构建对PostGIS数据库的空间查询API, 为了演示我们本地的POI功能,这里我们使用本地的POI信息表,当然这张表的数据可能与实际情况有一定的出入,仅做参考。关键代码如下:

// 2. 创建PostGIS数据存储
DataStore dataStore = createPostgisDataStore();
// 3. 二次查询:用该多边形查询点数据(如查询橘子洲景区内的POI)
String poiLayerName = "biz_poi_info";
FilterFactory2 ff = CommonFactoryFinder.getFilterFactory2();
PropertyName geomProperty = ff.property("geom"); // 点数据的几何列名
// 4、空间关系:点在多边形内(WITHIN)或相交(INTERSECTS)
Filter spatialFilter = ff.within(geomProperty, ff.literal(aoiPolygon));
Query pointQuery = new Query(poiLayerName, spatialFilter);
FeatureSource pointSource = dataStore.getFeatureSource(poiLayerName);

        为了方便查看是否成功的执行了查询,这里我们将查询结果进行打印输出。可以在控制台看到很多的信息输出,如下图所示 :

System.out.println("POI数量:"+points.size());
// 6. 处理结果
try (FeatureIterator iterator = points.features()) {while (iterator.hasNext()) {Feature pointFeature = iterator.next();Geometry point = (Geometry) pointFeature.getDefaultGeometryProperty().getValue();System.out.println("POI坐标: " + point.getCoordinate());printSimpleFeatureAttributes((SimpleFeature)pointFeature); // 打印属性System.out.println("------------------------------------------------------");}
}

        运行后在IDE的控制台中可以看到以下输出:

        能看到以上结果说明我们的空间查询函数构建正确,可以正常执行。 

2、空间样式创建

        为了能让展示的效果更好,因此我们需要对获取的AOI数据面和AOI数据面内的POI数据进行标绘,这里我们需要使用SLD的方式来进行美化,两个生成空间样式的方法如下:

 public static Style createDashedBorderStyle() {StyleFactory sf = CommonFactoryFinder.getStyleFactory();FilterFactory2 ff = CommonFactoryFinder.getFilterFactory2();PolygonSymbolizer symbolizer = sf.createPolygonSymbolizer(sf.createStroke(ff.literal(Color.DARK_GRAY), ff.literal(0.8)),sf.createFill(ff.literal(Color.BLUE), ff.literal(0.8)), // 80%透明度null);Rule rule = sf.createRule();rule.symbolizers().add(symbolizer);FeatureTypeStyle fts = sf.createFeatureTypeStyle();fts.rules().add(rule);Style style = sf.createStyle();style.featureTypeStyles().add(fts);return style;}private static Style createPoiStyle() {StyleFactory sf = CommonFactoryFinder.getStyleFactory();FilterFactory2 ff = CommonFactoryFinder.getFilterFactory2();// 创建圆形符号Mark mark = sf.createMark();mark.setWellKnownName(ff.literal("circle"));mark.setFill(sf.createFill(ff.literal(Color.RED)));mark.setStroke(sf.createStroke(ff.literal(Color.BLACK), ff.literal(1)));Graphic graphic = sf.createDefaultGraphic();graphic.graphicalSymbols().clear();graphic.graphicalSymbols().add(mark);PointSymbolizer pointSym = sf.createPointSymbolizer(graphic, null);// 新增震级标注Font font = sf.createFont(ff.literal("楷体"),ff.literal("Regular"),ff.literal("normal"),ff.literal(18));// 创建文本标注TextSymbolizer textSym = sf.createTextSymbolizer(sf.createFill(ff.literal(Color.WHITE)),new Font[] { font },null,ff.property("name"),  // 标注字段null,null);// 标注位置(点右侧偏移)AnchorPoint anchor = sf.createAnchorPoint(ff.literal(-0.05), ff.literal(0.05));Displacement displacement = sf.createDisplacement(ff.literal(0.1), ff.literal(0));Fill textFill = sf.createFill(ff.literal(Color.RED));Halo halo = sf.createHalo(sf.createFill(ff.literal(Color.WHITE)),ff.literal(1));textSym.setFont(font);textSym.setFill(textFill);textSym.setHalo(halo);//新的设置方法PointPlacement placement = sf.createPointPlacement(anchor, displacement, ff.literal(0));textSym.setLabelPlacement(placement);Rule rule = sf.createRule();rule.symbolizers().add(pointSym);rule.symbolizers().add(textSym);FeatureTypeStyle fts = sf.createFeatureTypeStyle();fts.rules().add(rule);Style style = sf.createStyle();style.featureTypeStyles().add(fts);return style;}

        创建了以上的样式之后,我们就可以将样式和数据进行融合,这样就能绘制出漂亮的地图了。 

3、成果出图

        在完成查询数据的转换以及空间查询的实现等,接下来就是揭晓答案的时候,我们在代码层面实现了对岳麓山的AOI构建以及其AOI包围的POI数据,关键代码如下:

SimpleFeatureCollection poiCollection = (SimpleFeatureCollection) pointSource.getFeatures(pointQuery);
// 7. 创建样式
Style aoiStyle = createDashedBorderStyle();Style poiStyle = createPoiStyle();
// 8. 创建地图内容
MapContent mapContent = new MapContent();
SimpleFeatureSource aoiSfs = convert(aoiPolygon);
mapContent.addLayer(new FeatureLayer(aoiSfs, aoiStyle));
mapContent.addLayer(new FeatureLayer(poiCollection, poiStyle));
// 9. 设置输出范围和尺寸
ReferencedEnvelope mapBounds = poiCollection.getBounds();
mapBounds.expandBy(0.2); // 扩展边界
// 10、输出图像大小(例如:宽度x高度)
int width = 1920; // 可根据需求调整		
// 计算地理宽高比
double aspectRatio = mapBounds.getWidth() / mapBounds.getHeight();
//根据比例计算新高度
int height = (int) Math.round(width / aspectRatio);
// 渲染图片
BufferedImage image = renderMap(mapContent, aoiSfs.getBounds(), width, height);
// 保存图片
ImageIO.write(image, "png", new File("D:/AOI及其包含POI数据示意图.png"));
System.out.println("finished");  
dataStore.dispose();

        使用main函数或者测试用例都可以执行以上的代码,程序运行后可以在对应的磁盘目录下看到以下的成果:

 

        从上图中可以明显看到,在岳麓上上,一些POI的分布基本还是比较集中的,比如东北方向, 中间的区域也是非常多。当然,把POI数据展现在地图上还只是一个阶段,要想实现商业化,评估。在有了POI数据之后,还要结合数据量,聚类等方面进行空间的分析,且听我们下回分解。

三、总结

        以上就是本文的主要内容,本博客将深入探讨基于Geotools对PostGIS数据库的空间查询实践,从连接配置到复杂空间查询操作,包括点查询、区域范围查询以及空间关系判断等,全方位展示如何在 Java 环境下借助 Geotools 驾驭 PostGIS 数据库,实现高效精准的空间数据检索,为相关领域开发者提供实用的技术路径,助力空间数据应用的创新拓展。如果您也需要对一个AOI数据进行范围内的POI进行分析查询,并且使用的GeoTools的基础PostGIS访问功能,那么您可以使用以上实现过程和代码进行调试。行文仓促,定有不足之处,欢迎各位朋友在评论区批评指正,不胜感激。

相关文章:

在Java中基于Geotools对PostGIS数据库的空间查询实践

目录 前言 一、相关技术背景介绍 1、评价对象AOI 2、数据处理流程 二、对AOI空间范围查询实践 1、空间查询构建 2、空间样式创建 3、成果出图 三、总结 前言 在当今数字化浪潮下&#xff0c;空间数据的应用价值日益凸显&#xff0c;从城市规划到环境监测&#xff0c;从…...

生活需要一些思考

总分总 写文章、做事情、写邮件、写信&#xff0c;都是要【总分总】。 先总【因为没人有耐心一上来就看细节&#xff0c;先总结&#xff0c;别人感兴趣才会看分】 然后分【分中包括多个子部分&#xff0c;或子章节、子目标&#xff0c;他们之间层层递进&#xff0c;最终引出最…...

Scrapy框架之CrawlSpider爬虫 实战 详解

CrawlSpider 是 Scrapy 框架中一个非常实用的爬虫基类&#xff0c;它继承自 Spider 类&#xff0c;主要用于实现基于规则的网页爬取。相较于普通的 Spider 类&#xff0c;CrawlSpider 可以根据预定义的规则自动跟进页面中的链接&#xff0c;从而实现更高效、更灵活的爬取。 Scr…...

DeepSeek主动学习系统:低质量数据炼金术的工程化实践

文章目录 一、技术体系架构升级1.1 四层协同系统架构1.2 关键技术组件解析(1) 跨模态特征对齐引擎(2) 动态采样策略库 二、低质量数据治理全流程2.1 数据清洗与增强流水线2.2 主动学习迭代流程 三、工业级部署方案3.1 分布式计算架构3.2 动态环境应对策略(1) 概念漂移检测(2) 持…...

学习记录:DAY20

技术探索之旅&#xff1a;YAML配置&#xff0c;依赖注入、控制反转与Java注解 前言 最近有点懒了&#xff0c;太松懈可不行。为了让自己保持学习的动力&#xff0c;我决定将最近的学习内容整理成博客&#xff0c;目标是让未来的自己也能轻松理解。我会尽量以整体记录的方式呈…...

[AI]browser-use + web-ui 大模型实现自动操作浏览器

[AI]browser-use web-ui 大模型实现自动操作浏览器 介绍 官方地址&#xff1a;https://github.com/browser-use/web-ui browser-use主要作用是将 AI Agent 与浏览器链接起来从而实现由 AI 驱动的浏览器自动化。今天会给大家介绍如何通过browser-use web-ui来搭建并操作browse…...

使用LangChain连接远程Oracle数据库尝试LLM 提供的SQL智能助理

使用LangChain连接远程Oracle数据库尝试LLM 提供的SQL智能助理 为完成此次数据库连接实验&#xff0c;笔者用自己的笔记本电脑搭建了一台linux虚机&#xff0c;安装了oracle 23C&#xff0c;并借助deepseek创建了若干与电商业务有关的表并插入了一些记录。 接着在windows实体…...

训练神经网络的批量标准化(使用 PyTorch)

构建神经网络是一门艺术&#xff0c;而非一个结果固定的过程。你无法预知最终能否得到有效的模型&#xff0c;而且有很多因素可能导致你的机器学习项目失败。 然而&#xff0c;随着时间的推移&#xff0c;您还将学会一套特定的笔触&#xff0c;这将大大提高您成功的几率。 在…...

阿里Qwen3 8款模型全面开源,免费商用,成本仅为 DeepSeek-R1 的三分之一

想要掌握如何将大模型的力量发挥到极致吗&#xff1f;叶梓老师带您深入了解 Llama Factory —— 一款革命性的大模型微调工具&#xff08;限时免费&#xff09;。 1小时实战课程&#xff0c;您将学习到如何轻松上手并有效利用 Llama Factory 来微调您的模型&#xff0c;以发挥其…...

Vue常用的修饰符有哪些有什么应用场景(含deep seek讲解)

Vue.js 事件修饰符的功能与具体应用场景 一、事件修饰符 .stop .stop 的主要作用是 阻止事件冒泡&#xff0c;防止事件从子元素传播到父元素。这在处理嵌套组件或多层 DOM 结构时非常有用。 <div click"parentClick">Parent<button click.stop"chi…...

案例分享|20倍提效!水力设备电磁仿真的云端实战

在现代水力设备制造领域&#xff0c;电磁仿真是贯穿设计、研发到故障诊断的核心技术之一。而随着"双碳"目标驱动下清洁能源设备的迭代加速&#xff0c;水轮机、水泵等设备研发的多物理场耦合特性对仿真精度提出前所未有的挑战。传统仿真工具在处理复杂多物理场耦合等…...

ShenNiusModularity项目源码学习(25:ShenNius.Admin.Mvc项目分析-10)

本文学习并分析ShenNiusModularity项目中的留言管理页面、回收站页面。 1、留言管理页面 留言管理页面用于检索、删除系统中的留言数据&#xff0c;该页面对应的文件Index.cshtml位于ShenNius.Admin.Mvc项目的Areas\Cms\Views\Message内。页面使用的控制器类MessageController…...

github使用记录

1. 首次上传本地项目到 GitHub 1.1 准备 GitHub 仓库 登录 GitHub&#xff0c;点击右上角 → New repository输入仓库名称&#xff08;建议与本地目录同名&#xff09;选择公开&#xff08;Public&#xff09;或私有&#xff08;Private&#xff09;不要勾选 "Initiali…...

NFS-网络文件系统

NFS介绍 NFS &#xff08; Network File System &#xff09; 即网络文件系统 &#xff0c;它允许网络中的计算机之间通过TCP/IP网络共享资源。在NFS的应用中&#xff0c;本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件&#xff0c;就像访问本地文件一样NFS的好…...

Andorid车机UI适配,AndroidUI图px的单位,如何适配1920x720,PPI100的屏幕设备

在 Android 开发中&#xff0c;针对 1920720 分辨率、PPI 100 的屏幕设备进行 UI 适配&#xff0c;需要综合考虑 像素密度&#xff08;PPI&#xff09;、屏幕尺寸 和 Android 的密度无关像素&#xff08;dp&#xff09; 体系。以下是完整的适配方案&#xff1a; &#x1f4cc; …...

4.2.4 MYSQL的缓存策略

文章目录 4.2.4 MYSQL的缓存策略1. MYSQL缓存方案用来干什么 2. 缓存相关知识1. mysql主从复制2. 为什么需要缓冲层3. 还有哪些类型数据库 3. 那些方式会提升MYSQL读写性能1. mysql读写分离2. 连接池3. 异步连接 4. 缓存方案是怎么解决的1. redis和MYSQL一致性状态分析1. 流程&…...

省科学技术奖申报答辩PPT设计制作美化

自然科学奖、技术发明奖和科技进步奖是科学技术奖励体系中的三大核心奖项 省科学技术奖的含金量极高&#xff0c;主要体现在经济激励、社会认可、创新驱动及资源整合等方面。其价值不仅在于奖金和荣誉&#xff0c;更在于对科研生态的长远影响&#xff0c;国家科学技术奖的敲门…...

基于 ARM 的自动跟拍云台设计

标题:基于 ARM 的自动跟拍云台设计 内容:1.摘要 摘要&#xff1a;随着摄影和监控需求的不断增长&#xff0c;自动跟拍云台的应用越来越广泛。本设计的目的是开发一款基于 ARM 的自动跟拍云台&#xff0c;以实现对目标的精准跟拍。采用 ARM 微控制器作为核心控制单元&#xff0…...

Linux电源管理(3)_关机和重启的过程

原文&#xff1a;Linux电源管理&#xff08;3&#xff09;_Generic PM之重新启动过程 1.前言 在使用计算机的过程中&#xff0c;关机和重启是最先学会的两个操作。同样&#xff0c;这两个操作在Linux中也存在&#xff0c;可以关机和重启。这就是这里要描述的对象。在Linux Ke…...

SQLMesh增量模型实战指南:时间范围分区

引言 在数据工程领域&#xff0c;处理大规模数据集和高频率数据更新是一项挑战。SQLMesh作为一款强大的数据编排工具&#xff0c;提供了增量模型功能&#xff0c;帮助数据工程师高效地管理和更新数据。本文将详细介绍如何使用SQLMesh创建和管理基于时间范围的增量模型&#xf…...

LeetCode -160.相交链表

题目 160. 相交链表 - 力扣&#xff08;LeetCode&#xff09; 解法一 哈希表 哈希表解决方案的思路 这个使用哈希表&#xff08;unordered_set&#xff09;的解决方案基于一个简单的观察&#xff1a;如果两个链表相交&#xff0c;那么相交点及之后的所有节点都是两个链表共…...

针对Linux挂载NAS供Minio使用及数据恢复的需求

针对Linux挂载NAS供Minio使用及数据恢复的需求&#xff0c;设计以下分阶段解决方案&#xff1a; 一、存储架构设计 存储拓扑 [Minio Server] --> [NAS挂载点 (/mnt/nas/minio-data)] --> [企业级NAS设备]│└─[备份服务器/存储] (可选异地备份)组件版本要求 Minio版本&a…...

【大厂实战】API网关进化史:从统一入口到智能AB分流,如何构建灰度无感知系统?

【大厂实战】API网关进化史&#xff1a;从统一入口到智能AB分流&#xff0c;如何构建灰度无感知系统&#xff1f; 1. 为什么API网关是AB面架构的天然起点&#xff1f; 在分布式微服务架构中&#xff0c;API网关&#xff08;API Gateway&#xff09;承担着重要职责&#xff1a…...

开放平台架构方案- GraphQL 详细解释

GraphQL 详细解释 GraphQL 是一种用于 API 的查询语言&#xff0c;由 Facebook 开发并开源&#xff0c;旨在提供一种更高效、灵活且强大的数据获取和操作方式。它与传统的 REST API 有显著不同&#xff0c;通过类型系统和灵活的查询能力&#xff0c;解决了 REST 中常见的过度获…...

使用 TypeScript 开发并发布一个 npm 包(完整指南)

本教程将一步步教你从零开发、打包并发布一个 TypeScript 工具库到 npm。以日期时间格式化工具为例&#xff0c;涵盖项目初始化、Vite 打包、类型声明输出、npm 配置、实际发布等完整流程&#xff0c;适合开发者直接套用。 文章目录 &#x1f4c1; 项目结构预览&#x1f9f1; 初…...

在Anolis OS 8上部署Elasticsearch 7.16.1与JDK 11的完整指南

目录 1. 环境与版本选择 1.1 操作系统选择:Anolis OS 8 1.2 版本匹配说明 1.3 前置条件检查 2. JDK 11安装与配置 2.1 安装流程 2.2 配置详解 3. Elasticsearch 7.16.1安装与优化 3.1 基础安装 3.2 目录规划与权限 3.3 核心配置文件详解 3.4 JVM调优 4. 用户权限管…...

SELinux 从理论到实践:深入解析与实战指南

文章目录 引言&#xff1a;为什么需要 SELinux&#xff1f;第一部分&#xff1a;SELinux 核心理论1.1 SELinux 的三大核心模型1.2 安全上下文&#xff08;Security Context&#xff09;1.3 策略语言与模块化 第二部分&#xff1a;实战操作指南2.1 SELinux 状态管理2.2 文件上下…...

巧用 `unittest.mock` 模块实现依赖服务隔离测试

巧用 unittest.mock 模块实现依赖服务隔离测试 引言 在软件开发过程中,单元测试是保障代码质量的核心手段。然而,许多代码依赖于外部服务,如数据库、API 或文件系统,直接进行测试可能会导致: 环境不可控:测试数据可能变化,影响测试结果的稳定性。执行时间长:依赖外部…...

水利三维可视化平台怎么做?快速上手的3步指南

分享大纲&#xff1a; 1、了解水利三维可视化平台 2、选择合适的开发平台 3、快速搭建水利三维可视化平台 第一步&#xff1a;了解水利三维可视化平台 水利三维可视化平台是利用大数据、物联网、数字孪生等技术&#xff0c;将物理实体数字化建模&#xff0c;并通过三维可视化技…...

【DB2】逻辑导出导入注意事项

DB2异构操作系统之间迁移需选择逻辑备份恢复 导出环节 1、设置字符集&#xff0c;源端创建导出目录&#xff0c;并导出数据库DDL db2set db2codepage1208 db2stop force db2start db2look -d YS-e -l -o -createdb db2look_YS.sql导出文件:db2look_YS.sql –详细参数请参考…...

Fiddler抓取APP端,HTTPS报错全解析及解决方案(一篇解决常见问题)

环境&#xff1a;雷电模拟器Android9系统 ​ 你所遇到的fiddler中抓取HTTPS的问题可以分为三类&#xff1a;一类是你自己证书安装上逻辑错误&#xff0c;另一种是APP中使用了“证书固定”的手段。三类fiddler中生成证书时的参数过程。 1.Fiddler证书安装上的逻辑错误 更新Opt…...

C语言教程(二十三):C 语言强制类型转换详解

一、强制类型转换的概念 强制类型转换是指在程序中手动将一个数据类型的值转换为另一种数据类型。在某些情况下&#xff0c;编译器可能不会自动进行类型转换&#xff0c;或者自动转换的结果不符合我们的预期&#xff0c;这时就需要使用强制类型转换来明确指定要进行的类型转换。…...

阿里云服务器 篇十二:加入 Project Honey Pot 和使用 http:BL

文章目录 系列文章背景前提条件注册和准备注册安装蜜罐捐赠MX记录(可选)添加 QuickLinks(快速链接)使用 http:BL(HTTP黑名单)获取Access Key(访问秘钥)Apache自动拦截黑名单IP模块Http:BL API文档更多实现案例监控IP空间系列文章 阿里云服务器 篇一:申请和初始化 阿里…...

Android 手动删除 AAR jar 包 中的文件

Duplicate class com.xxxa.naviauto.sdk.listener.OnChangeListener found in modules jetified-xxxa-sdk-v1.1.2-release-runtime (:xxx-sdk-v1.1.2-release:) and jetified-xxxb-sdk-1.1.3-runtime (:xxxb-sdk-1.1.3:) A.aar B.aar 有类冲突; 使用 exclude 排除本地aar无效…...

Tomcat 部署配置指南

## 1. 环境要求 - JDK 8 或更高版本 - Tomcat 8.5/9.x/10.x - Windows 操作系统 ## 2. 安装步骤 ### 2.1 安装JDK 1. 下载并安装JDK 2. 配置环境变量&#xff1a; - JAVA_HOME: JDK安装目录 - Path: 添加 %JAVA_HOME%\bin 3. 验证安装&#xff1a;打开命令提示符&#…...

阿里千问Qwen3技术解析与部署指南 :混合推理架构突破性优势与对DeepSeek R1的全面超越

阿里千问Qwen3技术解析&#xff1a;突破性优势与对DeepSeek R1的全面超越 在2025年4月29日&#xff0c;阿里巴巴发布了新一代开源大模型Qwen3&#xff08;通义千问3&#xff09;&#xff0c;凭借其创新架构与显著性能提升&#xff0c;迅速成为全球开源AI领域的焦点。本文将从技…...

宾馆一次性拖鞋很重要,扬州卓韵酒店用品详细介绍其材质与卫生标准

宾馆一次性拖鞋在旅途中很重要。它的卫生情况受大家关注。它的舒适度也受大家关注。扬州卓韵酒店用品在这方面经验丰富。其产品质量优良。下面为你详细介绍宾馆一次性拖鞋。 材质选择目前宾馆一次性拖鞋材质多样。常见的有布质、纸质和塑料的。布质拖鞋相对环保舒适。能给脚部…...

推荐系统中 Label 回收机制之【时间窗口设计】

目录 引言一、业务需求&#xff1a;目标导向的窗口设计1.1 用户行为周期决定窗口基础1.2 业务目标驱动窗口粒度1.3 动态场景下的弹性调整 二、数据特性&#xff1a;窗口设计的底层约束2.1 数据分布与稀疏性适配2.2 数据延迟与完整性保障2.3 特征时效性分层 三、算法模型&#x…...

DevExpressWinForms-XtraMessageBox-使用教程

XtraMessageBox-使用教程 一、基础使用&#xff1a;快速弹出标准消息框 XtraMessageBox 的基础使用非常简单&#xff0c;只需调用XtraMessageBox.Show方法即可弹出一个标准的消息框。根据不同的使用需求&#xff0c;Show方法有多种重载形式。 1.1 仅显示提示信息 当我们仅仅…...

ETL数据集成与数据资产的紧密关联,解锁数据价值新密码

数据已然成为企业最为珍贵的资产之一。无论是传统行业巨头&#xff0c;还是新兴的互联网企业&#xff0c;都在积极挖掘数据背后所蕴含的巨大商业价值。而在这个过程中&#xff0c;ETL&#xff08;Extract&#xff0c;Transform&#xff0c;Load&#xff09;作为数据处理的关键环…...

【无报错,亲测有效】如何在Windows和Linux系统中查看MySQL版本

如何在Windows和Linux系统中查看MySQL版本 MySQL作为最流行的开源关系型数据库管理系统之一&#xff0c;了解如何查看其版本信息对于开发者和数据库管理员来说是常用的一个基本操作。本文将详细介绍在Windows和Linux系统中查看MySQL版本的方法。 文章目录 如何在Windows和Linu…...

【Leetcode 每日一题】2962. 统计最大元素出现至少 K 次的子数组

问题背景 给你一个整数数组 n u m s nums nums 和一个 正整数 k k k。 请你统计有多少满足 「 n u m s nums nums 中的 最大 元素」至少出现 k k k 次的子数组&#xff0c;并返回满足这一条件的子数组的数目。 子数组是数组中的一个连续元素序列。 数据约束 1 ≤ n u m s …...

网络爬取需谨慎:警惕迷宫陷阱

一、技术背景:网络爬虫与数据保护的博弈升级 1. 问题根源:AI训练数据爬取的无序性 数据需求爆炸:GPT-4、Gemini等大模型依赖数万亿网页数据训练,但大量爬虫无视网站的robots.txt协议(非法律强制),未经许可抓取内容(如新闻、学术论文、代码),引发版权争议(如OpenAI被…...

‘WebDriver‘ object has no attribute ‘find_element_by_class‘

在使用Selenium进行Web自动化测试时&#xff0c;如果你遇到了错误信息&#xff1a;“‘WebDriver’ object has no attribute ‘find_element_by_class’”&#xff0c;这通常是因为在Selenium 4及以上版本中&#xff0c;find_element_by_* 和 find_elements_by_* 这类方法已经…...

ComfyUI 学习笔记,案例1:2_pass_txt2img

背景 ComfyUI 官方案例学习笔记&#xff0c;本文是跑出的第三个案例&#xff0c;但确是官网案例的第一个&#xff0c;所以运行起来总体比较顺利。整理几点页面使用技巧&#xff1a; 是网页版本&#xff0c;没有 IDEA&#xff0c;而且画布上没有滚动条&#xff0c;想看清楚内容…...

代码颜色模式python

1. CMYK&#xff08;印刷场景&#xff09; 例子&#xff1a;某出版社设计书籍封面时&#xff0c;使用 Adobe Illustrator 绘制图案。 红色封面的 CMYK 值可能为&#xff1a;C0, M100, Y100, K0&#xff08;通过洋红和黄色油墨混合呈现红色&#xff09;。印刷前需将设计文件转…...

Android第五次面试总结之网络篇(修)

一、域名解析到服务器的过程&#xff08;DNS 解析流程&#xff09; 当应用发起网络请求&#xff08;如https://www.example.com&#xff09;时&#xff0c;操作系统需先将域名转换为服务器 IP 地址&#xff0c;这一过程通过 DNS&#xff08;域名系统&#xff09; 完成&#xf…...

JavaScript 作用域全面总结

JavaScript 作用域全面总结 作用域(Scope)是JavaScript中一个核心概念&#xff0c;决定了变量、函数和对象的可访问性。以下是JavaScript作用域的全面总结&#xff0c;结合表格和箭头图进行讲解。 一、作用域类型 JavaScript 作用域类型详解 JavaScript 中有四种主要的作用…...

Redis核心与底层实现场景题深度解析

Redis核心与底层实现场景题深度解析 在互联网大厂Java求职者的面试中&#xff0c;经常会被问到关于Redis的核心与底层实现相关的场景题。本文通过一个故事场景来展示这些问题的实际解决方案。 第一轮提问 面试官&#xff1a;马架构&#xff0c;欢迎来到我们公司的面试现场。…...

代发考试战报:4月份 思科认证,华为认证,考试战报分享

CCNP 300-410考试通过战报&#xff0c;350-401 考试通过战报&#xff0c;CCNA 200-301 考试通过战报&#xff0c;HCIP数通 H12-821考试通过&#xff0c;H12-831考试通过&#xff0c;HCSP 行业金融 H19-611考试通过&#xff0c;HCSE 行业金融 H21-293 考试通过 报名考试一定要找…...