GIS空间数据格式简介

news2024/11/28 11:38:05

Gis数据存储

  • 零、前言
  • 一、基础概念
  • 二、矢量数据
    • 1、定义
    • 2、基础
    • 3、WBT/WKB
    • 4、坐标系
    • 5、Geometry
    • 6、要素 / 要素集
    • 7、存储格式
    • 8、图层
  • 三、栅格数据
    • 1、定义
    • 2、基础
    • 3、存储格式

零、前言

1、首先该篇文档主要是针对刚入坑的朋友,如果你对gis的存储结构谙熟于心,建议略过该篇

2、相信刚入坑gis的朋友一定会听到各种各样的数据存储格式,当别人聊起之时,自己却没有涉及,只能暂时记录然后自行百度解决,不仅耗时,书面的解释又晦涩难懂;

介于以上原因,此篇文档横空出世,立志让入坑gis的伙伴能够快速上手gis的数据存储格式,该篇文档会加入很多自身的理解,难免会存在不足,还望各位不要吝惜自己的所见所闻,一起完善这篇文档,毕竟前人种树,后人点火嘛

3、由于想要把本人的所知所想全部表达出来,所以本片文档的文字描述较多,还请耐心看下去,相信对小白还是有一定帮助的

4、本文涉及编程方面的知识,默认语言为java

5、学无止尽,gis的水深不见底,本人也只是一个在岸边停留的人,这篇文档也只是冰山一角

一、基础概念

1、首先得明确,如今(2023)主要的两种gis数据存储分为两大类:“矢量” 和 “栅格”,这两种下又有自己的具体存储形式(特定场景下可以相互转化);对这两种数据的处理是截然不同的,还望不要混淆

2、熟记1,其实久而久之,自然就能区分了,但是如果是刚入坑的对概念还很模糊,还请仔细区分

二、矢量数据

1、定义

矢量数据是在直角坐标中,用x、y坐标表示地图图形或地理实体的位置和形状的数据。矢量数据一般通过记录坐标的方式来尽可能地将地理实体的空间位置表现得准确无误(百度百科)

2、基础

(1)矢量是带方向(主要是顺/逆时针)的,一些图形(主要是环形)方向是有特殊含义的

(2)众所周知,二维图形可分为 点、线、面三个大类

这三大类下又可细分为各自的小类(实际使用时主要是针对这些小类)

   点:单点(Point)

   线:单线(LineString)、环线(LineString,首尾相连的线)

   面:单面(Polygon)、环(Polygon,有内环的面)

(3)当然,在实际使用中,肯定会遇到由多个图形组成一个整体的图形

  例如:一个群岛,他有很多互相隔离小岛,此时只靠一个面是无法精准描述这个群岛的样子了
  
  这个时候,就引入了多面(MultiPolygon)的概念,同理还有多点(MultiPoint)、多线(MultiLineString)

  这些带 "多" 的的图形,实际就是一个由任意数量,有相同类型的单个图形组成的一个"大"图形

(4)诶,这个时候就有吴彦祖要问了,如果一个图形他又有点,又有面该怎么办呢

  当然这个问题,我们的前人也想到了,于是就有了几何集合(GeometryCollection)的概念

  几何集合他其实就是一个任意数量,含有不同类型的单个图形组成的一个"大"图形

(5)到这,一个图形具体的表示方法就能归纳出来了(这里也只是列举了一些常用的,还有很多其他的就需要自行百度了)

   点:单点(Point)、多点(MultiPoint)

   线:单线(LineString)、环线(LineString,首尾相连的线)、多线(MultiLineString)

   面:单面(Polygon)、环(Polygon,有内环的面)、多面(MultiPolygon)

   混合图形:几何集合(GeometryCollection)

3、WBT/WKB

想要表示一个图形,我们就得有一套规范,这套规范就是 WKT(Well-Known Text) 和 WKB(Well-Known Binary),他们的关系:WKT就是文本样子的WKB,WKB就是二进制的WKT

这里主要介绍WKT,毕竟正常人也看不懂WKB,反正有办法可以互转(wkb/wkt互转),不必为难自己;说白了,WKT是给人看的,WKB是给计算机看的,在代码表现形式上两者都是字符串类型

哦,忘了,WKT说人话(我的理解)就是 一种可以用人类可读的文本来表示空间图形的一套规范,熟练之后其实很简单

言归正传,接下来将阐述如何使用WKT表达图形

(1)还有一个概念:

    在二维空间内,要想表达一个点,实际就是描述一组横纵坐标(x和y),在地理描述上也只不过是换成了经纬度(longitude 和 latitude)

    一条线是由无数的点组成,在这里也不列外,要想表达一条线,实际就是列举出他所包含的点

    当然,在计算机中,我们是无法做到列出所有的点,因此,在表达线时,需要尽量少的列举出能够尽可能完全表达其样子的点,如拐点

    在计算机中,是不可能完全表达出一条平滑的曲线,因为每两连续的点处的斜率都不同,因为我们也只是尽量列举出有代表性的点,然后交由具体的算法去表达

    在了解怎么表达线后,在表达面时,实际上就是描述一条首尾相连的线,然后知道告诉大家他的类型为面即可

(2)要想表达一个图形,首先得先表明其图形类型,就像java要用一个变量,就得先声明其数据类型一样;具体的图形对应的类型,前面也给出了一些(不区分大小写),可做参考

(3)在确定其类型后,接着就是描述图形的样子,就是图形其包含的点,具体只能看下面几个例子了;要想将WKT可视化,可以使用这个网址:WKT可视化

    单点:POINT(1 6)

    多点:MULTIPOINT(2 2, 5 9)、MULTIPOINT((2 2), (5 9))   这两个是一样的效果,计算机是会自动识别的,一组点用空格(" ")来分隔x和y,两组点之间用 逗号(",")进行分隔不用的点,以下同理

    单线:LINESTRING(1 1, 3 6, 7 0, 5 9, 0 1)

    环线:LINESTRING(0 0, 0 10, 10 10, 10 0, 0 0)

    多线:MULTILINESTRING((1 1, 4 0, 4 9, 8 3), (13 17, 10 19, 18 14, 12 17, 10 10), (0 0, 0 -10, -10 -10, -10 0, 0 0))

    单面:POLYGON((2 4, 0 5, 9 3, 8 3, 8 7, 2 4))      POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))    表达面时,一定要首尾相连;即使是单面,也必须得把表达的面用括号("()")包裹起来,因为涉及到环的表达

    环:   POLYGON((0 0, 0 10, 10 10, 10 0, 0 0), (2 2, 4 2, 4 4, 2 4, 2 2))    外环逆,内环顺,矢量的方向性在这就能体现,但这只是一个约定俗称的规范,只是为了增加人类可读性

              POLYGON((0 0,0 10,10 10,10 0,0 0), (2 2,2 6,6 6,6 2,2 2), (3 3,3 8,8 8,8 3,3 3))    实际上计算机是按照 “单数为实,双数为空”(也就是某块空间在整体出现的次数) 的逻辑来判断是否图形是否被挖空

    多面:MULTIPOLYGON(((0 0,0 2,2 2,2 0,0 0)), ((3 3, 3 5, 5 5, 5 3, 3 3)))   和多点多线类似,只是要注意一个面需要用双层括号("(())")包裹

4、坐标系

坐标系主要有以下两种

(1)地理坐标系:在真实地球上,使用实际的经纬线来描述实际位置(点)的坐标系。

     由于地球实际为不规则图形,因此根据不同地方对地球形状的不同解释,就出现了不同的地理坐标系,常见的有4490、4326

     4326:EPSG4326是基于WGS84椭球的经纬度坐标系(大地坐标系,BL),除中国外,国际上普遍使用4326来描述位置

     4490:EPSG4490是基于CGCS2000椭球的经纬度坐标系(地理坐标系),中国国内常常使用4490来描述位置

     实际上,这两者相差的误差不会很大,在使用时基本可以认为是一致的

(2)投影坐标系:将真实地球投影到二维空间(地图)上时,此时就需要用到投影坐标系来描述位置(使用x和y,但依旧是使用经纬度进行表达)

     根据投影方法不同,也出现了不同的投影坐标系,常见的有 4490(等距投影,使用经纬度直投)、3857(墨卡托投影,也叫等角投影)

     3857:使用底面圆直径刚好等于地球赤道处圆直径的圆柱体将地球包裹,以地心为原点,连接地心和地表点形成一条射线,射线与圆柱体侧面相交的点是即为该点在平面的投影,最后将圆柱体侧面展开就是墨卡托投影(航海地图)

     4490:即在平面内,单个方向上(x或y),每一度的距离都是相等的投影;投影时就是将其在地理坐标系下的经纬度,直接放在平面坐标系下即可

5、Geometry

在了解了坐标系后,我们就会知道,同一个图形,在不同的投影坐标系下,它所表达的地理图形(在真实地球上的样子)是可能会有差距的

因此,我们在描述一个地理上的物体时,如一片湖泊,不止要描述其形状,还得为其指定一个坐标系,这样才能精准的表达其在地理上的图形

因为,我们将这两者合并起来,于是就出现了Geometry(一个类,在jts包下)的概念,其中的geometry表示图形,srid属性表示坐标系

当然,除了图形和坐标系,一个图形还有很多其他有用的可用信息,如面的面积、线的长度等,但这些都能通过其图形和坐标系结合算出来

6、要素 / 要素集

到这,我们会发现Geometry所能表达的所有信息都是其图形本身的,在实际使用时我们通常会结合其他信息一同使用

例如我们要描述杭州市,我们可以用Geometry来描述其地理轮廓,但当我们还需要存储其如人口数量、近几年的GDP时,Geometry就无能为力了

这个时候,我们就引入了要素的概念,在java里就是一个带有Geometry属性的自定义类的一个实例对象;在数据库,如postgres,其表现就是一个带有空间字段的表中的一条记录;它可以自定义一些其它你所需要存储的信息

多个要素组合起来就形成了一个集合(collection,数组、列表、SimpleFeatureCollection等),通常称这个集合为要素集

7、存储格式

当我们已经有了一个要素集后,就可以使用以下的方式存储起来,方便今后使用

(1).gpkg: geopackage文件,文件型数据库(sqlite),可以使用 DB Brower For SQLIite来进行查看(文件见附件1),其查询和mysql相同,

(2)postgres: 数据库,类似mysql,两者的基本语法无区别,但是在一些细节上有区别,例如mysql的上引号(" ` “),在postgres中需要使用双引号(” " ")来表示

      可以存储gis信息以及使用gis相关函数
       一些常见的空间函数
             st_astext(空间字段名):以wkt的形式展示空间信息
             st_srid(空间字段名):空间字段对应的坐标系
             st_geometryfromtext(空间信息字符串,wkt/wkb/ewkt等):将字符串内容转为Geometry
             st_area(空间字段名):空间字段的图形面积
             st_xmin(空间字段名) : st_ymin(...) / st_xmax(...) / st_ymax(...):空间字段图形的最小经度 / 最小纬度/ 最大经度 / 最大纬度

更多空间函数可参考:https://desktop.arcgis.com/zh-cn/arcmap/10.7/manage-data/using-sql-with-gdbs/st-numgeometries.htm

(3).geojson: 带有空间信息的json文件,但其最外层只能是大括号(“{}”)包裹,换言之可以理解为一个geojson只能表达一个对象,即一个要素

(4).kml: 带有空间信息的xml文件

(5)shp: ESRI Shapefile(shp),或简称shapefile,由一组文件组成

      其中必须含有的文件(一般这几个文件再加上一个.prj文件就够了)

              .shp— 图形格式,用于保存元素的几何实体。

              .shx— 图形索引格式。几何体位置索引,记录每一个几何体在shp文件之中的位置,能够加快向前或向后搜索一个几何体的效率。

              .dbf— 属性数据格式,以dBase IV的数据表格式存储每个几何形状的属性数据。

     其他可以包含的文件

              .prj— 投帧式,用于保存地理坐标系统与投影信息,是一个存储well-known text投影描述符的文本文件。

              .sbnand.sbx— 几何体的空间索引

              .fbnand.fbx— 只读的Shapefiles的几何体的空间索引

              .ainand.aih— 列表中活动字段的属性索引。

              .ixs— 可读写Shapefile文件的地理编码索引

              .mxs— 可读写Shapefile文件的地理编码索引(ODB格式)

              .atx—.dbf文件的属性索引,其文件名格式为shapefile.columnname.atx(ArcGIS 8及之后的版本)

              .shp.xml— 以XML格式保存元数据。

              .cpg— 用于描述.dbf文件的代码页,指明其使用的字符编码。

8、图层

首先明确,一个要素集,就是一个图层

因为存储格式的区别,一些存储格式是可以在同一个位置放入多个要素集,也就是常说的多图层存储格式

(1)postgres 一张表只能存入一个要素集,通常一张表中我们只处理一个空间字段,当有多个空间字段时,默认处理第一个空间字段,因此可以认为一张表是单图层存储格式

        一个库可以有多张表,所以一个库可以理解为多图层存储,

        在实际使用时,我们的操作单元一般为表,所以可以认为postgres是一个单图层存储格式

(2).gpkg 因为其本质是一个数据库,所以它可以存储多张表,实际使用中对其的操作单元一般为整个文件,所以可以认为gpkg是一个多图层存储格式

(3).geojson 一个标准的geojson最外层只能用大括号(“{}”)包裹,也就意味着它只能表达一个要素集,因此,geojson是一个单图层存储格式

      geojson还有另外两种衍生文件类型:.geojsons和.geojsonl,同样也只能是单图层存储格式

(4).kml kml文件和geojson一样,也只能是单图层存储格式

(5)shp 一组shp文件只能表示一个图层,因此一组shp文件是单图层存储格式

       由于其是由一组文件组成,它就会有一个父目录,而我们也可以操作该目录,工具通常会自动识别里面存储的shp文件组,既然是目录,就表明它是可以存储多组shp文件的,此时,该目录就是多图层存储格式

       在实际使用时,我们操作单元一般为shp文件组,而不是shp文件组的目录,所以通常认为shp文件是单图层存储格式

三、栅格数据

1、定义

栅(shān)格数据就是将空间分割成有规律的网格,每一个网格称为一个单元,并在各单元上赋予相应的属性值来表示实体的一种数据形式。每一个单元(像素)的位置由它的行列号定义,所表示的实体位置隐含在栅格行列位置中,数据组织中的每个数据表示地物或现象的非几何属性或指向其属性的指针。一个优秀的压缩数据编码方案是:在最大限度减少计算机运算时间的基点上进行最大幅度的压缩。(百度百科)

2、基础

首先要先理解几个定义

(1)像素:像素就是一个个有明确位置和颜色的小方格,很多像素组合在一起就能形成我们平时所看到的图片

(2)分辨率:可以理解为一单位面积中所包含的像素个数,但通常这一单位就代指整个图片或屏幕,所以分辨率可以描述为 图片长的像素个数 * 图片宽的像素个数

       由定义就可知,分辨率越高,图片越清晰,我们常说的马赛克就是一副分辨率极低的图片,低到可能只有几个像素

下面就是一些计算机的分辨率
在这里插入图片描述

(3)灰度值:把一种颜色最低的程度与最高的程度分为若干级,称为“灰度等级”,范围一般从0到255,其中每一个值都表示一个精确的颜色深浅程度,这个值就叫“灰度值”

     通常灰度值越小,颜色越深,如 红色(0)到 红色(255):就是从深红(当然当灰度值为0时,视觉上就是黑色)到浅红

(4)波段:首先明确,一个波段,就是一个带颜色的灰度值矩阵,矩阵中每个灰度值代表该种颜色在对应像素下的颜色深浅程度,或者其对应的色段映射列表

 当一个栅格文件只有一个波段时,那我们就称其为单波段栅格文件
 
 既然有单波段栅格文件,那就一定有多波段栅格文件,顾名思义,即该栅格文件中含有多个颜色波段

在这里插入图片描述

如上图所示,一个栅格文件含有三个颜色(红/绿/蓝)的波段,
最左边的是他们对应的灰度值矩阵,
中间的是每个灰度值矩阵带上其对应颜色后的视觉效果,
最右边是将这三个波段叠加在一起后的效果,也是平常看到的栅格文件效果

(5)掩膜(mask):首先,掩膜通常也是一个灰度值矩阵

     日常生活中,很少有图像能完整的覆盖整个文件,因此会留有很多的空白地方,而这些空间地方是不需要展示,也就是图片背景

     所以我们处理时需要识别出这些空白地方,通常我们会给这些空白地方的像素填充一个指定的灰度值,并记录在指定地方,在图像处理时会对所有灰度值为指定值的像素做特殊处理

     在栅格文件中,这个在空白处填充的值叫做空白值(noDataValue),在渲染图像时,会将图像矩阵的每个像素的灰度值与对应的掩膜矩阵灰度值对比,当满足某种关系(异或,与,非等)时,对该像素做处理

在这里插入图片描述
如上图,mask就是掩膜矩阵,上图的关系就是:当掩膜矩阵的像素灰度值为0时,不论原图该像素的灰度值是多少,最后灰度值都为0;当为1时,最后结果则为原图在该像素的灰度值

3、存储格式

(1).tif / .tiff:标准的tif文件,文件存储了一个或者多个波段,在win11系统下,可以使用图片查看器直接查看tif文件,视觉效果是所有波段叠加后的图片效果

tif文件中使用noDataValue值来存储tif的空白值

(2)cogtif: 云端tif文件,本质上还是一个tif文件

在开发中,tif文件常常是存储在云端而非本地,当一张tif过大时,会出现下载困难的情况
因此就诞生了cogtif文件,目的是为了更加高效下载、使用存储在云端的tif文件

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【python】计算机视觉~舌象图片中舌体倾斜判别(四)

返回至系列文章导航博客 1 简介 在智能舌诊时,需要判断舌头的胖瘦,这需要舌头在图片中处于近似垂直的位置才方便判断,不能过于倾斜。那么如何让计算机智能地知道舌体是否倾斜呢?这是这篇文章讨论的重点! 首先也是最重…

一种轻量的“虚拟机”——Windows 沙盒模式

Windows 沙盒模式Windows沙盒的好处操作步骤Windows沙盒的好处 相比虚拟机和第三方的沙盒软件,Windows Sandbox启用后仅占用100MB硬盘空间,还能与物理机安全地共享部分内存空间。简单来说就是易用、免费、不卡机! 由于要保证沙盒内的数据不…

表面弛豫、重构以及覆盖效应

目录 1表面弛豫 2表面能的计算 3对称和非对称板块模型 4 表面重构 5表面上的吸附质 6表面覆盖效应 1表面弛豫 在上述例子中,为了建立五层原子的板块模型,将原子放置在了板块模型中。原子的位置是理想的,是 材料中的体相原子位置。在体相的 金属中,任何两个相邻原子的间…

burpsuite 插件编写基础

文章目录一、什么是扩展 / 插件?二、burp 的扩展三、开发步骤一、什么是扩展 / 插件? 关于这个话题,知乎有一个回答题不错,主要也是引用了wikipedia 插件/扩展,是向现有的计算机程序添加特定功能的软件组件。 主程序…

3.2.2队列的顺序存储实现

队列是一种操作受限的顺序表(只能在队头删除,在队尾插入)。 所以依旧使用静态数组的形式去存储队列。 (1)创建(初始化) 现定于(顺序队列)的结构体 初始化队列时&#x…

CentOS7---Nginx安装并配置虚拟主机

1、源码安装nginx,并提供服务脚本 源码包的获取:官网下载 实验环境:和企业环境类似,关闭防火墙,禁用selinux,使用静态IP地址 安装步骤: 步骤一:安装Nginx所需的pcre库 [rootnode01 ~…

openvpn (用户名密码模式)

目录 一、介绍 1、定义 2、原理 3、加密和身份验证 二、在centos 7.5上搭建openvpn 1、安装openvpn 和easy-rsa(该包用来制作ca证书) 2、配置/etc/openvpn/ 目录 3、创建服务端证书及key 4、创建客户端证书 5、把服务器端必要文件放到etc/openvpn/ 目录下…

LeetCode 785. Is Graph Bipartite【DFS,二分图】中等

本文属于「征服LeetCode」系列文章之一,这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁,本系列将至少持续到刷完所有无锁题之日为止;由于LeetCode还在不断地创建新题,本系列的终止日期可能是永远。在这一系列刷题文章…

[牛客101] 二叉树的层序遍历

这道题会考察很多知识点,这里专门进行详解 文章目录题目描述二. 题目分析完整代码题目描述 二. 题目分析 首先,我们会想到存储方式为二维数组.数组每一行存储一层的结点.怎么确定每一行要存储几个结点呢.由于节点与节点之间存在父子关系,所以,在存储某一层的结点时,就可以通过…

使用Process Explorer和Dependency Walker排查C++程序中dll库动态加载失败问题

目录 1、exe主程序启动时的库加载流程说明 2、加载dll库两种方式 2.1、dll库的隐式引用 2.2、dll库的动态加载 3、本案例中的问题描述 4、使用Process Explorer和Dependency Walker分析dll库加载失败的原因 4.1、Process Explorer工具介绍 4.2、使用Process Explorer工…

Mysql日志系统-mysql serve层

Mysql日志系统-服务层的日志 mysql给我们提供了很多有用的日志有mysql服务层提供的,有innodb引擎层提供的,下表是mysql服务层给我们提供的: 日志类型写入日志的信息二进制日志记录了对MySQL数据库执行更改的所有操作慢查询日志记录所有执行…

【JavaScript】2.JavaScript函数

JavaScript 函数 1. 函数的概念 函数&#xff1a;就是封装了一段可被重复调用执行的代码块 通过此代码块可以实现大量代码的重复使用 2. 函数的使用 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta na…

定点乘法器优化---华为杯

一. 简介 在本篇文章开始之前&#xff0c;先对上篇文章中的一个错误进行指正一下。在部分积生成的时候&#xff0c;需要计算-2A和2A的值&#xff0c;我的做法就是直接左移了一位&#xff0c;这样就会有一个问题&#xff0c;符号位被移掉了&#xff0c;为什么我的计算结果还是对…

Java Stream API 操作完全攻略:让你的代码更加出色 (三)

前言 Java Stream 是一种强大的数据处理工具&#xff0c;可以帮助开发人员快速高效地处理和转换数据流。使用 Stream 操作可以大大简化代码&#xff0c;使其更具可读性和可维护性&#xff0c;从而提高开发效率。本文将为您介绍 Java Stream 操作的所有方面&#xff0c;包括 gro…

c++中的类继承

面向对象编程的主要目的是之一是提供可重用的代码。开发新项目&#xff0c;尤其是当项目十分庞大时&#xff0c;重用经过测试的代码比重新编写代码要好得多。使用已有的代码可以节省时间&#xff0c;由于已有的代码已被使用和测试过&#xff0c;因此有助于避免在程序中引入错误…

在Github中77k星的王炸AutoGPT,会独立思考,直接释放双手

文章目录1 前言1.1 什么是AutoGPT1.2 为什么是AutoGPT2 AutoGPT部分实例2.1 类似一个Workflow2.2 市场调研2.3 自己写播客2.4 接入客服3 安装和使用AutoGPT3.1 安装3.2 基础用法3.3 配置OpenAI的API3.4 配置谷歌API3.5 配置Pinecone API4.讨论1 前言 迄今为止&#xff0c;Gith…

枚举类注解

一、枚举类&#xff1a; 1.枚举类的使用 类的对象只有有限个&#xff0c;确定的。比如&#xff1a;星期、性别、季节 当需要定义一组常量时&#xff0c;强烈建议使用枚举类。 定义枚举类的方法&#xff1a; 一&#xff1a;jdk5.0之前&#xff0c;自定义枚举类 package com.ypl…

https访问fastdfs图片

引用&#xff1a;https://blog.csdn.net/love8753/article/details/128872320 配置nginx 的SSL模块&#xff1a;https://www.cnblogs.com/ghjbk/p/6744131.html 获取ssl证书 将ssl证书&#xff0c;拷贝到服务器的一个目录下 nginx添加 http_ssl_module 最开始安装的nginx只有 …

Spimes x5.0主题模板全开源源码/Typecho主题模板

☑️ 品牌&#xff1a;Typecho ☑️ 语言&#xff1a;PHP ☑️ 类型&#xff1a;主题模板 ☑️ 支持&#xff1a;PCWAP &#x1f389;有需要的朋友记得关赞评&#xff0c;底部分享获取&#xff01;&#xff01;&#xff01; &#x1f389; ✨ 源码介绍 Spimes x5.0主题模板全开…

【2023 年第十三届 MathorCup 高校数学建模挑战赛】 B 题 城市轨道交通列车时刻表优化问题 详细建模方案及代码实现

2023-4-15 更新了代码 【2023 年第十三届 MathorCup 高校数学建模挑战赛】 B 题 城市轨道交通列车时刻表优化问题 更新信息&#xff1a;2023-4-15 更新了代码 1 题目 列车时刻表优化问题是轨道交通领域行车组织方式的经典问题之一。 列车时刻表规定了列车在每个车站的到达和…