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

使用Leaflet进行船舶航行警告区域绘制实战

目录

前言

一、坐标格式转换

1、数据初认识

2、将区域分割成多个点

3、数据转换

4、数据转换调用

二、WebGIS展示空间位置信息

1、定义底图

2、Polygon的可视化

3、实际效果

三、总结


前言

        通常而言,海事部门如海事局,通常会在所述的管辖区域内进行航行管控。比如会在海面上进行采砂作业、或者是拖带作业、人员落水、沉船碍航等作业需求。这些消息通常会先由各海域属地的海事局进行消息的发布,可以在他们的官方网站上看到,如以下的信息:

闽航警34/24  台湾海峡

2024年7月15日至2024年10月15日,每日24小时,在以下四点连线范围内的安全作业区进行采砂作业,24-12.27N  118-24.04E ,24-10.25N  118-26.30E ,24-08.17N  118-24.05E ,

24-10.19N  118-21.78E 。无关船舶禁止驶入。

福建海事局。

        在图上的信息中, 其实就包含一些很重要的时空信息,比如预警的时间是2024年7月15日到10月15日,中间差不多有三个月的时间,在这三个月的时间内,是不允许其它的船舶驶入上述的区域内的。作为GIS开发者,我们除了重点关注预警的时间范围,更关心的是空间范围。如果假定是一些商用船舶,我们就可以提取这些空间数据,在进行航线规划的时候,绕开这些作业区域,不仅能保证航行安全,也是加快作业效率。关注新闻的朋友一定知道,一些重要的行动需要对某一些区域进行管控的,也是会经过地方海事局进行公开位置,然后在规定的时间内进行。而这些区域不仅仅是一块区域,而是多个区域同时进行,从而锤炼不同的队伍的实战能力。如下图发布的航行警告中就包括6个区域(即面数据)。

        本文即以Leaflet为例,重点讲解如何将上述的空间信息转换为可以在地图上浏览的位置信息。首先使用Java语言将上面的涉及的空间坐标(度分秒)调整为常见的经纬度坐标。然后根据不同的点连接成多个面,最后将这些Polygon面数据叠加到Leaflet中,从而实现航行警告中的相关区域和地图的融合。通过本文,您可以掌握怎么使用Java把度分秒坐标转为标准格式,还可以掌握在Leaflet当中如何把这些Polygon进行空间叠加。

一、坐标格式转换

        其实度分秒这种格式的坐标在日常生活中也是非常常见的,读起来也比较顺畅。但是通常,我们在WebGIS上进行位置展示时,还是习惯于使用经纬度格式的坐标。因此这里主要讲解如何将度分秒的坐标转为标准经纬度信息。转换它的方法其实很简单,本人比较熟悉Java语言,因此后台的转换方法均使用Java编写,除了使用Java来开发这个功能,其他的编程语言同样可以实现。

1、数据初认识

        要想实现格式的转换,首先我们要对原文中的格式进行解释。可以看到在原文中的,它的具体内容中包含位置面信息内容如下:

区域一为下列4点连线水域:     25°15′26"N/120°29′20"E,24°50′30"N/120°05′45"E,     25°04′32"N/119°51′22"E,25°28′12"N/120°14′30"E。   
区域二为下列4点连线水域:     26°07′00"N/121°57′00"E,25°30′00"N/121°57′00"E,     25°30′00"N/121°28′00"E,26°07′00"N/121°28′00"E。    
区域三为下列4点连线水域:     25°34′00"N/122°50′00"E,25°03′00"N/122°50′00"E,     25°03′00"N/122°11′00"E,25°34′00"N/122°11′00"E。   
区域四为下列4点连线水域:     22°56′00"N/122°40′00"E,23°38′00"N/122°51′00"E,     23°38′00"N/123°23′00"E,22°56′00"N/123°09′00"E。    
区域五为下列4点连线水域:     21°14′00"N/121°33′00"E,21°33′00"N/121°18′00"E,     21°07′00"N/120°43′00"E,20°48′00"N/120°59′00"E。     
区域六为下列4点连线水域:     22°43′00"N/119°14′00"E,22°10′00"N/119°06′00"E,     21°33′00"N/120°29′00"E,22°09′00"N/120°32′00"E。   

        每个区域的都是这种形式的数据,这也为我们进行统一转换提供了有效的数据格式的基础。可以看到,每个区域都是一条数据,不同的点位(point)之间用逗号分隔,而坐标点内部使用/来分割。因此我们要想识别每一个区域的信息,其实也很简单。首先将字符串按逗号分隔,这样就可以形成多个点位的度分秒字符串。然后再分割/字符串,从而得到度分秒的位置。

2、将区域分割成多个点

按照前面介绍得分割方法,首先根据逗号,将目标区域字符串分割成多个点。关键的代码如下:

/*** 	将四个点的字符串统一解析为经纬度数组* @param bboxString*/
private static void str2Point(String bboxString) {//将经纬度单位中的分改为英文状态下的分bboxString = bboxString.replaceAll("′", "\'");String [] points = bboxString.split(",");for (String str : points) {String [] latLon = str2LatLon(str);System.out.println(str + " = (" + latLon[0] + "," +latLon[1] + ")");}
}

        将经纬度单位中的分改为英文状态下的分是为了在后续的解析中进行数据容错。

3、数据转换

        将点从区域点字符串提取出来之后,我们需要将数据进行提取和转换两个步骤。提取是按照/将字符进行分割,而转换是将度分秒的数据转换为标准的经纬度数据。关键代码如下:

/**
* 	将单个度分秒坐标转经纬度坐标数组
* @param latLonStr
* @return
*/
private static String [] str2LatLon(String latLonStr) {String lat = latLonStr.split("\\/")[0];String lon = latLonStr.split("\\/")[1];String latSuffix = lat.substring(lat.length() -1 );//取出纬度后缀N,S	String lonSuffix = lon.substring(lon.length() -1 );//取出纬度后缀W,EString newLat =String.valueOf(LatLngUtil.dfm2LatLng(lat.substring(0,lat.length()-1)));String newLon =String.valueOf(LatLngUtil.dfm2LatLng(lon.substring(0,lon.length()-1)));newLat = latSuffix.equalsIgnoreCase("S") ?  "-" + newLat : newLat;newLon = lonSuffix.equalsIgnoreCase("W") ?  "-" + newLon : newLon;return new String[]{newLat,newLon};
}

        这里还是将经纬度转换的方法提供出来,防止大家在第一次看的时候有所迷糊。

/*** 度分秒转经纬度** @param dms 116°25'7.85"* @return 116.418847*/
public static double dfm2LatLng(String dms) {if (dms == null) return 0;try {dms = dms.replace(" ", "");String[] str2 = dms.split("°");if (str2.length < 2) return 0;int d = Integer.parseInt(str2[0]);String[] str3 = str2[1].split("\'");if (str3.length < 2) return 0;int f = Integer.parseInt(str3[0]);String str4 = str3[1].substring(0, str3[1].length() - 1);double m = Double.parseDouble(str4);double fen = f + (m / 60);double du = (fen / 60) + Math.abs(d);if (d < 0) du = -du;return Double.parseDouble(String.format("%.7f", du));} catch (Exception e) {e.printStackTrace();}return 0;
}

4、数据转换调用

        调用的函数比较简单,这里采用test的测试用例调用为例进行讲解,当然这里不限于使用何种方法。

@Test
public void testBoundaryConvert() {/*区域一为下列4点连线水域:   25°15′26"N/120°29′20"E,24°50′30"N/120°05′45"E,25°04′32"N/119°51′22"E,25°28′12"N/120°14′30"E区域二为下列4点连线水域:     26°07′00"N/121°57′00"E,25°30′00"N/121°57′00"E,25°30′00"N/121°28′00"E,26°07′00"N/121°28′00"E  区域三为下列4点连线水域:     25°34′00"N/122°50′00"E,25°03′00"N/122°50′00"E,25°03′00"N/122°11′00"E,25°34′00"N/122°11′00"E   区域四为下列4点连线水域:     22°56′00"N/122°40′00"E,23°38′00"N/122°51′00"E,23°38′00"N/123°23′00"E,22°56′00"N/123°09′00"E    区域五为下列4点连线水域:     21°14′00"N/121°33′00"E,21°33′00"N/121°18′00"E,21°07′00"N/120°43′00"E,20°48′00"N/120°59′00"E     区域六为下列4点连线水域:     22°43′00"N/119°14′00"E,22°10′00"N/119°06′00"E,21°33′00"N/120°29′00"E,22°09′00"N/120°32′00"E   */List<String> bboxList = new ArrayList<String>();bboxList.add("25°15′26\"N/120°29′20\"E,24°50′30\"N/120°05′45\"E,25°04′32\"N/119°51′22\"E,25°28′12\"N/120°14′30\"E");//区域一bboxList.add("26°07′00\"N/121°57′00\"E,25°30′00\"N/121°57′00\"E,25°30′00\"N/121°28′00\"E,26°07′00\"N/121°28′00\"E");//区域二bboxList.add("25°34′00\"N/122°50′00\"E,25°03′00\"N/122°50′00\"E,25°03′00\"N/122°11′00\"E,25°34′00\"N/122°11′00\"E");//区域三bboxList.add("22°56′00\"N/122°40′00\"E,23°38′00\"N/122°51′00\"E,23°38′00\"N/123°23′00\"E,22°56′00\"N/123°09′00\"E");//区域四bboxList.add("21°14′00\"N/121°33′00\"E,21°33′00\"N/121°18′00\"E,21°07′00\"N/120°43′00\"E,20°48′00\"N/120°59′00\"E");//区域五bboxList.add("22°43′00\"N/119°14′00\"E,22°10′00\"N/119°06′00\"E,21°33′00\"N/120°29′00\"E,22°09′00\"N/120°32′00\"E");//区域六int index = 1;for(String bbox : bboxList) {System.out.println("区域"+index+"位置字符串:" + bbox);str2Point(bbox);System.out.println("--------------------------------------------------------------");index ++;}}

        在控制台中执行上述代码之后,可以看到以下结果,说明执行成功,同时数据均已成功的转换。

        解析的数据内容如下(取其中的一个点为例):

区域1位置字符串:25°15′26"N/120°29′20"E,24°50′30"N/120°05′45"E,25°04′32"N/119°51′22"E,25°28′12"N/120°14′30"E
25°15'26"N/120°29'20"E = (25.2572222,120.4888889)
24°50'30"N/120°05'45"E = (24.8416667,120.0958333)
25°04'32"N/119°51'22"E = (25.0755556,119.8561111)
25°28'12"N/120°14'30"E = (25.47,120.2416667)

         在经过上述的方法将度分秒坐标转换为标准经纬度坐标后,我们就可以将坐标叠加到Leaflet当中进行空间展示,下一节来深入阐述。

二、WebGIS展示空间位置信息

        当我们得到了经过转换过的空间标准经纬度坐标信息后,我们就可以将这些空间数据转换为面数据或者点数据,然后使用WebGIS框架,比如Leaflet等进行信息的几种展示。

1、定义底图

        定义定图的方法非常简单,这里我们直接给出在应用程序中使用天地图的方法,请注意如果在拷贝这里的代码时,一定要注意替换这里的令牌。

var map = L.map('mapid').setView([23.785345, 120.948486], 7);var tdt_client_key = "473af7dc18cafb6b993616a0ce8e1ead";//天地图客户端的keyL.tileLayer('http://t0.tianditu.gov.cn/img_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=img&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&tk=' +tdt_client_key, {maxZoom: 18,attribution: 'Map data &copy; <a href="http://www.tianditu.gov.cn/">TianDiTu</a>, <a href="http://www.esri.com/">Esri</a> contributors, <a href="https://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>'
}).addTo(map);//标签 
L.tileLayer('http://t1.tianditu.gov.cn/cva_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=cva&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&tk='+ tdt_client_key, {maxZoom: 18
}).addTo(map);

2、Polygon的可视化

        在定义的基础的底图之后,下面将第一节转换好的所有的坐标进行Polygon空间展示。关键代码如下:

var style = {"color":"red","fillColor":"red","weight":2};L.polygon([[25.2572222,120.4888889],[24.8416667,120.0958333],[25.0755556,119.8561111],[25.47,120.2416667]],style).addTo(map).bindPopup("区域一.");L.polygon([[26.1166667,121.95],[25.5,121.95],[25.5,121.4666667],[26.1166667,121.4666667]],style).addTo(map).bindPopup("区域二.");L.polygon([[25.5666667,122.8333333],[25.05,122.8333333],[25.05,122.1833333],[25.5666667,122.1833333]],style).addTo(map).bindPopup("区域三.");L.polygon([[22.9333333,122.6666667],[23.6333333,122.85],[23.6333333,123.3833333],[22.9333333,123.15]],style).addTo(map).bindPopup("区域四.");L.polygon([[21.2333333,121.55],[21.55,121.3],[21.1166667,120.7166667],[20.8,120.9833333]],style).addTo(map).bindPopup("区域五.");L.polygon([[22.7166667,119.2333333],[22.1666667,119.1],[21.55,120.4833333],[22.15,120.5333333]],style).addTo(map).bindPopup("区域六.");

        请注意,在上述的例子中,我们使用一个统一的样式选型,style,它表示展示的Polygon面的颜色和填充颜色都是红色,如果您想设置自己喜欢的颜色也是可以的。

3、实际效果

        经过上述的两个步骤,我们已经实现了地图对象的定义和绑定,同时我们将转换好的坐标信息进行赋值,让6个面在地图上进行可视化。

        以上的红色区域就是我们转换的六个区域,不知道大家看了这六个区域,有没有勾起点啥记忆呢。 这里不多说,大家可以去相关网站搜索这个区域之前发生过什么就大致清楚了。

三、总结

        以上就是本文的主要内容,本文即以Leaflet为例,重点讲解如何将上述的空间信息转换为可以在地图上浏览的位置信息。首先使用Java语言将上面的涉及的空间坐标(度分秒)调整为常见的经纬度坐标。然后根据不同的点连接成多个面,最后将这些Polygon面数据叠加到Leaflet中,从而实现航行警告中的相关区域和地图的融合。通过本文,您可以掌握怎么使用Java把度分秒坐标转为标准格式,还可以掌握在Leaflet当中如何把这些Polygon进行空间叠加。行文仓促,定有不足之处,真诚期待各位专家朋友在评论区批评指正,不甚感激。

相关文章:

使用Leaflet进行船舶航行警告区域绘制实战

目录 前言 一、坐标格式转换 1、数据初认识 2、将区域分割成多个点 3、数据转换 4、数据转换调用 二、WebGIS展示空间位置信息 1、定义底图 2、Polygon的可视化 3、实际效果 三、总结 前言 通常而言&#xff0c;海事部门如海事局&#xff0c;通常会在所述的管辖区域内…...

用Ollama 和 Open WebUI本地部署Llama 3.1 8B

说明&#xff1a; 本人运行环境windows11 N卡6G显存。部署Llama3.1 8B 简介 Ollama是一个开源的大型语言模型服务工具&#xff0c;它允许用户在自己的硬件环境中轻松部署和使用大规模预训练模型。Ollama 的主要功能是在Docker容器内部署和管理大型语言模型&#xff08;LLM&…...

计算机毕业设计选题推荐-学生作业管理系统-Java/Python项目实战

✨作者主页&#xff1a;IT研究室✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…...

RIP实验

实验拓扑&#xff1a; 实验要求&#xff1a; R1-R2-R3-R4-R5&#xff1a;RIP 100 运行版本2 R6-R7&#xff1a;RIP 200 运行版本1 1.使用合理IP地址规划网络&#xff0c;各自创建环回接口 2.R1创建环回 172.16.1.1/24 172.16.2.1/24 172.16.3.1/24 3.要求R3使用R2访问R1环…...

手把手教你如何在宝塔上添加可道云登录页面的ICP备案信息,别跟权威开玩笑。

如何在宝塔上添加可道云登录页面的ICP备案信息 事情的原由来我们开始吧首先登录你的宝塔页面双击打开index.php文件保存退出即可 感谢大佬&#xff0c;希望对被查到的朋友有所帮助&#xff01; 事情的原由 今天突然收到腾讯云发来的一封Email&#xff0c;说我需要整改我的网站…...

基于JSP技术的大学生校园兼职系统

你好呀&#xff0c;我是计算机学姐码农小野&#xff01;如果有相关需求&#xff0c;可以私信联系我。 开发语言&#xff1a;JSP 数据库&#xff1a;MySQL 技术&#xff1a;JSPJavaBeans 工具&#xff1a;MyEclipse&#xff0c;Tomcat&#xff0c;Navicat 系统展示 首页 学…...

VSCode在windows系统下的配置简单版

参考链接 从零开始的vscode安装及环境配置教程(C/C)(Windows系统)_vscode搭建编译器环境-CSDN博客 vscode生成tasks.json、launch.json、c_cpp_properties.json文件_vscode生成launch.json-CSDN博客 自动生成配置文件简单方便&#xff01;&#xff01;&#xff01; 运行c代…...

C++初学(9)

9.1、结构简介 虽然数组能够和存储多个元素&#xff0c;但所有元素必须相同&#xff0c;也就是说&#xff0c;同一个数组不能既存放int类型也存放float类型&#xff0c;而C的结构可以满足要求。结构是一种比数组更灵活的数据格式&#xff0c;因为同一个结构可以存储多种类型的…...

ardupilot开发 --- 网络技术综述 篇

不信人间有白头 一些概念参考文献 一些概念 以太网、局域网、互联网 以太网(Ethernet)&#xff0c;是一种计算机局域网技术。以太网是一种有线网络技术&#xff0c;网络传输介质包括&#xff1a;以太网电缆&#xff0c;如常见的双绞线、光纤等。根据传输速度&#xff0c;可以氛…...

一文详解大模型蒸馏工具TextBrewer

原文&#xff1a;https://zhuanlan.zhihu.com/p/648674584 本文分享自华为云社区《TextBrewer&#xff1a;融合并改进了NLP和CV中的多种知识蒸馏技术、提供便捷快速的知识蒸馏框架、提升模型的推理速度&#xff0c;减少内存占用》&#xff0c;作者&#xff1a;汀丶。 TextBre…...

Go语言加Vue3零基础入门全栈班10 Go语言+gRPC用户微服务项目实战 2024年07月31日 课程笔记

概述 如果您没有Golang的基础&#xff0c;应该学习如下前置课程。 Golang零基础入门Golang面向对象编程Go Web 基础Go语言开发REST API接口_20240728Go语言操作MySQL开发用户管理系统API教程_20240729Redis零基础快速入门_20231227GoRedis开发用户管理系统API实战_20240730Mo…...

ChatGPT能代替网络作家吗?

最强AI视频生成&#xff1a;小说文案智能分镜智能识别角色和场景批量Ai绘图自动配音添加音乐一键合成视频百万播放量https://aitools.jurilu.com/ 当然可以&#xff01;只要你玩写作AI玩得6&#xff0c;甚至可以达到某些大神的水平&#xff01; 看看大神、小白、AI输出内容的区…...

Http自定义Header导致的跨域问题

最近写一个小项目&#xff0c;前后端分离&#xff0c;在调试过程中访问远程接口&#xff0c;出现了CORS问题&#xff0c;接口使用的laravel框架&#xff0c;于是添加了解决跨域的中间件&#xff0c;但是前端显示仍存在跨域问题&#xff0c;以为自己写的有问题&#xff0c;检查了…...

python 中 file.read(), file.readline()和file.readlines()区别和用法

python 中 file.read(), file.readline()和file.readlines()区别和用法 文章目录 python 中 file.read(), file.readline()和file.readlines()区别和用法1. file.read()2. file.readline()3. file.readlines()4. 总结5. 注意事项 file.read(), file.readline(), 和 file.readli…...

python 学习: np.pad

在NumPy中&#xff0c;np.pad函数用于对数组进行填充&#xff08;padding&#xff09;&#xff0c;即在数组的边界处添加额外的值。这在图像处理、信号处理或任何需要扩展数据边界的场景中非常有用。 以下是np.pad函数的一些关键参数和使用示例&#xff1a; array&#xff1a…...

等保2.0 | 人大金仓数据库测评

人大金仓数据库&#xff0c;全称为金仓数据库管理系统KingbaseES&#xff08;简称&#xff1a;金仓数据库或KingbaseES&#xff09;&#xff0c;是北京人大金仓信息技术股份有限公司自主研制开发的具有自主知识产权的通用关系型数据库管理系统。以下是关于人大金仓数据库的详细…...

AIGC赋能智慧农业:用AI技术绘就作物生长新蓝图

&#xff08; 于景鑫 国家农业信息化工程技术研究中心&#xff09;随着人工智能技术的日新月异,AIGC(AI-Generated Content,AI生成内容)正在各行各业掀起一场革命性的浪潮。而在智慧农业领域,AIGC技术的应用也正迸发出耀眼的火花。特别是在作物生长管理方面,AIGC有望彻底改变传…...

yolov8蒸馏(附代码-免费)

首先蒸馏是什么&#xff1f; 模型蒸馏&#xff08;Model Distillation&#xff09;是一种用于在计算机视觉中提高模型性能和效率的技术。在模型蒸馏中&#xff0c;通常存在两个模型&#xff0c;即“教师模型”和“学生模型”。 为什么需要蒸馏&#xff1f; 在不增加模型计算…...

Flink-StarRocks详解:第五部分查询数据湖(第55天)

系列文章目录 4.查询数据湖 4.1 Catalog 4.1.1 概述 4.1.1.1 基本概念 4.1.1.2 Catalog 4.1.1.3 访问Catalog 4.1.2 Default catalog 4.1.3 External Catalog 4.2 文件外部表 4.2.1 使用限制 4.2.2 开源版本语法 4.2.3 阿里云版本 5. 查询及优化 文章目录 系列文章目录前言4.查…...

【MySQL】常用数据类型

目录 数据类型 数据类型分类 数值类型 tinyint类型 bit类型 小数类型 float decimal 字符串类型 char varchar 日期和时间类型 enum和set 数据类型 数据类型分类 数值类型 tinyint类型 tinyint类型只占用一个字节类似于编程语言中的字符char。有带符号和无符号两…...

浅谈 React Hooks

React Hooks 是 React 16.8 引入的一组 API&#xff0c;用于在函数组件中使用 state 和其他 React 特性&#xff08;例如生命周期方法、context 等&#xff09;。Hooks 通过简洁的函数接口&#xff0c;解决了状态与 UI 的高度解耦&#xff0c;通过函数式编程范式实现更灵活 Rea…...

【Linux】C语言执行shell指令

在C语言中执行Shell指令 在C语言中&#xff0c;有几种方法可以执行Shell指令&#xff1a; 1. 使用system()函数 这是最简单的方法&#xff0c;包含在stdlib.h头文件中&#xff1a; #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...

ssc377d修改flash分区大小

1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...

对WWDC 2025 Keynote 内容的预测

借助我们以往对苹果公司发展路径的深入研究经验&#xff0c;以及大语言模型的分析能力&#xff0c;我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际&#xff0c;我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测&#xff0c;聊作存档。等到明…...

Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器

第一章 引言&#xff1a;语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域&#xff0c;文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量&#xff0c;支撑着搜索引擎、推荐系统、…...

自然语言处理——循环神经网络

自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元&#xff08;GRU&#xff09;长短期记忆神经网络&#xff08;LSTM&#xff09…...

AspectJ 在 Android 中的完整使用指南

一、环境配置&#xff08;Gradle 7.0 适配&#xff09; 1. 项目级 build.gradle // 注意&#xff1a;沪江插件已停更&#xff0c;推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...

AI,如何重构理解、匹配与决策?

AI 时代&#xff0c;我们如何理解消费&#xff1f; 作者&#xff5c;王彬 封面&#xff5c;Unplash 人们通过信息理解世界。 曾几何时&#xff0c;PC 与移动互联网重塑了人们的购物路径&#xff1a;信息变得唾手可得&#xff0c;商品决策变得高度依赖内容。 但 AI 时代的来…...

深度学习习题2

1.如果增加神经网络的宽度&#xff0c;精确度会增加到一个特定阈值后&#xff0c;便开始降低。造成这一现象的可能原因是什么&#xff1f; A、即使增加卷积核的数量&#xff0c;只有少部分的核会被用作预测 B、当卷积核数量增加时&#xff0c;神经网络的预测能力会降低 C、当卷…...

return this;返回的是谁

一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请&#xff0c;不同级别的经理有不同的审批权限&#xff1a; // 抽象处理者&#xff1a;审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...