# 输入类型

InVEST模型可以接受各类空间和非空间化的数据形式。我们将数据类型分为12类：

## 数字

一种标量值。可以是整数型或浮点型，分数不行。

### 单位

大多数数字输入都有单位。InVEST模型尽可能地采用标准的SI单位和符号。这些符号的定义见SI单位 Units <https://en.wikipedia.org/wiki/International_System_of_Units#Units_and_prefixes>`_ and units accepted for use with SI.

InVEST 同样使用非SI单位的**年**.

当单位是**货币**时，任何货币单位都可以使用，但是整个模型只能用统一的货币单位。

注意：t 是公制的吨，或者1000千克的符号，请勿与美国或英国的吨混淆。

## 比例

在0 - 1范围内的无单位比例，其中0表示“无”，1表示“全部”。 一些比率输入可能小于0或大于1，其他的则严格限制在0-1范围内。

## 百分比

在0 - 100范围内的无单位比例，其中0表示“无”，1表示“全部”。 一些百分比输入可能小于0或大于100，其他的则严格限制在0-1范围内。

## 整数

一个整数（正数或者负数）。整数通常用来唯一标识某物。 由于栅格数据仅能储存数字数据，因此整数代码通常被用于标签对非数字化数据进行地图化。 （比如土地使用/土地覆盖类型和土壤数据集）

## 文本

任意格式的文本。InVEST接受所有Unicode（UTF-8）字符。为了获得最佳运算结果，请对非拉丁字母使用Unicode字符集。

## 选项

从一组固定的选项中进行的选择。选项通常显示在下拉菜单中，一些CSV输入包含的列必须包含来自一组固定选项的值，在这种情况下，请确保完全按照写入的方式输入选项。

## 正确/错误

正确/错误输入通常显示为复选框，一些CSV输入有正确/错误选项栏。那么，该模型的文档将详细解释如何输入这些值(`TRUE` or `FALSE`, `1` or `0`, etc.)

## CSV

数据表格储存在 .csv（逗号分隔值）的格式的文件中，任何 电子表格软件都可以创建和编辑表，并导出成CSV格式。Excel能够有效工作的两个CSV格式为"CSV (Comma delimited)"和"CSV UTF-8 (Comma delimited)"。其他的CSV格式可能会报错。

## 栅格

一种以像素形式存储数据的空间数据文件，每个像素都有一个数值。 InVEST接受所有GDAL支持的栅格格式，包括GeoTiff（.tif）等等。 完整的表格详见https://gdal.org/drivers/raster/index.html。

### 频带

栅格可能有多个频带。如果你正在使用多波段栅格数据，所有的InVEST模型都只看第一个频带。 请确保正确的数据集在第一个频段中。

### 数据类型

每个栅格都有决定像素包含数据的最大值和最小值的*数据类型*。一些数据类型可以有正数和负数，其他的数据类型仅识别整数。多数时候不用转换栅格的数据类型，但是需要注意这个问题。

#### 理解数据类型

栅格数据类型变现为可以在GIS软件中查看的栅格原数据代码，一个数据类型的代码由3部分组成：

1. 无符号标记(u)，选项

   默认情况下，数据类型是有符号的，这意味着它们包括一个符号（+或-），指示该数字是正的还是负的。 有符号的数据类型用于存储负数。 如果一种符号类型以**u**开头，意味着是无符号的，所有非符号的数据都是正数，如果不需要储存负数，可以施用非符号数据节省存储空间。

   这种区别只存在于整数数据类型，浮点型通常是有符号的。

2. 类型(浮点 or 整数)

   浮点（浮点）类型可以存储小数点之后的数据。浮点型数据可以存储的小数点位数没有严格的限制，但只能精确到有限的总位数（在小数点之前和之后）。 整数型（整型）只能储存整数，有严格的准确性 对于离散数据，最好尽可能使用整数型数据。

3. 尺寸（8, 16, 32, 64）

   这是用于存储该数字的位数，它确定了可以适合于数据类型的数字的范围。 您可以通过使用适合于您的数据的最小尺寸来节省存储空间。比如：栅格很少需要64位浮点型的数据，32位浮点型的数据对于数据实际应用就足够了，并且仅需要相比64位浮点型数据一半的空间。 8位整数型对于InVEST使用的大多数离散数据（土地使用/土地覆盖类别、土壤组等）是足够的。

以下是所有标准栅格数据类型及其范围（范围包括起始值和结束值）：

- 字节**（**uint8）：从0到255的任意整数

- uint16：从0到65,535的任意整数

- uint32：从0到大约4.2x10的任意整数:sup:9

- int16：从-32,768到32,767之间的任意整数

- int32：任何整数从-2.1x10:sup:9`到2.1x10:sup:`9

- float32：从-3.4x10:sup:38 到3.4x10:sup:38 (精确到约7位)

  备注

  数据越大小数位位数越少，大于2的数字:sup:23 (约8,000,000) 使用小数点左边的全部7位数字，并且根本不能有任何十进位部分。实际上绝大多数的数据都少于7位数，因此，这不是问题。如果确实需要如此大的数字的十进制精度，使用**float64** 代替。

- float64: 任何从-1.7x10:sup:308 到1.7x10:sup:308 的数字（精确到约16位）

备注

有符号字节型（int8，-128到127)也存在。特别是ArcGIS可能会产生有符号的字节栅格。因为GDAL不能直接支持**int8**的类型，因此我们建议避开。为解决这个问题，InVEST在某些情况下允许**int8**类型。如果必须使用**int8**的栅格数据，需要检查中间结果和最终结果是否有意义。

### Nodata值

栅格数据可能有的*nodata*值意味着该区域没有数据。计算中这类像素会被排除。 nodata值必须被编码到栅格的元数据中（否则，InVEST读取不了）。

#### 选择一个nodata值

良好选择nodata值远远超出了真实数据值的范围，但依然在栅格数据类型的范围内。

如果一下满足这两个条件，-1是一个很好的nodata值的选择：

- 数据总是非负的，以及

- 栅格数据类型是有符号的

如果以上条件没有达到，该数据类型的最大值是个很好的选择，最小值也可以用于有符号型数据（对于非符号型数据不要使用最小值：0通常是有效的数据值）。这些都是很好的选择，因为通常比有效数据的范围大或小得多，所以它们不会发生冲突。 离散数据是唯一的例外：对于一个土地利用/土地覆盖类型的整数型栅格，可以选择数据类型范围内不是有效数据值的任何值。

以上建议汇总于下表中。

Continuous data (float data types) | Discrete data (integer data types)
--- | ---
| Signed data type | Unsigned data type | Any integer in the data type range that is not a valid data value (commonly 0, -1, or the data type maximum or minimum)
All valid data is non-negative | -1 | Data type maximum value
Valid data may be negative | Data type maximum or minimum value |

#### 常见的问题

不正确的nodata值设置是造成InVEST错误的常见问题。一些常见的错误：

- 没有设置nodata值，通常使用0或-1来代表nodata的区域。 如果对应值没有赋在栅格元数据上，InVEST会认为其是有效值。 这将导致不正确的结果或错误。除非全部像素栅格值都是有效的（不常见），否则必须设置nodata值。可以检查和编辑栅格元数据，包括GIS软件中的nodata值。

- 使用不合适的nodata值，您的数值必须：

- 在栅格允许的范围内:ref:数据类型<datatypes>。使用这个范围外的数据可能会产生非合意的结果。 　- 与实际数据不冲突。确保完全超出了可能的数据值的范围。

## 矢量

一个储存地形数据的空间数据文件，数据都可能有多个数据属性。 InVEST支持全部GDAL支持的矢量格式，包括GeoPackage (.gpkg), ESRI Shapefile (.shp)等。 详见：https://gdal.org/drivers/vector/index.html.

## 目录

一个文件夹，该文件夹可能需要也可能不需要包含模型所使用的其他文件或文件夹。

## 文件

以上未提及的任何其他类型文件。