PostGIS是什么

news/2024/5/2 22:08:08/文章来源:https://blog.csdn.net/a13407142317/article/details/126816878

1. 什么是GIS(知识地图定位)

1.1. GIS概念

地理信息系统(Geographic Information System或 Geo-Information system,GIS)有时又称为“地学信息系统”。它是一种特定的十分重要的空间信息系统。它是在计算机硬、软件系统支持下,对整个或部分地球表层(包括大气层)空间中的有关地理分布数据进行采集、储存、管理、运算、分析、显示和描述的技术系统。

位置与地理信息既是LBS的核心,也是LBS的基础。一个单纯的经纬度坐标只有置于特定的地理信息中,代表为某个地点、标志、方位后,才会被用户认识和理解。用户在通过相关技术获取到位置信息之后,还需要了解所处的地理环境,查询和分析环境信息,从而为用户活动提供信息支持与服务。

地理信息系统(GIS,Geographic Information System)是一门综合性学科,结合地理学与地图学以及遥感和计算机科学,已经广泛的应用在不同的领域,是用于输入、存储、查询、分析和显示地理数据的计算机系统,随着GIS的发展,也有称GIS为“地理信息科学”(Geographic Information Science),近年来,也有称GIS为"地理信息服务"

在这里插入图片描述

1.1. 传统GIS平台

1.1.1. ArcGIS和ESRI

ArcGis是“计算机制图”应用,包含了全球范围内的底图、地图数据、应用程序,以及可配置的应用模板和开发人员使用的 GIS 工具和 API,可用于创建 Web 地图、发布GIS服务、共享地图、数据和应用程序,以及管理组织的内容和多个用户。

1.1.1.1. ESRI公司

美国环境系统研究所公司(Environmental Systems Research Institute, Inc. 简称ESRI公司)成立于1969年,总部设在美国加州RedLands市,是世界最大的地理信息系统(Geographic Information System GIS)技术提供商。

在这里插入图片描述

  • 技术人员可以关注ESRI的github:https://github.com/Esri

在这里插入图片描述

1.1.1.2. 评价

  1. 从某种意义上ArcGIS就是GIS
  2. 最全名最工业实现标准最多的商业GIS软件
  • ArcGIS Desktop
  • ArcGIS Server
  • ArcGIS Engine
  • City Engine
  1. 最大的原罪就是他是美国的

1.1.2. SuperMap GIS和超图

SuperMap GIS 是超图软件研发的面向各行业应用开发、二三维制图与可视化、决策分析的大 型 GIS 基础软件系列,包含云 GIS 服务器、边缘 GIS 服务器、端 GIS 以及在线 GIS 平台等多种软 件产品。

1.1.2.1. 超图

北京超图软件股份有限公司是全球第三大、亚洲最大的地理信息系统(GIS)软件厂商,主要从事地理信息系统相关软件技术研发与应用服务。

1.1.2.2. 评价

  1. 国内最完善的GIS平台,可以平替ArcGIS
  2. 与ArcGIS在细节上有着差距

1.1.3. QGIS

Quantum GIS(QGIS)是相当友善的开源地理信息系统,使用GNU(General Public License)授权,属于 Open Source eospatial Foundation(OSGeo)的官方计划。在 GNU 这个授权下,开发者可以自行检阅与调整程序代码,并保障让所有使用者可以免费且自由地修改程序。

QGIS 的目标是成为一个使用简单的 GIS,提供了常见的功能与图征。借着核心图征提供基本功能与附加组件(Python 或 C++)持续地扩充,让使用者可以浏览、管理、编辑、分析数据以及制图。

QGIS 是一群自愿者所开发的项目,欢迎全球使用者或开发者将程序代码的缺陷、修复、报告以及提供文件等贡献。它是由热心的使用者和开发社群所维护的。它提供了交互式的邮件列表,以及透过网络管道传达给其他用户与开发人员帮忙与建议。另外,它也提供商业定制化开发。

  • github地址:https://github.com/qgis/QGIS

1.2. 数据类型

在数据存储中,存储GIS(地理信息系统)数据的存储介质有

  • Shapefile,简称shp文件
  • MDB
  • GDB
  • ArcSDE
    • ArcSDE for Oracle
    • ArcSDE for SqlServer
    • ArcSDE for Postgresql
  • Oracle Spatial
  • Postgresql 的 PostGIS

一般而言,本地文件使用shp文件,对于共享服务器存储时使用ArcSDE、PostGIS。在PostGIS出来之前,大家都是使用Oracle Spatial。

而在存储介质中对于空间数据类型划分为:

  • 基本空间数据类型
    • 点、多点
    • 线、多线
    • 面、多面
  • 栅格数据

1.2.1. 基本空间数据类型

在这里插入图片描述

POINT(0 0)LINESTRING(0 0,1 1,1 2)POLYGON((0 0,4 0,4 4,0 4,0 0),(1 1, 2 1, 2 2, 1 2,1 1))MULTIPOINT((0 0),(1 2))MULTILINESTRING((0 0,1 1,1 2),(2 3,3 2,5 4))MULTIPOLYGON(((0 0,4 0,4 4,0 4,0 0),(1 1,2 1,2 2,1 2,1 1)), ((-1 -1,-1 -2,-2 -2,-2 -1,-1 -1)))GEOMETRYCOLLECTION(POINT(2 3),LINESTRING(2 3,3 4))

WKT、WKB和GeoJson表达点线面

1.2.2. 栅格数据类型

在这里插入图片描述

1.2.2.1. 栅格数据类型

  • .tiff
  • ERDAS IMAGINE (.img)
  • 卫星影像
  • DEM和DOM

1.3. 空间参考

1.3.1. 空间参考使用历史转变

新中国按时间顺序使用的空间参考为:

  • 北京54
  • 西安80
  • CGCS2000

具体可以参见北京54、西安80和CGCS2000

一言以蔽之,新中国由于政策和科学技术的原因使用了北京54;西安80是将大地原点设在中国中部陕西省泾阳县永乐镇的空间参考,同时在这个时候确定了1985国家高程基准;而走入新世纪,为了满足科研、航空、航天、航海以及国防建设我们采用了CGCS2000空间参考。

1.3.2. 常用空间参考

  • WGS84坐标系:即地球坐标系,国际上通用的坐标系。
  • GCJ02坐标系:即火星坐标系,WGS84坐标系经加密后的坐标系。高德地图
  • BD09坐标系:即百度坐标系,GCJ02坐标系经加密后的坐标系。百度独有
  • Web墨卡托坐标系

1.3.3. 空间参考中名词拾遗(坐标系统、空间参考、投影、基准面、椭圆体)

具体可以参见:空间参考中名词拾遗(坐标系统、空间参考、投影、基准面、椭圆体)

1.3.3. 为什么要进行投影

在上述表达中我们基本上描述的均为经纬度的,也就是地理坐标系,地图单位通常为,投影坐标系 (Projected Coordinate System)平面坐标系统地图单位通常为 ,也称非地球投影坐标系统(notearth),或者是平面坐标。

在这里插入图片描述

  • 地球是三维的
  • 地图(屏幕)是二维的
  • 地理坐标系统是在三维(基准面)上的定位方法
  • 投影使得三维转成二维
  • 三维转成二维会产生变形

在这里插入图片描述

  • 一般而言,使用相同椭球体的投影坐标系统和经纬度坐标系统是可以相互转换的,而对于两种椭球体的坐标系统需要建立坐标转换进行数学基础的转换,具体表现为,一4参,7参,二节点坐标的变化。

在一些特殊的城市,在使用投影坐标系统是往往有地方坐标系统,比如北京,原因是因为跨带

2. Postgresql中的PostGIS

2.1. 什么是PostGIS

PostGIS is a spatial database extender for PostgreSQL object-relational database. It adds support for geographic objects allowing location queries to be run in SQL.

PostGIS是PostgreSQL对象关系数据库的空间数据库扩展器。它增加了对地理对象的支持,允许在SQL中运行位置查询。

在这里插入图片描述
在这里插入图片描述

  1. PostGIS是在对象关系型数据库PostgreSQL上增加了存储管理空间数据的能力的开源空间数据库,空间数据库像存储和操作数据库中其他任何对象一样去存储和操作空间对象。

  2. 它是PostgreSQL的扩展插件,在PostgreSQL的core(存储、检索、事务等)层之上实现GIS层的功能,它不能独立于PostgreSQL运行。

2.2. Postgis解决什么问题,为什么选择PostGIS

  • Postgresql本身是最先进的开源RDBMS(没有之一),是最稳定成熟的RDBMS之一(流行度和社区成熟度比不上MySQL)

  • PostGIS是最成熟,功能最丰富的免费GIS数据库(没有之一),只有收费的Oracle和SQL Server(他们都有GIS版)才能与之媲美,MySQL的GIS功能通常不能拿来和它比

  • PostGIS本质上还是数据库,使用SQL操作,可以满足你更新频繁、和其它筛选条件联合使用的要求

  • 结合postgresql FTS扩展(Full Text Search),不仅可以根据性别、年龄、LBS信息搜索,更可以和模糊关键词搜索联合起来

  • Postgresql也可以做集群、复制、高可用

2.3. Postgis与ArcSDE的关系

2.3.1. Postgis与ArcSDE的关系?

要回答这个问题,先得明白ArcSDE是什么。

在这里插入图片描述

ArcSDE是ESRI提供的一项技术,可以访问和管理存储在关系型数据库中的空间数据。

2.3.1.1. 两者的相同点

  • 都可以作为空间数据库的实现;
  • 都遵循OGC SFSQL以及ISO SQL/MM两个规范;

2.3.1.2. 两者的不同点

  • ArcSDE可作为不同关系型数据库的空间数据引擎(SDE即spatial data engine),Postgis不可以;
  • ArcSDE可在不同关系型数据库中实现空间数据库,Postgis只能在PostgreSQL上实现空间数据库。

2.4. Postgis包含了哪些内容?遵循什么规范?

Postgis在PostgreSQL基础上,实现了空间数据类型、空间索引和空间函数。它所实现的这些内容,遵循了两个规范:OGC SFSQL以及ISO SQL/MM。

2.4.1. OGC SFSQL规范

OGC:它是一个国际标准组织,成立于1994年,是一个由GIS厂商、计算机厂商、数据库厂商、美国联邦机构、标准组织以及学术界等部门代表组成的公益性行业协会。致力于实现地理空间数据与地理信息处理资源的全面集成,通过信息基础设施,广泛使用商业化的、可互操作的地理信息处理软件。

在这里插入图片描述
在这里插入图片描述

2.4.2. SQL/MM标准

SQL/MM是ISO(International Standard Organization,国际标准化组织)提出的标准,SQL/MM第三部分空间定义了矢量数据存储与检索的相关标准,解释了基于这些数据类型如何使用存储、获取和处理空间数据。

SQL-MM Part3定义大量插值曲线类型来扩展SQL规范定义的简单要素类型。

在这里插入图片描述

2.4.3. PostGIS的扩展

  • 扩展EWKT、EWKB

在这里插入图片描述

从本质上来说,方便数据的统一管理,为每一个存储在数据表中的图形加了一个srid(为每一个图形增加了空间参考),而在同一个数据表(表模式)下空间参考是一致的,为后续的数据存储、数据分析特别是空间参考定义一致的数学基础。

  • 扩展GIS函数

在这里插入图片描述

方便postgis的一些新特性的展现,以及新算法和技术的实现。

3. PostGIS的基本使用

3.1. 使用扩展

CREATE EXTENSION postgis;

创建扩展之后在数据库函数中将会出现postgis类型,也就是可以在Postgresql中使用几何类型,并可以使用postgis的函数操作、分析几何图形。

3.2. 数据读取

根据前面的OGC标准我们可以使用WKT、WKB、GeoJson来进行数据的存储通信,即不同平台、数据库的交换标准,在PostGIS的体现为以下函数。

在这里插入图片描述

一般而言使用最多的无非

---------------读取wkt字符串为geometry---------------:
ST_GeomFromText(ST_GeometryFromText)---------------将geometry转化为不同数据标准格式---------------:
---转换为wkt
ST_AsText
---转换为geojson
ST_AsGeoJSON

3.3. 操作符

在这里插入图片描述

  1. &&
    A && B: 当二维A范围覆盖二维B范围时,返回真。
  1. &&&
    A &&& B: 当三维A范围覆盖三维B范围时,返回真。
  1. &<
    A&<B : A范围覆盖B范围或A范围在B范围左侧时,返回真。
  1. &<|
    A&<|B :  当A范围覆盖B范围或A范围在B范围下方,返回真。
  1. =
    A=B : A范围=B范围时,返回真。
  1. ~
    A~B :A范围包含B范围时,返回真。
  1. <->
    A<->B :   返回两点之间的距离。为了点或点检查它使用浮点精度(相对于双精度的基础几何点)。对于其他几何类型之间的距离返回浮点边界框。用于做距离排序和最近邻法。
  1. <#>
    A<#>B :返回2个几何图形边界框之间的距离。对于点/点检查它的几乎一样的距离(虽然可能不一样,因为这个边界框是浮点精度和几何图形是双精度)。用于做最短距离和查找邻接边距离等。

3.4. 基于9交(DE-9IM)模型的空间关系

空间关系中文名称OGC标准解释
Contains包含一个几何图形的内部完全包含了另一个几何图形的内部和边界。
CoveredBy覆盖一个几何图形被另一个几何图形所包含,并且它们的边界相交。Point和MultiPoint不支持此空间关系,因为它们没有边界。
Crosses交叉一个几何图形的内部和另一个几何图形的边界和内部相交,但是它们的边界不相交。
Disjoint分离两个几何图形的边界和内部不相交。
EnvelopeIntersects外包矩形相交两个几何图形的外接矩形相交。
Equal相等两个几何图形具有相同的边界和内部。
Inside内部一个几何图形在另一个几何图形的内部,但是和它的边界不接触。
Intersects相交两个几何图形没有分离(Non-DisJoint)。
Overlaps重叠两个几何图形的边界和内部相交(Intersect)。
Touch接触两个几何图形的边界相交,但是内部不相交。
Within包含于一个几何图形的内部和边界完全在另一个几何图形的内部。

https://qlygmwcx.blog.csdn.net/article/details/122762041?spm=1001.2014.3001.5502

在这里插入图片描述
在这里插入图片描述

3.4.1. 翻译资源

总体资源

  1. PostGIS的Spatial Relationships and Measurements-空间关系与测量
  2. PostGIS的Spatial Relationships and Measurements 空间关系与测量:2
  3. PostGIS的Spatial Relationships and Measurements 空间关系与测量:3
  4. PostGIS的Spatial Relationships and Measurements 空间关系与测量:4
  5. PostGIS的Spatial Relationships and Measurements 空间关系与测量:5
  6. PostGIS的Geometry Processing 几何处理_1 ST_Buffer&&ST_BuildArea
  7. [PostGIS的Geometry Processing 几何处理2(ST_ClipByBox2D、ST_Collect、ST_ConcaveHull、ST_ConvexHull)](PostGIS的Geometry Processing 几何处理2(ST_ClipByBox2D、ST_Collect、ST_ConcaveHull、ST_ConvexHull))
  8. Geometry Processing 几何处理 3 ST_CurveToLine、ST_DelaunayTriangles
  9. Geometry Processing 几何处理 4 ST_Difference、ST_Dump、ST_DumpPoints、ST_DumpRings

3.5. 空间关系索引

GiST 的意思是通用的搜索树(Generalized Search Tree)。 它是一种平衡的,树状结构的访问方法,在系统中起一个基础模版的作用,可以使用它实现任意索引模式。B+/-trees,R-trees 和许多其它的索引模式都可以用 GiST实现。

CREATE INDEX idx_my_table_geom ON my_table USING gist(geom gist_geometry_ops);
  1. 从数据库库索引说到空间数据索引
  2. 为什么要使用空间索引
  3. 空间数据:格网索引
  4. 空间数据结构(四叉树、八叉树、BVH树、BSP树、k-d树)
  5. 高效的多维空间点索引算法 — Geohash 和 Google S2
  6. 矢量数据空间索引之R树索引
  7. GIST索引

3.6. 样例说明

  1. geotools导入PostGIS同时使用ArcGIS加载,查看空间数据

  2. Java导入shapefile到postgis,提升geotools导入效率

  3. 使用PostGIS求两个要素类的相交部分

  4. PostGIS实现(大数据量,大图斑)图层间相交工具

  5. 使用PostGIS对数据做拓扑抽稀

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_7023.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

注册中心对比和选型:Zookeeper、Eureka、Nacos、Consul和ETCD

转自:https://juejin.cn/post/7068065361312088095 下面是文章目录:注册中心基本概念 什么是注册中心? 注册中心主要有三种角色:服务提供者(RPC Server):在启动时,向 Registry 注册自身服务,并向 Registry 定期发送心跳汇报存活状态。 服务消费者(RPC Client):在启…

【Linux虚拟机安装】在VMware Workstation上安装ubuntu虚拟机

目录0、工具清单1、下载操作系统镜像2、创建虚拟机3、设置ubuntu系统0、工具清单 虚拟机软件&#xff1a;VMware Workstationubuntu镜像版本&#xff1a;Ubuntu 20.04.4 LTS (Focal Fossa)宿主机操作系统&#xff1a;Windows 10 专业版 1、下载操作系统镜像 官方下载网址&am…

氨基聚苯乙烯包覆硅胶微球SG-PS-NH2/聚苯乙烯/硫化镉PS/CdS复合材料/聚苯乙烯支载井冈霉素微球制备

今天小编给大家分享了氨基聚苯乙烯包覆硅胶微球SG-PS-NH2/聚苯乙烯/硫化镉PS/CdS复合材料/聚苯乙烯支载井冈霉素微球的制备方法&#xff0c;一起来看看&#xff01; 小编分享-氨基聚苯乙烯包覆硅胶微球SG-PS-NH2的制备方法&#xff1a; 通过对硅胶微球进行聚苯乙烯包覆,然后功…

javascript为什么叫脚本语言

脚本script是使用一种特定的描述性语言&#xff0c;依据一定的格式编写的可执行文件&#xff0c;又称作宏或批处理文件。 脚本通常可以由应用程序临时调用并执行。 各类脚本目前被广泛地应用于网页设计中&#xff0c;因为脚本不仅可以减小网页的规模和提高网页浏览速度&#xf…

为什么ASO很重要?

由于用户对多功能App的需求量增大&#xff0c;导致榜单影响力下滑&#xff0c;越来越多的用户通过搜索相关词来查找目标App。同时搜索对排名的影响权重也被各家应用商店加大。数据库显示&#xff0c;用户越来越习惯直接搜索关键词来搜索想要的应用。各应用商店收录热词现阶段有…

压缩网络相关

同样搬运模式 勿怪呀 大佬们 自从深度学习&#xff08;Deep Learning&#xff09;开始流行&#xff0c;已经在很多领域有了很大的突破&#xff0c;尤其是AlexNet一举夺得ILSVRC 2012 ImageNet图像分类竞赛的冠军后&#xff0c;卷积神经网络&#xff08;CNN&#xff09;的热潮便…

【JY】YJK前处理参数详解及常见问题分析:控制信息(二)

点击蓝字 求求关注【写在前文】本文介绍计算控制信息之控制信息。【计算信息参数详解】一、控制信息A区参数详解1、水平力与整体坐标夹角该参数为地震作用、风荷载计算时的X正向与结构整体坐标系下X轴的夹角&#xff0c;逆时针方向为正&#xff0c;单位为度。常见问题&#xf…

10、MyBatis-Plus 多数据源

第一篇&#xff1a;1、Mybatis-Plus 创建SpringBoot项目 第二篇&#xff1a;2、Mybatis-Plus 测试增、删、改、查 第三篇&#xff1a;3、Mybatis-Plus 自定义sql语句 第四篇&#xff1a;4、Mybatis-Plus 通用service的操作 第五篇&#xff1a;5、Mybatis-Plus 常用注解 第六篇&…

004-GoingDeeperConvolutions2014(googLeNet)

Going Deeper with Convolutions #paper1. paper-info 1.1 MetadataAuthor:: [[Christian Szegedy]], [[Wei Liu]], [[Yangqing Jia]], [[Pierre Sermanet]], [[Scott Reed]], [[Dragomir Anguelov]], [[Dumitru Erhan]], [[Vincent Vanhoucke]], [[Andrew Rabinovich]] 作者机…

UNIAPP----video标签层级问题的三种解决方法

uniapp的app端&#xff0c;video标签层级过高&#xff0c;无法轻易被遮盖。 三种解决方法&#xff0c;真机测试没问题。代码复制即可。 1.cover-view或者cover-image&#xff0c;放在video标签内使用&#xff0c;子绝父相 缺点&#xff1a;只能改变cover-view样式&#xff0…

算法落地思考:如何让智能运维更智能

嘉宾 | 王鹏 整理人 | 西狩xs 出品 | CSDN云原生 AIOps是人工智能与运维的结合&#xff0c;能够基于已有的运维数据&#xff0c;利用人工智能算法&#xff0c;通过机器学习的方式帮助企业提升运维效率&#xff0c;解决自动化运维无法管理的问题。 2022年8月30日&#xff0…

spring底层原理初探

一&#xff0c;spring原理初探 1&#xff0c;bean的创建生命周期 userService.class --> 推断构造方法 --> 实例化对象 --> 依赖注入(属性填充) --> 初始化前(PostConstruct) --> 初始化 (Initializingbean) --> 初始化后(AOP&#xff0c;bean的后置处理器…

Wireshark分析https流量

这里写自定义目录标题本文介绍使用wireshark分析https流量的方法。适用chromium内核的浏览器和firefox浏览器&#xff0c;前提是这些浏览器内核都支持如下选项&#xff1a; –ssl-key-log-file 浏览器配置 添加启动参数 例如&#xff1a; firefox.exe --ssl-key-log-filec:/s…

Python中setdefault()通过键查找字典中对应的值

【小白从小学Python、C、Java】 【Python-计算机等级考试二级】 【Python-数据分析】 字典中根据键k查找键k对应的值v 如果没找到键k&#xff0c;则创建键k并赋值为default setdefault() [太阳]选择题 以下Python代码中setdefault(d, 666)的返回值是什么&#xff1f; myDic {&…

java基于微信小程序的大学生个人家庭理财产品 uniapp小程序

为了方便操作,从多方面把用户的个人支付&#xff0c;个人收入等财产管理的数据,以及他们的生活结余和消费统计,用科学统计的方法把这些数据存储在财务管理软件之中&#xff61;文中着重论述了该系统的功能与实现,如数据流程与存储&#xff64;管理等功能,并对关键的技术作了较详…

动态规划 - 背包问题 回文串分割

目录 1.背包问题 1.1 题目描述 1.2 画图分析 1.3 思路分析 1.4 代码示例 2. 回文串分割 2.1 题目描述 2.2 思路分析 2.3 代码示例 1.背包问题 1.1 题目描述 有 n 个物品和一个大小为 m 的背包. 给定数组 A 表示每个物品的大小 和数组 V 表示每个物品的价值.问最多能装…

ROS+Arduino学习导航贴

前言 原先写了一些ROSarduino学习记录的帖子&#xff0c;发现每次找起来非常麻烦&#xff0c;所以做一个汇总帖&#xff0c;以后需要的话&#xff0c;找起来就方便了。 关于我用的开发板&#xff0c;一开始学习的时候&#xff0c;我用的开发板是arduino uno这类的&#xff0c…

[笔记]MySQL 插入导致死锁

线上遇到的 MySQL 插入导致死锁,问题排查. 场景复现 MySQL 版本: 5.7.36 数据库存储引擎: InnoDB 事务隔离级别: REPEATABLE-READ 1. 创建测试表 DROP TABLE IF EXISTS tb_task; CREATE TABLE tb_task (id int(11) NOT NULL AUTO_INCREMENT,task_id int(11),order_id int(1…

猿创征文 |【数据结构】2个例题带你理解图的遍历:广度优先搜索

目录 1、定义 2、算法分析 3、算法实现 4、性能分析 &#x1f49f;作者简介&#xff1a;大家好呀&#xff01;我是路遥叶子&#xff0c;大家可以叫我叶子哦&#xff01;❣️ &#x1f4dd;个人主页&#xff1a;【叶子博客】 &#x1f3c6;博主信息&#xff1a;四季轮换…

jquery实现云音乐歌词高亮和自动滚动效果

书接上篇文章 实现效果&#xff1a; 一、歌词高亮 首先要判断当前歌词和播放器的当前时间 循环歌词数组treatLyrics&#xff0c;拿到每条歌词的时间与播放器的当前时间playAudio.currentTime进行比较 treatLyrics.forEach((i, index) > { // console.log(i); // console.…