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

基于PostGIS的GeoTools执行原生SQL查询制图实践-以贵州省行政区划及地级市驻地为例

目录

前言

一、空间相关表简介

1、地市行政区划表

2、地市驻地信息表

3、空间查询检索

二、GeoTools制图实现

1、数据类型绑定

2、WKT转Geometry

3、原生SQL转SimpleFeatureCollection

4、集成调用

5、成果预览

三、总结


前言

        在当今这个信息爆炸的时代,地理空间数据的处理与可视化分析对于众多领域都具有至关重要的意义。无论是城市规划、资源管理、环境保护,还是交通运输、灾害预警等方面,能够高效、准确地对地理空间数据进行操作并以直观的制图形式呈现,都为决策制定和相关研究提供了有力支持。贵州省作为一个地理环境独特、行政区划丰富的地区,其行政区划信息以及地级市驻地的空间分布等数据蕴含着大量的重要信息。传统上,对于此类地理空间数据的查询和制图往往依赖于一些专业的地理信息系统(GIS)软件,但这些软件通常存在操作复杂、成本较高、与其他系统集成困难等问题。随着开源 GIS 技术的不断发展,PostGIS 和 GeoTools 作为其中的佼佼者,为地理空间数据的处理提供了一种高效、灵活且成本较低的解决方案。

        本研究旨在探索基于 PostGIS 的 GeoTools 执行原生 SQL 查询制图的方法和技术流程。首先,对贵州省行政区划及地级市驻地的空间数据进行整理和导入到 PostGIS 中,确保数据的准确性和完整性。然后,深入研究 GeoTools 中如何构建原生 SQL 查询语句,以满足对特定地理空间数据的查询需求,例如查询特定地级市的行政区划范围、地级市驻地的位置及其周边地理要素等。在此基础上,利用 GeoTools 的渲染引擎和制图工具,将查询结果转化为直观的地理地图,通过调整符号化、图层叠加、地图布局等元素,使地图能够清晰地展示贵州省行政区划及地级市驻地的空间分布特征和相关地理信息。

        通过对这一实践过程的研究,期望能够为地理空间数据的处理和制图提供一种可借鉴的开源解决方案,降低对商业 GIS 软件的依赖,提高地理空间数据利用效率,同时也为相关领域的研究人员和从业者提供一种新的技术思路和方法,助力他们更高效地开展地理空间分析和决策支持工作。在接下来的章节中,将详细阐述整个实践过程中的技术细节、遇到的问题及解决方案,以及最终的制图成果和相应的分析。

一、空间相关表简介

        PostGIS 是 PostgreSQL 数据库的扩展,它为数据库提供了对地理空间数据的支持,使得空间数据能够在关系型数据库中得以高效存储、查询和管理。而 GeoTools 作为一个开源的 Java GIS 工具库,能够与 PostGIS 紧密集成,提供丰富的地理空间数据处理和制图功能。通过利用 GeoTools 执行原生 SQL 查询,我们可以充分发挥数据库的强大查询能力,同时结合 GeoTools 的可视化组件,实现对贵州省行政区划及地级市驻地的精准查询和高质量制图。在之前的博客中,曾经简单介绍了在Geotools中执行CQL和EQL的查询的实例,但是没有讲过如何在Geotools中直接执行原生SQL语句的例子。本节将具体介绍涉及的两张空间表,地市行政区划表和地市驻地信息表以及如何进行空间查询检索实践。

1、地市行政区划表

        地市行政区划的物理表结构如下图所示:

        物理结构如下,定义了相关的信息字段信息:

CREATE TABLE "public"."biz_city" ("id" int8 NOT NULL,"province_code" varchar(16) COLLATE "pg_catalog"."default" NOT NULL,"province_name" varchar(64) COLLATE "pg_catalog"."default" NOT NULL,"city_code" varchar(16) COLLATE "pg_catalog"."default" NOT NULL,"city_name" varchar(512) COLLATE "pg_catalog"."default" NOT NULL,"type" varchar(32) COLLATE "pg_catalog"."default","geom" "public"."geometry",CONSTRAINT "pk_biz_city" PRIMARY KEY ("id")
);
CREATE INDEX "idx_biz_city_citycode" ON "public"."biz_city" USING btree ("city_code" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST
);
CREATE INDEX "idx_biz_city_pcode" ON "public"."biz_city" USING btree ("province_code" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST
);
COMMENT ON COLUMN "public"."biz_city"."id" IS '主键ID';
COMMENT ON COLUMN "public"."biz_city"."province_code" IS '省份编码';
COMMENT ON COLUMN "public"."biz_city"."province_name" IS '省份名称';
COMMENT ON COLUMN "public"."biz_city"."city_code" IS '市级编码';
COMMENT ON COLUMN "public"."biz_city"."city_name" IS '实际名称';
COMMENT ON COLUMN "public"."biz_city"."type" IS '类型';
COMMENT ON COLUMN "public"."biz_city"."geom" IS 'geom';

2、地市驻地信息表

        地市信息表存储的是空间面数据,而地市驻地位置信息则表示为点数据,除了地市的城市驻地,其实还有区县的驻地位置。因此我们有一张完整的空间点位置表来存储以上的信息。表机构如下:

        对应的物理表模型结构如下所示:

CREATE TABLE "public"."biz_geographic_name" ("pk_id" int8 NOT NULL,"name" varchar(255) COLLATE "pg_catalog"."default" NOT NULL,"pinyin" varchar(255) COLLATE "pg_catalog"."default","classz" varchar(4) COLLATE "pg_catalog"."default","bz" varchar(100) COLLATE "pg_catalog"."default","slx" varchar(20) COLLATE "pg_catalog"."default","geom" "public"."geometry" NOT NULL,CONSTRAINT "pk_biz_geographic_name" PRIMARY KEY ("pk_id")
);
CREATE INDEX "idex_biz_geographic_name_classz" ON "public"."biz_geographic_name" USING btree ("classz" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST
);
CREATE INDEX "idx_biz_geographic_name_geom" ON "public"."biz_geographic_name" USING gist ("geom" "public"."gist_geometry_ops_2d"
);
COMMENT ON COLUMN "public"."biz_geographic_name"."pk_id" IS '主键id';
COMMENT ON COLUMN "public"."biz_geographic_name"."name" IS '地名';
COMMENT ON COLUMN "public"."biz_geographic_name"."pinyin" IS '汉语拼音';
COMMENT ON COLUMN "public"."biz_geographic_name"."classz" IS 'classz';
COMMENT ON COLUMN "public"."biz_geographic_name"."bz" IS '备注';
COMMENT ON COLUMN "public"."biz_geographic_name"."slx" IS 'slx';
COMMENT ON COLUMN "public"."biz_geographic_name"."geom" IS '空间对象';
COMMENT ON TABLE "public"."biz_geographic_name" IS '地名基础信息表,用于存储中国范围内的地名信息';

3、空间查询检索

        在PostGIS数据库中查询地市空间面信息的SQL查询语句比较简单,这里我们以贵州省为例,则需要查询贵州省对应的下属地级市列表,SQL语句如下:

select * from biz_city where province_code = '520000';

         其中,520000表示贵州省的编号,在省级也是这个编号。在数据库执行终端中执行以上语句后,可以得到以下结果:

        分别得到贵州省对应的9个地市的面数据列表。 有了面数据之后,接下来还要根据面数据查询对应的地市的地名点位置。这里需要使用空间包含函数以及两张表的联合查询,SQL语句如下:

select t.name,tc.city_code,st_asewkt(t.geom) AS geom from biz_geographic_name t,biz_city tc  where tc.province_code = '520000' and t.classz in ('AD','AC') and  st_contains(tc.geom, t.geom)

        执行后可以得到以下的查询结果:

        请注意以上两个查询SQL,尤其是第二个,在后面的生成过程中,主要就是需要在代码层面直接使用JDBC来访问空间数据库,然后获取相关的空间位置信息列表。 

二、GeoTools制图实现

        本节将详细阐述在GeoTools中实现贵州省的地市行政区划以及驻地的位置原生SQL查询。分别从数据类型的绑定、如何在GeoTools中实现WKT转换Geometry,其中可能又会遇到什么问题,接着介绍如何使用SQL来转SimpleFeatureCollection,最后将集成调用的过程以代码的形式展示给大家,最后给大家展示最终的效果。

1、数据类型绑定

        数据类型比较好理解,简单来说以Jdbc为例。我们的数据库表模型和实际的对象模型有一个映射关系,比如我们有一个学生表,有一个varchar(100)  name,int (4) age,varchar(200) adress;这样的一个表结构,与之对应的是有一个Student类,里面有一个String name,int age,String address;类似这样的代码,就是数据类型绑定,需要我们将对象的数据类型和物理表的数据类型进行一一对应。这是我们做数据转换的基础。在应用程序中做数据类型绑定的方法比较简单,如下所示:

private static Class<?> getBinding(String className) throws ClassNotFoundException {// 简化处理:常见类型映射if (className.contains("String")) return String.class;if (className.contains("Integer")) return Integer.class;if (className.contains("Double")) return Double.class;if (className.contains("geometry")) return Geometry.class; // PostGIS几何类型return Class.forName(className);
}

        这里尤其要注意的是Geometry的空间属性的映射关系。 

2、WKT转Geometry

        与其他的属性类型不一样的是,在空间数据库中,空间字段是一个比较麻烦的字段,但是在项目中又没办法不用,因此这里我们需要将执行的查询结果集当中获取到WKT,然后将WKT转换为Geometry的空间字段。

//转换WKT为Geometry字段
public static Geometry convertWKTWithSRID(String wkt) throws ParseException {GeometryFactory factory = new GeometryFactory();WKTReader reader = new WKTReader(factory);if (wkt.toUpperCase().startsWith("SRID=")) {int semicolonIndex = wkt.indexOf(';');if (semicolonIndex == -1) {throw new ParseException("Invalid SRID format");}String sridPart = wkt.substring(5, semicolonIndex);String geometryWKT = wkt.substring(semicolonIndex + 1);Geometry geom = reader.read(geometryWKT);geom.setSRID(Integer.parseInt(sridPart));return geom;}return reader.read(wkt);
}

        这里需要注意的是,在解析WKT文本时,一定需要将解析内容的SRID空间参考先去掉,然后在通过动态读取的方式来设置,否则程序在运行时就会报错。 有所怀疑的大家可以进行亲子验证。

3、原生SQL转SimpleFeatureCollection

        下面给出使用原生SQL作为输入,将结果转换为SimpleFeatureCollection的实例,核心方法如下:

 public static SimpleFeatureCollection executeSQL(String jdbcUrl, String user, String password, String sql) throws Exception {// 1. 建立数据库连接try (Connection conn = DriverManager.getConnection(jdbcUrl, user, password);Statement stmt = conn.createStatement();ResultSet rs = stmt.executeQuery(sql)) {// 2. 根据ResultSet元数据构建SimpleFeatureTypeResultSetMetaData meta = rs.getMetaData();SimpleFeatureTypeBuilder typeBuilder = new SimpleFeatureTypeBuilder();typeBuilder.setName("ResultType");for (int i = 1; i <= meta.getColumnCount(); i++) {String colName = meta.getColumnName(i);Class<?> binding = getBinding(meta.getColumnClassName(i));if(colName.equals("geom")) {//必须要设置空间类型,请注意空间函数的使用,否则样式标绘将不起作用typeBuilder.add("geom",  Geometry.class);//注册空间字段}else {typeBuilder.add(colName, binding);}}SimpleFeatureType featureType = typeBuilder.buildFeatureType();// 3. 转换结果集为FeatureCollectionListFeatureCollection collection = new ListFeatureCollection(featureType);SimpleFeatureBuilder featureBuilder = new SimpleFeatureBuilder(featureType);while (rs.next()) {for (int i = 1; i <= meta.getColumnCount(); i++) {Object value = rs.getObject(i);// 特殊处理几何对象(如WKB格式)if (meta.getColumnName(i).equals("geom")) {String wkt = value.toString(); value = convertWKTWithSRID(wkt);}featureBuilder.set(meta.getColumnName(i), value);}SimpleFeature feature = featureBuilder.buildFeature(null);collection.add(feature);}return collection;}
}

        在这里可以看到,在方法中,我们传入了数据库的连接信息和需要执行的SQL语句。这样做的好处就是可以直接在GeoTools中实现SQL的简单查询操作。 这里需要注意的就是在创建TypeBuilder时设置的字段的属性,一定要包含空间字段,否则在后期的样式绘制时就没有空间信息进行标绘。

4、集成调用

        集成调用的方法比较简单,主要就是传入相应的数据库连接信息,同时传入需要执行的空间表查询SQL,然后即可获取查询结果。

String jdbcUrl = "jdbc:postgresql://"+ PG_HOST +":"+ PG_PORT +"/" + PG_DB;
String execSql = " select t.name,tc.city_code,st_asewkt(t.geom) AS geom from biz_geographic_name t,biz_city tc  ";
execSql += " where tc.province_code = '520000' and t.classz in ('AD','AC') and  st_contains(tc.geom, t.geom) ";
//3、执行原生sql查询并转换为SimpleFeatureCollection
SimpleFeatureCollection features = executeSQL(jdbcUrl, PG_USER, PG_PASS, execSql);

5、成果预览

        关于如何生成预览图,。如何进行生成数据的标绘,这里不再进行详细的介绍。这里贴出一幅图,大家可以大致看到程序的运行调用情况,如下图所示:

        完成后,在预期的磁盘空间中可以看到以下的图片,说明数据加载成功,标绘成功。 

三、总结

        以上就是本文的主要内容,本研究旨在探索基于 PostGIS 的 GeoTools 执行原生 SQL 查询制图的方法和技术流程。首先,对贵州省行政区划及地级市驻地的空间数据进行整理和导入到 PostGIS 中,确保数据的准确性和完整性。然后,深入研究 GeoTools 中如何构建原生 SQL 查询语句,以满足对特定地理空间数据的查询需求,例如查询特定地级市的行政区划范围、地级市驻地的位置及其周边地理要素等。在此基础上,利用 GeoTools 的渲染引擎和制图工具,将查询结果转化为直观的地理地图,通过调整符号化、图层叠加、地图布局等元素,使地图能够清晰地展示贵州省行政区划及地级市驻地的空间分布特征和相关地理信息。

        针对于未来,可以做的工作还很多,需要优化的空间很大,比如在执行时我们需要使用连接池,而不是硬编码的方式进行执行。同时在进行数据映射绑定时,还可以采用其他的绑定框架。那么留一点题目,作为后续的系列内容讲解吧。行文仓促,定有不足之处,欢迎各位朋友在评论区批评指正,不胜感激。

相关文章:

基于PostGIS的GeoTools执行原生SQL查询制图实践-以贵州省行政区划及地级市驻地为例

目录 前言 一、空间相关表简介 1、地市行政区划表 2、地市驻地信息表 3、空间查询检索 二、GeoTools制图实现 1、数据类型绑定 2、WKT转Geometry 3、原生SQL转SimpleFeatureCollection 4、集成调用 5、成果预览 三、总结 前言 在当今这个信息爆炸的时代&#xff0c…...

MySQL字段类型完全指南:选型策略与实战应用

引言 在数据库设计中&#xff0c;字段类型的选择直接影响数据存储效率、查询性能和系统稳定性。本文将系统梳理MySQL支持的字段类型&#xff0c;结合典型应用场景与避坑指南&#xff0c;助你构建高性能、易维护的数据库结构。 一、字段类型全景图 MySQL字段类型主要分为以下五…...

NLP实战(5):基于LSTM的电影评论情感分析模型研究

目录 摘要 1. 引言 2. 相关工作 3. 方法 3.1 数据预处理 3.2 模型架构 3.3 训练策略 3.4 交叉验证 4. 实验与结果 4.1 数据集 4.2 实验结果 4.3训练日志 4.4 示例预测 5. 讨论 6. 结论 附录代码 展示和免费下载 摘要 本文提出了一种基于双向LSTM的深度学习模…...

DHCP应用

一、DHCP介绍 在LAN(局域网)中我们常会遇到以下的情况&#xff1a; 1.不知道如何配置IP地址及相关信息的员工&#xff0c;无法上网&#xff1b;2.IP地址配置冲突&#xff0c;无法上网&#xff1b;3.来访用户因不熟悉公司网络情况无法上网&#xff1b; 以上这些情况都是日常最…...

基于MATLAB的FTN调制和硬判决的实现

在数字通信中&#xff0c;FTN&#xff08;Full-Transmit-Null&#xff09;是一种调制技术&#xff0c;用于在有限带宽的信道中传输数据。FTN调制通过在符号之间插入零值&#xff0c;使得频谱在符号速率的整数倍处为零&#xff0c;从而减少频谱重叠。硬判决是一种简单的解调方式…...

涂装协作机器人:重新定义涂装工艺的智能化未来

一、涂装场景的产业变革与核心诉求 1.1 千亿级市场的技术突围战 在汽车制造领域&#xff0c;涂装车间被称为"工业化妆间"&#xff0c;其工艺质量直接影响产品溢价能力。当前行业面临三重挑战&#xff1a; 质量维度&#xff1a;传统人工喷涂存在膜厚波动15μm的行业…...

c++面向对象第4天---拷贝构造函数与深复制

含有对象成员的构造函数深复制与浅复制拷贝&#xff08;复制&#xff09;构造函数 第一部分&#xff1a;含有对象成员的构造函数 以下是一个学生 类包含日期成员出生日期的代码 #include<iostream> using namespace std; class Date { public:Date(int year,int month…...

Windows版PostgreSQL 安装 vector 扩展

问题 spring-ai在集成PGVector向量存储的时候会报错如下&#xff0c;那么就需要安装pgsql的vector扩展。 SQL [CREATE EXTENSION IF NOT EXISTS vector]; 错误: 无法打开扩展控制文件 "C:/Program Files/PostgreSQL/9.6/share/extension/vector.control": No such …...

KINGCMS被入侵

现象会强制跳转到 一个异常网站,请掉截图代码. 代码中包含经过混淆处理的JavaScript&#xff0c;它使用了一种技术来隐藏其真实功能。代码中使用了eval函数来执行动态生成的代码&#xff0c;这是一种常见的技术&#xff0c;恶意脚本经常使用它来隐藏其真实目的。 这段脚本会检…...

完美解决在pycharm中创建Django项目安装mysqlclient报错的问题(windows下)

正常情况下&#xff0c;在Windows安装mysqlclient会报错&#xff1a; 我这里用的是anaconda虚拟环境&#xff0c;安装前必须激活anacoda虚拟环境&#xff0c; 怎么激活虚拟环境&#xff1f;可以参考超详细的pycharmanaconda搭建python虚拟环境_pycharm anaconda环境搭建-CSDN博…...

『React』组件副作用,useEffect讲解

在 React 开发中&#xff0c;有时候会听到“副作用”这个词。特别是用到 useEffect 这个 Hook 的时候&#xff0c;官方就明确说它是用来处理副作用的。那什么是副作用&#xff1f;为什么我们要专门管控它&#xff1f;今天就聊聊 React 中的组件副作用。 &#x1f4cc; 什么是“…...

使用VSCode在WSL和Docker中开发

通过WSL&#xff0c;开发人员可以安装 Linux 发行版&#xff08;例如 Ubuntu、OpenSUSE、Kali、Debian、Arch Linux 等&#xff09;&#xff0c;并直接在 Windows 上使用 Linux 应用程序、实用程序和 Bash 命令行工具&#xff0c;不用进行任何修改&#xff0c;也无需使用传统虚…...

ZooKeeper 命令操作

文章目录 Zookeeper 数据模型Zookeeper 服务端常用命令Zookeeper 客户端常用命令 Zookeeper 数据模型 ZooKeeper 是一个树形目录服务,其数据模型和Unix的文件系统目录树很类似&#xff0c;拥有一个层次化结构。这里面的每一个节点都被称为&#xff1a; ZNode&#xff0c;每个节…...

解决 Ubuntu 20.04 虚拟机中 catkin_make 编译卡死问题

完整解决步骤 1. 禁用当前交换文件 sudo swapoff /swapfile 2. 删除旧的交换文件 sudo rm /swapfile 3. 使用更可靠的创建方法 # 使用 dd 命令创建交换文件&#xff08;更兼容但较慢&#xff09; sudo dd if/dev/zero of/swapfile bs1M count4096# 或者使用 truncate 命令…...

【HTML-15】HTML表单:构建交互式网页的基石

表单是HTML中最强大的功能之一&#xff0c;它允许网页收集用户输入并与服务器进行交互。无论是简单的搜索框、登录页面&#xff0c;还是复杂的多步骤调查问卷&#xff0c;表单都是实现这些功能的核心元素。本文将深入探讨HTML表单的各个方面&#xff0c;帮助您构建高效、用户友…...

一些较好的学习方法

1、网上有一些非常经典的电路&#xff0c;而且有很多视频博主做了详细的讲解。 2、有一部分拆解的UP主&#xff0c;拆解后会还原该器件的原理图&#xff0c;并一步步做讲解。 3、有两本书&#xff0c;数电、模电&#xff0c;这两本书中的内容很多都值得学习。 5、某宝上卖的…...

Redis底层数据结构之深入理解跳表(1)

在上一篇文章中我们详细的介绍了一下Redis中跳表的结构以及为什么Redis要引入跳表而不是平衡树或红黑树。这篇文章我们就来详细梳理一下跳表的增加、搜索和删除步骤。 SkipList的初始化 跳表初始化时&#xff0c;将每一层链表的头尾节点创建出来并使用集合将头尾节点进行存储&…...

鸿蒙【HarmonyOS 5】 (React Native)的实战教程

一、环境配置 ‌安装鸿蒙专属模板‌ bashCopy Code npx react-native0.72.5 init HarmonyApp --template react-native-template-harmony:ml-citation{ref"4,6" data"citationList"} ‌配置 ArkTS 模块路径‌ 在 entry/src/main/ets 目录下创建原生模块&…...

PCB设计教程【入门篇】——电路分析基础-元件数据手册

前言 本教程基于B站Expert电子实验室的PCB设计教学的整理&#xff0c;为个人学习记录&#xff0c;旨在帮助PCB设计新手入门。所有内容仅作学习交流使用&#xff0c;无任何商业目的。若涉及侵权&#xff0c;请随时联系&#xff0c;将会立即处理 目录 前言 一、数据手册的重要…...

20250529-C#知识:继承、密封类、密封方法、重写

C#知识&#xff1a;继承、密封类、密封方法、重写 继承是面向对象的三大特性之一&#xff0c;通过继承能够减少重复代码的编写&#xff0c;有助于提升开发效率。 1、继承 C#不同于C&#xff0c;只支持单继承当子类出现与父类同名的成员时&#xff0c;父类成员被隐藏&#xff0…...

从0到1,带你走进Flink的世界

目录 一、Flink 是什么&#xff1f; 二、Flink 能做什么&#xff1f; 三、Flink 架构全景概览 3.1 分层架构剖析 3.2 核心组件解析 四、Flink 的核心概念 4.1 数据流与数据集 4.2 转换操作 4.3 窗口 4.4 时间语义 4.5 状态与检查点 五、Flink 安装与快速上手 5.1 …...

springboot @value

#springboot value value 可以读取 yaml 中 的数据...

Dify-5:Web 前端架构

本文档提供了 Dify Web 前端架构的技术概述&#xff0c;包括核心组件、结构和关键技术。它解释了前端如何组织、组件如何通信以及国际化功能如何实现。 技术栈 Dify 的 Web 前端基于现代 JavaScript 技术栈构建&#xff1a; 框架&#xff1a;Next.js&#xff08;基于 React …...

深度学习赋能图像识别:技术、应用与展望

论文&#xff1a; 一、引言​ 1.1 研究背景与意义​ 在当今数字化时代&#xff0c;图像作为信息的重要载体&#xff0c;广泛存在于各个领域。图像识别技术旨在让计算机理解和识别图像内容&#xff0c;将图像中的对象、场景、行为等信息转化为计算机能够处理的符号或数据 &am…...

八N皇后问题

1 问题的提出 在8X8格的国际象棋上摆放八个皇后&#xff0c;使其不能互相攻击&#xff0c;即任意两个皇后都不能处于同一行、同一列或同一斜线上&#xff0c;问有多少种摆法 我们的任务就是用MATLAB进行求解 2 数学模型的构建 首先我们分析题目就是 任意两个皇后都不能处于…...

TMS320F28388D使用sysconfig配置IPC

第1章 配置IPC底层代码 使用IPC的动机&#xff1a; 我计划我的项目中要使用RS485&#xff0c;CANFD通信和EtherCAT通信&#xff0c;由于通信种类较多&#xff0c;而对于电机控制来说大部分数据都是重复的&#xff0c;并且有些数据可以很久才改变一次&#xff0c;所以我计划使…...

代码训练LeetCode(19)轮转数组

代码训练(19)LeetCode之轮转数组 Author: Once Day Date: 2025年6月3日 漫漫长路&#xff0c;才刚刚开始… 全系列文章可参考专栏: 十年代码训练_Once-Day的博客-CSDN博客 参考文章: 189. 轮转数组 - 力扣&#xff08;LeetCode&#xff09;力扣 (LeetCode) 全球极客挚爱的…...

每日算法 -【Swift 算法】将整数转换为罗马数字

&#x1f4a1; Swift&#xff1a;将整数转换为罗马数字&#xff08;含思路讲解与详细注释&#xff09; 罗马数字是一种古老的数字表示方式&#xff0c;虽然在现代我们不再使用它进行计算&#xff0c;但在表盘、章节、纪念碑等地方依然很常见。今天我们就来实现一个经典算法题&…...

Qwen与Llama分词器核心差异解析

Qwen和 Llama 词映射(分词器)的区别及通用词映射逻辑 一、Qwen 与 Llama 词映射(分词器)区别 维度Qwen 分词器Llama 分词器技术基础基于字节级别字节对编码(BBPE),以 cl100k 为基础词库,扩充中文字词、多语言词汇基于 BPE,但依赖 SentencePiece 单字模型,核心为英文优…...

华为云Flexus+DeepSeek征文 | 基于ModelArts Studio 与 Cline 快速构建AI编程助手

目录 一、前言 二、ModelArts Studio&#xff08;MaaS&#xff09;介绍与应用场景 2.1ModelArts Studio&#xff08;MaaS&#xff09;介绍 2.2 ModelArts Studio&#xff08;MaaS&#xff09;使用场景 2.3 开通MaaS服务 2.4 开通DeepSeek-V3商用服务 三、Cline简介和安装 3.1 C…...