---
schema_version: "1"
id: 8d47a05f22f5bd34ff24f93c8042c5260331880d59657aa448295e65f9b49c49
title: 空间函数
collection: tableau
version: next
locale: zh-cn
portal_url: https://docs.salesforce.com/tableau/next/zh-cn/pro/desktop/functions_functions_spatial.md
canonical_url: https://help.tableau.com/v0.0/pro/desktop/zh-cn/functions_functions_spatial.htm
source_site: help.tableau.com
content_type: documentation
content_hash: 19016f13eb5531846234ff63ad69c9fd35586085a5fbe89474de027b8bc897be
description: Reference for spatial functions such as BUFFER, DISTANCE, and INTERSECTS.
---
[跳转到主要内容](#main-content)

# 空间函数

空间函数允许您执行高级空间分析，并将空间文件与其他格式的数据（如文本文件或电子表格）相结合。例如，您可能有城市议会区的空间文件，以及一个包含所报告路面坑洼的纬度和经度坐标的文本文件。您可以在创建数据源时使用空间计算来联接这些文件，并分析哪个区域修复路面坑洼所花费的时间最长。

您还可以创建一个线条，用于连接起点-终点地图的两个数据点。例如，您可能有一个包含公共交通数据的电子表格，指明通勤者的行程起点和终点。您可以使用空间计算来查看通勤者所走的路径。

## Tableau 中的可用空间函数

### AREA

<table class="table--plain" style="width: 100%;"><colgroup><col style="width: 20%;"><col></colgroup><tbody><tr><td>语法</td><td><code>AREA(Spatial Polygon, 'units')</code></td></tr><tr><td>输出</td><td>数字</td></tr><tr><td>定义</td><td>返回 <code>&lt;spatial polygon&gt;</code> 的总表面积。</td></tr><tr><td>示例</td><td><pre xml:space="preserve">AREA([Geometry], 'feet')</pre></td></tr><tr><td>说明</td><td><p>支持的单位名称（计算时必须用引号括起来，例如<code>'miles'</code>）：</p><ul><li><i>米</i>：meters、metres、m</li><li><i>公里</i>：kilometers、kilometres、km</li><li><i>英里</i>：miles、mi</li><li><i>英尺</i>：feet、ft</li></ul><p></p></td></tr></tbody></table>

### BUFFER

<table class="table--plain" style="width: 100%;"><colgroup><col style="width: 20%;"><col></colgroup><tbody><tr><td>语法</td><td><code>BUFFER(Spatial point, distance, 'units')</code><p><code>BUFFER(Spatial linestring, distance, 'units')</code></p><p><code>BUFFER(Spatial polygon, distance, 'units')</code></p><ul><li><i>米</i>：meters、metres、m</li><li><i>公里</i>：kilometers、kilometres、km</li><li><i>英里</i>：miles、mi</li><li><i>英尺</i>：feet、ft</li></ul></td></tr><tr><td>输出</td><td>几何图形</td></tr><tr><td>定义</td><td><p>对于空间点，返回以 <code>&lt;spatial point&gt;</code> 为中心的多边形形状，半径由 <code>&lt;distance&gt;</code> 和 <code>&lt;unit&gt;</code> 值确定。</p><p>对于线串，计算通过包含距线串的半径距离内的所有点而形成的多边形。</p><p>对于多边形，计算作为每个给定多边形的内边（负距离）或外边（正距离）的多边形。</p></td></tr><tr><td>示例</td><td><pre xml:space="preserve">BUFFER([Spatial Point Geometry], 25, 'mi')</pre><pre xml:space="preserve">BUFFER(MAKEPOINT(47.59, -122.32), 3, 'km')</pre><pre xml:space="preserve">BUFFER(MAKELINE(MAKEPOINT(0, 20),MAKEPOINT (30, 30)),20,'km'))</pre></td></tr><tr><td>说明</td><td><p>支持的单位名称（计算时必须用引号括起来，例如<code>'miles'</code>）：</p><ul><li><i>米</i>：meters、metres、m</li><li><i>公里</i>：kilometers、kilometres、km</li><li><i>英里</i>：miles、mi</li><li><i>英尺</i>：feet、ft</li></ul></td></tr></tbody></table>

### DIFFERENCE

<table class="table--plain" style="width: 100%;"><colgroup><col style="width: 20%;"><col></colgroup><tbody><tr><td>语法</td><td><code>DIFFERENCE(Spatial, Spatial)</code></td></tr><tr><td>输出</td><td>空间多边形</td></tr><tr><td>定义</td><td>当第二个参数中的所有区域都是从第一个参数中重叠的区域划分出来时，计算剩余区域的部分。丢弃第二个参数中不重叠的区域。</td></tr><tr><td>示例</td><td><pre xml:space="preserve">DIFFERENCE(Spatial Polygon1, Spatial Polygon2)</pre></td></tr><tr><td>说明</td><td><p>支持空间多边形和多重多边形，不支持空间点或线。</p></td></tr></tbody></table>

### DISTANCE

<table class="table--plain" style="width: 100%;"><colgroup><col style="width: 20%;"><col></colgroup><tbody><tr><td>语法</td><td><code>DISTANCE(SpatialPoint1, SpatialPoint2, 'units')</code></td></tr><tr><td>输出</td><td>数字</td></tr><tr><td>定义</td><td>以指定 <code>&lt;unit&gt;</code> 返回两点之间的距离测量值。</td></tr><tr><td>示例</td><td><pre>DISTANCE([Origin Point],[Destination Point], 'km')</pre></td></tr><tr><td>说明</td><td><p>支持的单位名称（计算时必须用引号括起来，例如<code>'miles'</code>）：</p><ul><li><i>米</i>：meters、metres、m</li><li><i>公里</i>：kilometers、kilometres、km</li><li><i>英里</i>：miles、mi</li><li><i>英尺</i>：feet、ft</li></ul></td></tr><tr><td>数据库限制</td><td>此函数只能使用实时连接创建，但在将数据源转换为数据提取的情况下将继续工作。</td></tr></tbody></table>

### INTERSECTION

<table class="table--plain" style="width: 100%;"><colgroup><col style="width: 20%;"><col></colgroup><tbody><tr><td>语法</td><td><code>INTERSECTION (spatial, spatial)</code></td></tr><tr><td>输出</td><td>多边形</td></tr><tr><td>定义</td><td>计算并返回第二个参数中与第一个参数中区域重叠的区域部分。</td></tr><tr><td>示例</td><td><tt>INTERSECTION (Spatial Polygon1, Spatial Polygon2)</tt></td></tr><tr><td>说明</td><td>支持空间多边形和多重多边形，不支持空间点或线。</td></tr></tbody></table>

### INTERSECTS

<table class="table--plain" style="width: 100%;"><colgroup><col style="width: 20%;"><col></colgroup><tbody><tr><td>语法</td><td><code>INTERSECTS (geometry1, geometry2)</code></td></tr><tr><td>输出</td><td>布尔值</td></tr><tr><td>定义</td><td>返回 true 或 false，指示两个几何图形是否在空间中重叠。</td></tr><tr><td>说明</td><td>支持的组合：点/多边形、线/多边形和多边形/多边形。</td></tr></tbody></table>

### LENGTH

<table class="table--plain" style="width: 100%;"><colgroup><col style="width: 20%;"><col></colgroup><tbody><tr><td>语法</td><td><code>LENGTH(geometry, 'units')</code></td></tr><tr><td>输出</td><td>数字</td></tr><tr><td>定义</td><td>使用给定的 <code>&lt;units&gt;</code> 返回 <code>&lt;geometry&gt;</code> 中的一个或多个线串的大地路径长度。</td></tr><tr><td>示例</td><td><pre xml:space="preserve">LENGTH([Spatial], 'metres')</pre></td></tr><tr><td>说明</td><td>如果 geometry 参数没有线串，则结果为 <code>&lt;NaN&gt;</code>，但允许使用其他元素。</td></tr></tbody></table>

### MAKELINE

<table class="table--plain" style="width: 100%;"><colgroup><col style="width: 20%;"><col></colgroup><tbody><tr><td>语法</td><td><code>MAKELINE(SpatialPoint1, SpatialPoint2)</code></td></tr><tr><td>输出</td><td>几何图形（线）</td></tr><tr><td>定义</td><td>在两点之间生成线标记</td></tr><tr><td>示例</td><td><pre>MAKELINE(MAKEPOINT(47.59, -122.32), MAKEPOINT(48.5, -123.1))</pre></td></tr><tr><td>说明</td><td>对于构建出发地-目的地地图很有用。</td></tr></tbody></table>

### MAKEPOINT

<table class="table--plain" style="width: 100%;"><colgroup><col style="width: 20%;"><col></colgroup><tbody><tr><td>语法</td><td><code>MAKEPOINT(latitude, longitude, [SRID])</code></td></tr><tr><td>输出</td><td>几何图形（点）</td></tr><tr><td>定义</td><td><p>将数据从 <code>&lt;latitude&gt;</code> 和 <code>&lt;longitude&gt;</code> 列转换为空间对象。</p><p>如果添加了可选的 <code>&lt;SRID&gt;</code> 参数，输入可以是其他投影地理坐标。</p></td></tr><tr><td>示例</td><td><pre>MAKEPOINT(48.5, -123.1)</pre><pre xml:space="preserve">MAKEPOINT([AirportLatitude], [AirportLongitude])</pre><pre xml:space="preserve">MAKEPOINT([Xcoord],[Ycoord], 3493)</pre></td></tr><tr><td>说明</td><td><p><code>MAKEPOINT</code> 无法使用自动生成的纬度和经度字段。数据源必须包含本机坐标。</p><p><code>SRID</code> 是一种空间参考标识符，它使用 <a href="https://epsg.io/" target="_blank">ESPG 参考系代码</a>来指定坐标系。如果未指定 <code>SRID</code>，则假设使用 WGS84，并将参数视为以度数为单位的纬度/经度。</p><p>您可以使用 <code>MAKEPOINT</code> 使数据源具备空间特性，以便可以使用空间联接将其与空间文件联接。有关详细信息，请参见<a href="https://help.tableau.com/v0.0/pro/desktop/zh-cn/maps_spatial_join.htm" class="xref">在 Tableau 中联接空间文件</a>。</p></td></tr></tbody></table>

### NO\_CUTOUTS

<table class="table--plain" style="width: 100%;"><colgroup><col style="width: 20%;"><col></colgroup><tbody><tr><td>语法</td><td><code>NO_CUTOUTS (spatial)</code></td></tr><tr><td>输出</td><td>校正后的空间多边形</td></tr><tr><td>定义</td><td>若平面地球解释需要多边形反转，则返回校正后的空间多边形；否则，返回原始多边形。</td></tr><tr><td>说明</td><td><p>像 Keyhole 标记语言 (.kml) 这样的空间文件格式要求多边形边界遵循特定的坐标方向。如果数据集反向绘制边界，Tableau 会将外部空间解释为形状。<code>NO_CUTOUTS</code> 重新排序这些坐标以恢复正确的布局。</p></td></tr></tbody></table>

### OUTLINE

<table class="table--plain" style="width: 100%;"><colgroup><col style="width: 20%;"><col></colgroup><tbody><tr><td>语法</td><td><code>OUTLINE(spatial polygon)</code></td></tr><tr><td>输出</td><td>几何图形</td></tr><tr><td>定义</td><td>将多边形几何图形转换为线串。</td></tr><tr><td>说明</td><td><p>对于为轮廓创建单独的图层很有用，该图层的样式可以与填充不同。</p><p>支持多边形内的多边形。</p></td></tr></tbody></table>

### PARSE\_WKT

<table class="table--plain" style="width: 100%;"><colgroup><col style="width: 20%;"><col></colgroup><tbody><tr><td>语法</td><td><code>PARSE_WKT (String)</code></td></tr><tr><td>输出</td><td>空间（地理）</td></tr><tr><td>定义</td><td>将包含地理实体（例如点、线串或面）的已知文本 (WKT) 表示形式的文本字符串字段转换为空间值。</td></tr><tr><td>说明</td><td><p>假定坐标使用 WGS-84 纬度和经度。有关 WKT 的详细信息，请参见<a href="https://en.wikipedia.org/wiki/Well-known_text_representation_of_geometry">众所周知的几何文本表示形式</a>。</p></td></tr></tbody></table>

### SHAPETYPE

<table class="table--plain" style="width: 100%;"><colgroup><col style="width: 20%;"><col></colgroup><tbody><tr><td>语法</td><td><code>SHAPETYPE(geometry)</code></td></tr><tr><td>输出</td><td>字符串</td></tr><tr><td>定义</td><td>返回描述空间 <code>&lt;geometry&gt;</code> 结构的字符串，例如 Empty、Point、MultiPoint、LineString、MultiLinestring、Polygon、MultiPolygon、Mixed 和 unsupported。</td></tr><tr><td>示例</td><td><pre xml:space="preserve">SHAPETYPE(MAKEPOINT(48.5, -123.1)) = "Point"</pre></td></tr></tbody></table>

### SYMDIFFERENCE

<table class="table--plain" style="width: 100%;"><colgroup><col style="width: 20%;"><col></colgroup><tbody><tr><td>语法</td><td><code>SYMDIFFERENCE(spatial, spatial)</code></td></tr><tr><td>输出</td><td>几何图形</td></tr><tr><td>定义</td><td>计算第二个参数中与第一个参数中的区域重叠的任何部分，并从两者中丢弃。返回两个参数中区域的剩余部分。</td></tr><tr><td>示例</td><td><p><code>SYMDIFFERENCE(Spatial Polygon1, Spatial Polygon2)</code></p></td></tr></tbody></table>

### UNION

<table class="table--plain" style="width: 100%;"><colgroup><col style="width: 20%;"><col></colgroup><tbody><tr><td>语法</td><td><code>UNION(spatial 1, [spatial 2])</code></td></tr><tr><td>输出</td><td>几何图形</td></tr><tr><td>定义</td><td>通过将相邻或重叠边界融合为单个空间几何图形来合并空间几何图形。</td></tr><tr><td>说明</td><td><p>当使用一个参数 (<code>UNION(spatial)</code>) 时，<code>UNION </code>将充当聚合函数，跨行合并字段中的所有空间对象。</p><p>当与两个参数 (<code>UNION(spatial1, spatial2)</code>) 一起使用时，<code>UNION </code>会合并两个不同的空间字段或几何图形。</p><p>对于点和线串，<code>UNION </code>将所有元素合并到一个集合中。对于多边形，重叠或接触的形状会融合为单个多边形或多个多边形。</p></td></tr></tbody></table>

### VALIDATE

<table class="table--plain" style="width: 100%;"><colgroup><col style="width: 20%;"><col></colgroup><tbody><tr><td>语法</td><td><code>VALIDATE(spatial geometry)</code></td></tr><tr><td>输出</td><td>几何图形</td></tr><tr><td>定义</td><td>确认空间值中几何图形的拓扑正确性。如果由于诸如面的周长与自身相交等问题而导致该值无法用于分析，则结果将为 null。如果几何图形正确，结果将是原始几何图形。</td></tr><tr><td>示例</td><td><p><code>UNION(VALIDATE([Geometry]))</code></p></td></tr></tbody></table>

## 使用空间计算

### 使用 MAKEPOINT 创建空间数据源

您可以使用 MAKEPOINT 使数据源具备空间特性，以便可以使用空间联接将其与空间文件联接。若要使用 MAKEPOINT，您的数据必须包含纬度和经度坐标。

1. 打开 Tableau 并连接到一个空间数据源。
2. 在“连接”下，单击“添加”以添加第二个非空间数据源。
    
    这两个数据源将添加到画布。
    
    > [!TIP]
    > 
    > 提示：若要显示“联接”对话框，请双击（在 Mac 上按住 Control 单击）画布上的数据源。
3. 将非空间数据源拖到“联接”对话框上。
4. 单击“联接”图标。
5. 在出现的“联接”对话框中，执行以下操作：
    - 选择一种联接类型。
    - 在“数据源”下，选择空间文件中要作为联接依据的空间字段。空间字段的旁边有一个地球图标 。
6. 对于非空间数据源，请选择“创建联接计算”作为联接子句。  
    ![带有“创建联接计算”选项的联接对话框。](/tableau/next/zh-cn/pro/desktop/zh-cn/Img/maps_spatialcalcs_csvspatial.png)
    
    计算应如下所示：
    
    `MAKEPOINT(Latitude,Longitude)`
7. 选择“确定”。
8. 选择 Intersects 连接子句运算符以创建用于空间分析的数据源。
9. 完成后，关闭“联接”对话框。

有关空间联接的详细信息，请参见[在 Tableau 中联接空间文件](https://help.tableau.com/v0.0/pro/desktop/zh-cn/maps_spatial_join.htm)。

### 使用 MAKELINE 创建可视化项

在 Tableau Desktop 中，从 Tableau Public 下载“Flight Path”（飞行路线）工作簿（[可在此处获得](https://public.tableau.com/views/UseSpatialFunctionsMakeLineExampleWorkbook/FinishedFlightpaths?:embed=y&:display_count=yes&publish=yes&:origin=viz_share_link)）。

1. 导航到新工作表。
2. 选择“分析”>“创建计算字段”。
3. 在打开的计算中，执行以下操作：

- 将计算字段命名为“Flight Path”（飞行路线）
- 输入以下公式

`MAKELINE(MAKEPOINT([Lat],[Lng]),MAKEPOINT([Dest Lat],[Dest Lng]))`

此公式从起点和终点城市中获取经纬度坐标，并使它们转换为用于空间分析的地理点。这些坐标用于在起点和终点之间构建两点直线。

7. 完成后，单击“确定”。

新的计算字段将出现在“数据”窗格中的“维度”下。就像其他字段一样，您可以在一个或多个可视化项中使用该字段。

9. 从“数据”窗格中，双击“Flight Paths”（飞行路线）以将其添加到您的可视化项中，后者应会自动呈现为地图。

![显示美国和墨西哥境内航线的地图。](/tableau/next/zh-cn/pro/desktop/zh-cn/Img/maps_spatialcalcs_flight.png)

当线条跨越较大的广阔全球区域时，计算会自动生成弯曲的测地线。

### 使用 BUFFER 可视化区域

在 Tableau Desktop 中，从 Tableau Public 下载“Flight Path”（飞行路线）工作簿（[可在此处获得](https://public.tableau.com/views/UseSpatialFunctionsMakeLineExampleWorkbook/FinishedFlightpaths?:embed=y&:display_count=yes&publish=yes&:origin=viz_share_link)）。

1. 导航到新工作表。
2. 右键单击“数据”窗格，并选择“创建参数”。
3. 在打开的“参数”对话框中，设置以下选项：
    
    - 将参数命名为“Buffer Distance”（缓冲距离）
    - 将“数据类型”设置为“整数”
    - 将“允许的值”设置为“范围”
    - 将“最小范围”设置为 100，将“最大范围”设置为 1000，将步长大小设置为 100。
    
    ![“创建参数”对话框，名称设置为缓冲距离，数据类型设置为整型，允许值设置为范围，最小范围设置为 100，最大范围设置为 1000，步长设置为 100。](/tableau/next/zh-cn/pro/desktop/zh-cn/Img/map_buffer_2.png)
4. 完成后，单击“确定”。

此参数使我们能够自定义缓冲区的半径，范围从 100 到 1000 英里。右键单击参数并选择“显示参数”。

6. 选择“分析”\>“创建计算字段”。
7. 在打开的计算中，执行以下操作：

- 将计算字段命名为“Buffer”（缓冲区）。
- 输入以下公式

`BUFFER(MAKEPOINT([Dest Lat],[Dest Lng]),[Buffer Distance],"miles")`

BUFFER 计算获取点空间数据并将其转换为半径以英里为单位的形状，该半径由“Buffer Distance”（缓冲距离）参数确定。

注意：由于 BUFFER 只能与点空间数据一起使用，因此我们使用 Makepoint 将纬度和经度数据转换为点，如上例所示。

12. 完成后，单击“确定”。

新的计算字段将出现在“数据”窗格中。就像其他字段一样，您可以在一个或多个可视化项中使用该字段。

14. 从“数据”窗格中，双击“Buffer”（缓冲区）以将其添加到您的可视化项中，后者应会自动呈现为地图。
15. 将“Destination”（目的地）拖到“标记”卡上的“颜色”面板以完成可视化。

![带有地图类型标记的缓冲地图。](/tableau/next/zh-cn/pro/desktop/zh-cn/Img/map_buffer_1.png)

**注意：**如果视图与上图不一样，请确保“标记类型”设置为“地图”而不是“圆”。有关标记类型的详细信息，请参见[更改视图中标记的类型](https://help.tableau.com/v0.0/pro/desktop/zh-cn/viewparts_marks_marktypes.htm)。