基于Java在高德地图面查询检索中使用WGS84坐标的一种方法-以某商场的POI数据检索为例
前言
随着移动互联网的飞速发展,基于位置的服务(LBS)需求日益增长,越来越多的应用需要从地图中检索特定区域内的地理信息,例如商业场所、公共服务设施等。商场作为城市商业活动的重要载体,其周边的地理信息对于消费者、商家以及城市规划者都具有重要的参考价值。例如,消费者可以通过检索商场周边的交通设施、餐饮场所等信息,来安排购物和休闲计划;商家则可以分析商场周边的人流量、竞争对手分布等信息,进行市场定位和营销策略的制定;城市规划者也可以借助这些数据,优化城市商业布局和交通规划。
在高德地图中,POI(Point of Interest,兴趣点)数据是一种重要的地理信息资源,它包含了各种类型的地理实体,如商场、酒店、餐厅、学校等。对于商场的 POI 数据检索,在高德地图中,默认采用的是中国标准的火星坐标系(GCJ-02)。WGS84 坐标系统是一种全球通用的地理坐标系统,具有高精度和广泛的兼容性,能够准确地定位地球表面的任意一点,同时在很多的应用中,空间参考使用的WGS84的坐标系。通过将商场及其周边区域的地理信息可以实现对特定区域内的 POI 数据的高效查询和精准检索。但是需要注意的是,在高德的检索API中,其传入的检索面数据的坐标是高德的。因此如果您的需求是传入WGS84的坐标,那么就需要进行坐标转换后才能作为查询参数传入。
本文将以某商场的 POI 数据检索为例,深入探讨这一方法的实现过程和应用效果,旨在为相关领域的研究和实践提供参考和借鉴。除了讲解如何实现不同的空间面转换查询,还讲解如何实现对高德地图进行穷举查询。
一、面数据检索简介
本节将重点对高德地图中的的面检索API进行一个简单的介绍。分别从服务地址、请求参数、响应参数三个方面来进行讲解。
1、服务地址
多边形区域搜索 API 服务地址
URL | 请求方式 |
https://restapi.amap.com/v5/place/polygon?parameters | GET |
parameters 代表的参数包括必填参数和可选参数。所有参数均使用和号字符(&)进行分隔。下面的列表枚举了这些参数及其使用规则。
2、请求参数
参数名 | 含义 | 规则说明 | 是否必须 | 缺省值 |
key | 高德Key | 用户在高德地图官网 申请 Web 服务 API 类型 Key | 必填 | 无 |
polygon | 多边形区域 | 多个坐标对集合,坐标对用"|"分割。多边形为矩形时,可传入左上右下两顶点坐标对;其他情况下首尾坐标对需相同。 | 必填 | 无 |
keywords | 地点关键字 | 需要被检索的地点文本信息。 只支持一个关键字 ,文本总长度不可超过80字符 | 可选 | 无 |
types | 指定地点类型 | 地点文本搜索接口支持按照设定的 POI 类型限定地点搜索结果;地点类型与 poi typecode 是同类内容,可以传入多个 poi typecode,相互之间用“|”分隔,内容可以参考 POI 分类码表;地点(POI)列表的排序会按照高德搜索能力进行综合权重排序; | 可选 | 120000(商务住宅) 150000(交通设施服务) |
show_fields | 返回结果控制 | show_fields 用来筛选 response 结果中可选字段。show_fields 的使用需要遵循如下规则: 1、具体可指定返回的字段类请见下方返回结果说明中的“show_fields”内字段类型; 2、多个字段间采用“,”进行分割; 3、show_fields 未设置时,只返回基础信息类内字段。 | 可选 | 空 |
page_size | 当前分页展示的数据条数 | page_size 的取值1-25 | 可选 | page_size 默认为10 |
page_num | 请求第几分页 | 请求第几分页 | 可选 | page_num 默认为1 |
sig | 数字签名 | 请参考数字签名获取和使用方法 | 可选 | 无 |
output | 返回结果格式类型 | 默认格式为 json,目前只支持 json 格式; | 可选 | json |
callback | 回调函数 | callback 值是用户定义的函数名称,此参数只在 output 参数设置为 JSON 时有效。 | 可选 | 无 |
3、服务示例
https://restapi.amap.com/v5/place/polygon?polygon=116.460988,40.006919|116.48231,40.007381|116.47516,39.99713|116.472596,39.985227|116.45669,39.984989|116.460988,40.006919&keywords=肯德基&types=050301&key=<用户的key>
参数 | 值 | 备注 | 必选 |
---|---|---|---|
polygon | 多边形区域,多个坐标对集合,坐标对用"|"分割。多边形为矩形时,可传入左上右下两顶点坐标对;其他情况下首尾坐标对需相同 | 是 | |
keywords | 地点关键字,需要被检索的地点文本信息 | 可选 | |
types | 指定地点类型,地点文本搜索接口支持按照设定的 POI 类型限定地点搜索结果;地点类型与 poi typecode 是同类内容,可以传入多个 poi typecode,相互之间用“|”分隔,内容可以参考 POI 分类码表;地点(POI)列表的排序会按照高德搜索能力进行综合权重排序; |
4、返回结果
名称 | 类型 | 说明 | ||
status | string | 本次 API 访问状态,如果成功返回1,如果失败返回0。 | ||
info | string | 访问状态值的说明,如果成功返回"ok",失败返回错误原因,具体见 错误码说明。 | ||
infocode | string | 返回状态说明,10000代表正确,详情参阅 info 状态表 | ||
count | string | 单次请求返回的实际 poi 点的个数 | ||
pois | object | 返回的 poi 完整集合 | ||
poi | 单个 poi 内包含的完整返回数据 | |||
name | string | poi 名称 | ||
id | string | poi 唯一标识 | ||
location | string | poi 经纬度 | ||
type | string | poi 所属类型 | ||
typecode | string | poi 分类编码 | ||
pname | string | poi 所属省份 | ||
cityname | string | poi 所属城市 | ||
adname | string | poi所属区县 | ||
address | string | poi 详细地址 | ||
pcode | string | poi 所属省份编码 | ||
adcode | string | poi 所属区域编码 | ||
citycode | string | poi 所属城市编码 | ||
注意以下字段如需返回需要通过“show_fields”进行参数类设置。 | ||||
children | object | 设置后返回子 POI 信息 | ||
id | string | 子 poi 唯一标识 | ||
name | string | 子 poi 名称 | ||
location | string | 子 poi 经纬度 | ||
address | string | 子 poi 详细地址 | ||
subtype | string | 子 poi 所属类型 | ||
typecode | string | 子 poi 分类编码 | ||
business | object | 设置后返回子 POI 信息 | ||
business_area | string | poi 所属商圈 | ||
tel | string | poi 的联系电话 | ||
tag | string | poi 特色内容,目前仅在美食 poi 下返回 | ||
rating | string | poi 评分,目前仅在餐饮、酒店、景点、影院类 POI 下返回 | ||
cost | string | poi 人均消费,目前仅在餐饮、酒店、景点、影院类 POI 下返回 | ||
parking_type | string | 停车场类型(地下、地面、路边),目前仅在停车场类 POI 下返回 | ||
alias | string | poi 的别名,无别名时不返回 | ||
indoor | object | 设置后返回室内相关信息 | ||
indoor_map | string | 是否有室内地图标志,1为有,0为没有 | ||
cpid | string | 如果当前 POI 为建筑物类 POI,则 cpid 为自身 POI ID;如果当前 POI 为商铺类 POI,则 cpid 为其所在建筑物的 POI ID。 indoor_map 为0时不返回 | ||
floor | string | 楼层索引,一般会用数字表示,例如8;indoor_map 为0时不返回 | ||
truefloor | string | 所在楼层,一般会带有字母,例如F8;indoor_map 为0时不返回 | ||
navi | object | 设置后返回导航位置相关信息 | ||
navi_poiid | string | poi 对应的导航引导点坐标。大型面状 POI 的导航引导点,一般为各类出入口,方便结合导航、路线规划等服务使用 | ||
entr_location | string | poi 的入口经纬度坐标 | ||
exit_location | string | poi 的出口经纬度坐标 | ||
gridcode | string | poi 的地理格 id | ||
photos | object | 设置后返回 poi 图片相关信息 | ||
title | string | poi 的图片介绍 | ||
url | string | poi 图片的下载链接 |
二、面数据检索实践
介绍完以上的面数据检索API的具体内容之后,下面结合具体的一个商场-以步步高梅溪新天地为例,重点介绍基于梅溪新天地的面数据检索。同时对比使用GCJ-02和WGS84两个不同的坐标参考,最后介绍使用穷举的办法实现面数据的检索。
1、GCJ-02面检索
关于如何定义API来创建高德地图的请求这里不再进行赘述。为了演示方便,我们使用的数据查询面是直接从高德地图获取的面数据。因此,我们最开始的查询面数据类型是GCJ-02的类型,为了演示WGS84,我们需要将GCJ-02的参考坐标转换为WGS84后,转换办法在下面的内容中给出。
/**
* - 根据兴趣面来搜索范围内的POI数据
* @throws InterruptedException
*/
@Test
public void searchByPolygon() throws InterruptedException {String polygon = "112.859225,28.20061;112.859172,28.20059;112.859117,28.200556;112.859058,28.200503;112.859003,28.200391;112.858739,28.199761;112.858627,28.199041;112.858673,28.198558;112.859401,28.196282;112.859435,28.196228;112.859515,28.196194;112.859594,28.196185;112.859938,28.196191;112.860163,28.196155;112.860421,28.196063;112.860709,28.195926;112.860964,28.195702;112.861103,28.195304;112.861116,28.195285;112.86115,28.195274;112.863672,28.195709;112.863705,28.195727;112.863726,28.195767;112.863732,28.195806;112.863328,28.197513;112.863249,28.19793;112.863134,28.198666;112.863084,28.198923;112.862918,28.19949;112.862647,28.200901;112.862622,28.200931;112.862583,28.200958;112.862531,28.200989;112.862463,28.201008;112.859225,28.20061";polygon = polygon.replaceAll(";", "|");String keywords = "";String types = "080000|060000";String page_size = "25";//String region = "430104";String show_fields = "children,business,indoor,navi,photos";HttpResponse<String> result = null;for(int i = 1;i<= 1;i++) {result = amapSearchService.searchByPolygon(polygon, keywords, types, page_size, String.valueOf(i), show_fields, AMAP_CLIENT_AK);System.out.println(result.getBodyResult());Thread.sleep(3000L);//休眠3000秒}}
运行以后在IDE的控制台中可以看到有以下的输出,说明按照面检索成功,返回数据如下:
可以看到,使用GCJ-02的面数据检索返回的数据是准确的,符合我们的查询预期。是所属商场返回的POI数据。
2、WGS84面检索
除了直接使用GCJ-02的这种查询方式,我们更多的场景下需要使用WGS84的坐标,因此我们需要使用将GCJ-02的坐标转换成WGS84,关于如何进行转换,可以查看以下的方法:
private String gcg2wgs82(String source) {StringBuffer wgs84 = new StringBuffer(source.length());String [] AOI_Str_Array = source.split(";");//处理坐标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);wgs84.append(gcj284[0]).append(",").append(gcj284[1]).append("|");}return wgs84.substring(0, wgs84.length()-1);
}
下面是更详细的gcj-02坐标转wgs84点数据的转换方法,
/**
* -GCJ02(火星坐标系)转GPS84
*
* @param lng 火星坐标系的经度
* @param lat 火星坐标系纬度
* @return WGS84坐标数组
*/
public static double[] gcj02towgs84(double lng, double lat) {if (out_of_china(lng, lat)) {return new double[] { lng, lat };}double dlat = transformlat(lng - 105.0, lat - 35.0);double dlng = transformlng(lng - 105.0, lat - 35.0);double radlat = lat / 180.0 * pi;double magic = Math.sin(radlat);magic = 1 - ee * magic * magic;double sqrtmagic = Math.sqrt(magic);dlat = (dlat * 180.0) / ((a * (1 - ee)) / (magic * sqrtmagic) * pi);dlng = (dlng * 180.0) / (a / sqrtmagic * Math.cos(radlat) * pi);double mglat = lat + dlat;double mglng = lng + dlng;return new double[] { lng * 2 - mglng, lat * 2 - mglat };
}
与GCJ-02坐标的面检索方法一致,我们将GCJ-02坐标转为WGS84后,再进行检索实验,可以看到以下的数据。
可以看到,在返回的检索结果数据中。跟之前返回的数据不一致了,熟悉步步高梅溪新天地的朋友应该知道,这些POI兴趣点已经不在指定的商场里面了。 由此我们得出一个结论,就是调用高德的面数据查询中,传入的面数据的坐标类型是GCJ-02,如果传入的是WGS84,其最后的计算结果肯定会偏移,因此要求大家前偏转回来或者直接使用GCJ-02的坐标参考。这个知识点也是本博客的重点。
3、穷举检索实现
与天地图和百度地图的API不同的是,在高德的数据返回接口中,没有一个明确的总数的概念。而通常在实际业务中,我们需要将所有的数据都进行抓取,在这里我们可以使用穷举的方法来是,简单来讲就是保证调用服务最少调用一次,然后通过返回的当前数据条数有没有大于0,如果大于0,表示当前还有数据,需要继续;否则停止调用。这个翻译成代码如下所示:
HttpResponse<String> result = null;
int scrapingIndex = 1;
int dataCount = 0;
do {result = amapSearchService.searchByPolygon(gcjPolygon, keywords, types, page_size, String.valueOf(scrapingIndex), show_fields, AMAP_CLIENT_AK);System.out.println("使用高德面搜索结果");System.out.println(result.getBodyResult());if(StringUtils.isNotEmpty(result.getBodyResult())) {AmapSearchVO searchVO = gson.fromJson(result.getBodyResult(), AmapSearchVO.class);System.out.println(searchVO.getCount());dataCount = searchVO.getCount();scrapingIndex ++;}Thread.sleep(3000L);//休眠3000秒
} while (dataCount > 0);
System.out.println("一共抓取数据页数:" + scrapingIndex);
使用的方法就是使用do...while循环,至少保证一次进入,在符合条件的情况下,循环推出。
运行上面的程序后,可以看到数据被抓取到了,而且还分页了。数据结果如下:
同时在Eclipse中可以看到以下输出,这句话表示当前的数据检索大约有10页,超过10页基本也就没数据了。
一共抓取数据页数:10
三、总结
以上就是本文的主要内容,本文将以某商场的 POI 数据检索为例,深入探讨这一方法的实现过程和应用效果,旨在为相关领域的研究和实践提供参考和借鉴。除了讲解如何实现不同的空间面转换查询,还讲解如何实现对高德地图进行穷举查询。Java 作为一种广泛使用的编程语言,具有良好的跨平台性、稳定性和丰富的开发库,为实现基于高德地图的 POI 数据检索提供了强大的技术支持。利用 Java 开发的高德地图 API,可以方便地调用地图服务,实现坐标转换、地图绘制、数据查询等功能。因此,研究基于 Java 在高德地图面查询检索中使用 WGS84 坐标的方法,对于提高商场 POI 数据检索的准确性和效率具有重要的现实意义。通过本文,不仅可以学习高德地图的按面检索API,同时了解了使用不同的坐标参考系的查询结果影响,通过实例对结果进行了简单的说明。行文仓促,定有不足之处,欢迎各位朋友在评论区批评指正,不胜感激。
相关文章:
基于Java在高德地图面查询检索中使用WGS84坐标的一种方法-以某商场的POI数据检索为例
前言 随着移动互联网的飞速发展,基于位置的服务(LBS)需求日益增长,越来越多的应用需要从地图中检索特定区域内的地理信息,例如商业场所、公共服务设施等。商场作为城市商业活动的重要载体,其周边的地理信息…...
6K型护套连接器DLJ0601(2000)-00
6K型护套连接器DLJ0601(2000)-00简介 6K型护套连接器DLJ0601(2000)-00是一种用于电气连接的组件,广泛应用于工业设备、通信系统和电子设备中。该连接器设计紧凑,具有高可靠性和耐用性,适用于多种环境条件下的电气连接需求。 主要特点 高可…...
Hexo的Next主题的Config文件内方便修改的参数(Chat-Gpt)
这是对 Hexo 的 Next 主题 _config.yml 文件各部分配置项的中文解释,帮助你更方便地进行定制: 🚀 核心设置 cache / minify cache.enable: 启用缓存,加快生成速度。minify: 是否压缩生成的 HTML/CSS/JS。 custom_file_path 自…...
【three】给立方体的每个面加载不同贴图
效果图: 主要代码: initCube() {let _this thisconst geometry new Three.BoxGeometry(1, .3, .5)let TextureLoader new Three.TextureLoader()let mater1TextureLoader.load(require(/assets/images/bg2.jpg),function (texture){console.log(tex…...
vscode怎么关闭自动定位文件
关闭自动定位文件功能 方式1 在设置中搜索: explorer.autoReveal 方式2 直接在settings.json中增加"explorer.autoReveal": false 添加类似jetbrains IDE的文件定位功能 可以直接安装插件市场搜索niushuaibing.vs-location, 安装后会有文件定位按钮, 点击后即可…...
2025-5-19Vue3快速上手
1、toRefs和toRef 当解构一个响应式对象(如 reactive 创建的对象)时,直接解构会失去响应性,此时可用 toRefs或toRef 保持响应性 toRef 的核心作用是将对象的属性转换为 ref,保持与原属性的双向绑定,无论原…...
HDMI 屏幕 电脑HDMI HDMI采集卡的关系
一、HDMI接口方向性原理 普通设备的HDMI接口方向: 电脑的HDMI接口:无论是显卡还是主板上的HDMI,均为输出端(信号源),只能向外发送视频信号,无法接收输入信号。 显示器的HDMI接口:均…...
JESD204 ip核使用与例程分析(二)
JESD204 ip核使用与例程分析(二) JESD204时钟方案专用差分时钟对例程分析jesd204_0_transport_layer_demapperjesd204_0_sig_chkjesd204_0_clockingjesd204_0 ip核port寄存器AXI-LITE寄存器配置jesd204_phy ip核JESD204时钟方案 图3-1所示为最通用、灵活的时钟解决方案。在图…...
如何使用VCS+XA加密verilog和spice网表
如果要交付verilog,但是需要对方进行VCS仿真,那么可以用以下方法: 一、基于编译指令的局部加密 适用场景:需精确控制加密范围(如仅加密核心算法或敏感逻辑)。 实现步骤: 代码标注…...
Grafana之Dashboard(仪表盘)
在前面的小节中介绍了Grafana中4中常用的可视化面板的使用,通过在面板中使用PromQL表达式,Grafana能够方便的将Prometheus返回的数据进行可视化展示。例如,在展示主机CPU使用率时,我们使用了如下表达式: 1 - (avg(ira…...
AOSP 中常见的键值对存储方式全解析(适用于系统开发与应用开发)
在 Android 系统开发(AOSP)中,键值对(Key-Value)存储是一种基础且广泛使用的数据持久化方式。从系统属性、用户设置,到应用配置,都依赖于这种结构的存储方式。本文将全面梳理 AOSP 中主流的键值…...
集合进阶2
Java不可变集合、Stream流与方法引用深度解析 一、不可变集合(Immutable Collections)进阶指南 1.1 不可变集合核心特性 防御性编程:防止外部修改数据(如传递集合给第三方库时)线程安全:天然支持多线程读…...
eMMC深度解析:嵌入式多媒体卡的硬件电路设计要点
一、eMMC 技术深度解析 1.定义与背景 eMMC(Embedded Multi Media Card)是一种专为嵌入式系统设计的非易失性存储解决方案,它将 NAND 闪存、主控芯片和接口协议封装在一个 BGA(Ball Grid Array)封装中。其核心目标是简…...
【SPIN】PROMELA语言编程入门同步机制(SPIN学习系列--4)
同步机制 PROMELA 不包含信号量、锁或监控器等常见的同步原语,而是通过语句的**可执行性(executability)**概念来建模同步机制。计算机系统的架构限制了同步机制的设计:本章主要介绍适用于共享内存系统的同步机制,第7…...
整数的个数
【描述】 给定k(1< k < 100)个正整数,其中每个数都是大于等于1,小于等于10的数。写程序计算给定的k个正整数中,1,5和10出现的次数。 【输入】 输入有两行:第一行包含一个正整数kÿ…...
AWS EKS IP 耗尽:原因、解决方案和最佳实践
想象一下,您的 AWS EKS 集群在生产环境中运行顺畅,所有 CI/CD 管道运行正常,服务优雅地扩展,一切都像自动驾驶模式一样。——直到有一天,新的 Pod 无法启动。 您深入研究 kubectl get pods 命令,发现一堆 P…...
艾默生流量计与Profibus DP主站转Modbus RTU/TCP网关通讯案例
艾默生流量计与Profibus DP主站转Modbus RTU/TCP网关通讯案例 在现代工业自动化控制系统中,艾默生流量计因其高精度、稳定性和易用性而备受青睐。然而,为了实现与不同协议设备之间的无缝通信,经常需要借助专业的通讯网关进行协议转换。本文将…...
Python测试单例模式
单例模式的核心思想 单例模式确保一个类只有一个实例,并提供一个全局访问点。这在需要控制资源访问(如配置文件、数据库连接等)时非常有用。 一个简单的示例: import threading import timeclass Singleton:instance Nonelock…...
Linux架构篇、第五章_06Jenkins 触发器全面解析与实战指南
Linux架构篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:jenkins触发器的介绍与使用 版本号: 1.0,0 作者: laowang 日期: 2025.05.16 适用环境:rocky9.5 文档说明 本文档为《jenkins 触发器的介绍与…...
如何快速更换电脑浏览器ip:教程与注意事项
无论是为了访问地域限制内容、保护隐私,还是解决网络问题,快速更换浏览器IP地址的需求日益增多。以下是快速更换电脑浏览器IP地址的几种常用方法及注意事项,结合了多种场景下的解决方案: 一、快速更换浏览器IP的方法 1. 代理服务…...
《黑马前端ajax+node.js+webpack+git教程》(笔记)——ajax教程(axios教程)
黑马程序员前端AJAX入门到实战全套教程,包含学前端框架必会的(ajaxnode.jswebpackgit),一套全覆盖 文章目录 框架前置导学AJAX-Day01-01.AJAX入门与axios使用什么是AJAX如何使用AJAX使用axios获取数据案例axios语法尝试获取数据代…...
超级管理员租户资源初始化与授权管理设计方案
背景说明 在多租户系统中,资源(如功能模块、系统菜单、服务能力等)需按租户维度进行授权管理。超级管理员在创建新租户时,需要初始化该租户的资源授权信息。 两种可选方案 方案描述方案 A:前端传入选中的资源列表创…...
【Python训练营打卡】day30 @浙大疏锦行
DAY 30 模块和库的导入 知识点回顾: 1. 导入官方库的三种手段 2. 导入自定义库/模块的方式 3. 导入库/模块的核心逻辑:找到根目录(python解释器的目录和终端的目录不一致) 作业:自己新建几个不同路径文件尝试下如何…...
微前端记录
微前端 实习过程中,做了些微前端方向的调研,记录下 微前端将前端拆分为独立的可以单独运行,测试,部署的代码, 具有技术栈无关,多团队,多业务线协作的特点。 前端现有的页面,分为单页…...
词嵌入基础
一 前言 最近在学习NLP方面知识,在此记录一下词嵌入的技术。 二 词袋法 1.理论 就是统计一个句子或文章中,词语出现的次数。这方法有去重词袋法,无去重词袋法。 a 原理与案例 chinese_docs ["我爱自然语言处理","自然语…...
CSS之网页元素的显示与隐藏(旧土豆网遮罩案例)
网页元素的显示与隐藏。 很多网页的侧边栏都会出现广告,我们点击关闭时,广告会消失不见,但若重新刷新网页页面,则广告会重新出现。网页的广告并非是真的被删除了,而是被暂时的隐藏起来了。 • display • visibil…...
关于 Web 漏洞原理与利用:2. XSS(跨站脚本攻击)
一、原理: 用户输入未过滤被执行 攻击者输入的内容,如果没有被正确处理(过滤/转义),被网页原样输出到浏览器中,那么这些内容就可能会被浏览器当成代码执行,这就是 XSS(跨站脚本攻击…...
【TTS回顾】深度剖析 TTS 合成效果的客观评估与主观评价
如何评估合成音色的效果 当我们面对一个新发布的 TTS 模型,或者在多个模型之间进行选择时,一个核心问题摆在我们面前:如何科学、全面地评估一个 TTS 模型的合成效果? 仅仅凭感觉“听一听”显然不够客观和系统。我们需要一套行之有效的评估方法和指标体系,来衡量 AI “说话…...
WPF点击按钮弹出一个窗口
一、基本方法:直接实例化并显示窗口 1. 普通窗口(无参数) 适用场景:简单的弹出窗口,无需传递数据。 private void Button_Click(object sender, RoutedEventArgs e) { var newWindow new MyWindow(); // 实例化…...
WPF中的ObjectDataProvider:用于数据绑定的数据源之一
ObjectDataProvider是WPF(Windows Presentation Foundation)中一种强大而灵活的数据绑定源,它允许我们将对象实例、方法结果甚至是构造函数的返回值用作数据源。通过本文,我将深入探讨ObjectDataProvider的工作原理、使用场景以及如何在实际应用中发挥其…...
Java POJO接收前端null值设置
在 Java 中,若要让 price 字段接收前端传递的 null 值,只需确保以下几点: 1. 使用包装类型 Double 你的 price 字段已经是包装类型 Double(而不是基本类型 double),这天然支持 null 值。基本类型 double …...
C++(24):容器类<list>
目录 一、核心概念 二、基本语法 1. 声明与初始化 2.添加元素 3.访问与遍历 4. 删除元素 三、特点 1. 高效插入/删除 2. 不支持随机访问 3. 特有成员函数 4. 内存与性能 四、示例代码 五、成员函数 六、使用场景 七、注意事项 Lists将元素按顺序储…...
WPF Data Binding 及经典应用示例
什么是Data Binding(数据绑定)? Data Binding是WPF中的核心机制,它建立了UI元素(视图)与数据对象(模型/视图模型)之间的连接通道,实现了数据的自动同步。当数据发生变化…...
Qt—模态与非模态对话框
Qt—模态与非模态对话框 核心概念 模态对话框:强制用户优先处理当前窗口,阻塞指定范围的用户交互。非模态对话框:允许用户自由切换窗口,无交互限制。 一、模态对话框类型与行为 1. 应用级模态(Applica…...
如何实现从网页一键启动你的 Electron 桌面应用(zxjapp://)
在现代桌面应用开发中,Electron 凭借其跨平台能力和前端友好的特性,受到了越来越多开发者的青睐。但你是否想过,如何让用户从网页上一键启动你本地的 Electron 应用?比如像某些云盘客户端那样,点击网页上的按钮就能直接…...
linux编译安装srs
下载编译运行 git clone https://github.com/ossrs/srs.git cd srs/trunk ./configure --h265on make需要安装 yum install -y patch yum install -y unzip yum install -y tcl编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/s…...
对于程序员的个人理解
系统架构师 1.下图是应该具备的能力,而且看前辈的资料中,发现干的时间越多就越全能。 2.对于新技术来说应该让其先沉淀三年左右看他是不是能打,同时可以避免其大规模的改动。 3.要有宏观视野 【要看自己所开发的东西是不是可以随时调用&am…...
Web安全基础
文章目录 前端基础浏览器工作原理HTTP超文本传输协议cookiesessiontoken web服务器USBWebServerNginx介绍 前端三大件html超文本标记语言CSS层叠样式表JavaScript基本语法php基本语法 攻击手段文件上传漏洞文件包含漏洞代码执行漏洞变量修改shell监听SQL注入跨站脚本XSSXSS示例…...
从秒开到丝滑体验!WebAssembly助力ZKmall商城重构 B2B2C 商城性能基线
在 B2B2C 电商领域,用户对页面加载速度与交互流畅度的要求日益严苛。传统 Web 技术在处理复杂业务逻辑、海量数据渲染时,常出现卡顿、延迟等问题,导致用户流失。ZKmall 商城创新性地引入 WebAssembly(简称 Wasm)技术&a…...
word文档交叉引用
参考视频 论文排版中参考文献的引用方法:交叉引用法_哔哩哔哩_bilibili 具体操作 定义编号格式 进入开始页面,重新定义编号格式. 碰到的问题 出现了一个大大的空格,不知道是什么情况,想把编号和参考文献紧贴在一起。 调整列…...
项目QT+ffmpeg+rtsp(三)——延迟巨低的项目+双屏显示
文章目录 前言双屏显示widget.cppwidget.h前言 对于复现情况,分为两种情况 第一种,对于我而言,是直接解压后,就能直接运行了 第二种,对于师兄而言,需要你构建debug后,会产生这个文件夹,执行的时候,地址应该在这,我猜的,这里面没有dll,exe程序就找不到dll这些库,你…...
二分交互题总结
简单版 bool query(int x){cout<<x<<endl;cout.flush();string ans;cin>>ans;return (ans">"); } void solve() {int n;cin>>n;int l1,rn;if(n1)return cout<<"! 1"<<endl,void();if(n2){if(query(2))return cout&…...
昆仑通态MCGSpro,自定义配方功能
最近在做一个机床的控制系统,是用来打磨轴承滚子的,用到了昆仑通态触摸屏,西门子1200,以及1个台达变频器,五个私服电机。大致就是下面这个设备。 对于西门子1200运动控制的相关内容,以及调试过程中遇到的坑…...
工业视觉高精度测量利器——Halcon卡尺工具深度解析
Halcon中的卡尺工具(Caliper Tool)是工业视觉中用于高精度边缘检测和几何测量的重要功能,尤其在尺寸测量、定位和对象分析中广泛应用。以下从原理、实现到优化的深度解析: 1. 卡尺工具实现原理(步骤分解)…...
2025毕业论文与答辩资料精选汇总
毕业季来临,对于即将毕业的大学生来说,毕业论文和答辩无疑是毕业季的“重头戏”。尤其是对于IT行业的学生来说,毕业论文不仅需要扎实的专业知识,还需要良好的表达能力和清晰的逻辑思维。今天,我为大家整理了一份涵盖IT…...
「数智化聚合分销生态系统」定制开发:重构全渠道增长引擎
在数字经济深度重构全球商业格局的时代,企业亟需突破传统分销体系的效能边界,构建具有核心竞争力的现代化营销网络。我们以行业前沿技术为驱动,提供全栈式聚合分销系统定制开发服务,通过深度融合数字化、智能化解决方案࿰…...
【物联网】 ubantu20.04 搭建L2TP服务器
部署篇 序言 为了是两个客户端在同一个网络内,需要找一台服务器,搭建一个L2TP服务器,通过L2TP使两个客户端在同一个网络内,为什么要搭建,主要是解决例如员工出差后,还需要连接公司内网资源的问题,本文主要…...
std::ranges::iota
std::ranges::iota_view 和 std::views::iota 是 C23 Ranges 库中的一部分,用于生成一系列递增的值,类似 Python 的 range() 或传统的 for 循环生成器。 一 原形 Defined in header <numeric> Call signature template< std::input_or_output…...
物联网简介:万物互联的未来图景
物联网简介:万物互联的未来图景 引言 在科技飞速发展的今天,我们身边的一切似乎都在悄然发生变化。从清晨智能闹钟根据你的睡眠状态自动唤醒,到厨房里的咖啡机在你起床前已经煮好咖啡;从城市交通系统通过实时数据优化红绿灯时长…...
Python类方法解析:从字节序列重构Vector2d实例
这篇文章将详细解析Python中的classmethod装饰器,并通过一个实际案例——为Vector2d类实现frombytes方法,展示如何从字节序列重构对象实例。 类方法基础 classmethod是Python中一个重要的装饰器,它用于定义类方法。与普通实例方法不同&…...