# 使用 Qlik GeoOperations 编写脚本

Qlik GeoOperations 连接器为您创建和格式化 GeoOperations 脚本。您可以在 数据加载编辑器 中修改这些脚本。您也可以手动用 GeoOperations 函数编写脚本，而不是使用 Qlik GeoOperations 连接器。

## Qlik GeoOperations 的工作方式

首先，将 Qlik GeoOperations 连接器添加为数据源。在您应用程序的 数据加载编辑器 中，选择要从连接器加载的数据时，可以选择要执行的操作和要应用的参数。然后，Qlik GeoOperations 连接器将相应 GeoOperations 的脚本添加到加载脚本中。您也可以手动添加此脚本。

每个操作脚本都包含一个加载语句，用于选择数据使用和操作。这些将发送到加载脚本中的 GeoOperations 扩展。然后服务器端扩展返回数据。Qlik GeoOperations 使脚本语言中名为 GeoOperations 的高级分析集成对象可用。这提供了将脚本和表发送到扩展的函数 ScriptEval。

例如，以下加载脚本用于将行进区域操作应用至之前加载的表格 MyPoints 并指定出行区域的大小/费用的参数：

```
Load * Extension GeoOperations.ScriptEval('TravelAreas(costValue="10", costUnit="Minutes")', MyPoints);
```

脚本作为第一个参数发送至 ScriptEval，而表格则作为第二个。

GeoOperations 是在数据集上进行操作的函数。数据集来自 Qlik Sense 中加载的数据，或来自外部源，例如地理文件或位置服务。从脚本发出的数据可用作名为 INTABLE 的数据集。如果您希望在该数据上指定额外参数，则需要在函数调用之后将其声明为 DATASOURCE。例如：

```
Load * Extension GeoOperations.ScriptEval('TravelAreas(costValue="10", costUnit="Minutes")
DATASOURCE myPoints INTABLE pointField="Point"', MyPoints);
```

始终需要声明其他数据源，并且需要指定诸如 URL 的参数。在每次操作中，可以指定要使用的数据源。默认情况下，操作会按照[操作](https://help.qlik.com/en-US/geoanalytics/Content/Ref-GeoOperationsService/connector-geoanalytics_reference-Operation.htm) （仅提供英文版本）中每个操作的说明拾取可用数据集。

## 选择和重命名 GeoOperations 字段

GeoOperations 函数返回字段。默认设置下，会返回并包含所有字段。您可在 GeoOperations 函数前面放置 SELECT 语句，来选择以及可选地重命名感兴趣的特定字段。例如，该脚本使用 SELECT 来从位置服务仅加载两个邮政编码字段：

`Load * Extension GeoOperations.ScriptEval('` `SELECT Name as PostalCode, LocationArea FROM` `Load() DATASOURCE PostalCodes LOCATIONSERVICE type="PostalCode", country="se"');`` `

在 GeoOperations 脚本中使用 SELECT 语句比在 Qlik LOAD 语句中指定字段更为有效，因为如果没有在 GeoOperations 脚本中选择数据，则不会将其加载到 Qlik Sense 中。

可使用 SELECT 选择不在结果中返回某些字段，来避免计算这些字段。例如，可排除由 Intersects 返回的相对重叠字段。

信息注释

如果您在加载脚本中使用同一操作多次，可使用 SELECT 语句重命名字段。

## 脚本语法

发送至 GeoOperations 的脚本具有以下语法：

### 1. 操作

最简单形式脚本执行一项操作。

语法：

`Operation(paramName="paramValue", ...)`

示例：

`Cluster(distance="100000")`` `

乳腺炎更多信息，请参阅操作及其参数列表。

### 2. 数据集

第二步是对所选操作加载数据集。

语法：

`Operation(paramName="paramValue", ...)``DATASOURCE name TYPE paramName="paramvalue", ...`

示例：

`Within()``DATASOURCE states LOCATIONSERVICE type="STATE", country="US"`` `

乳腺炎更多信息，请参阅数据集及其参数列表。

### 3. 组合在一起

这就是完成的脚本在 数据加载编辑器 中的样子：

`[MyPointsInStates]:``Load * Extension GeoOperations.ScriptEval(’``Within()``DATASOURCE states LOCATIONSERVICE type=”STATE”, country=”US”``’, MyTable);`` `

在本例中，MyTable 可以是其他已任何加载的包含点、线、命名区域或其他地理数据的数据表。

### 4. 筛选器字段

以下添加允许进一步筛选操作的结果。

`[MyPointsInStates]:``Load * Extension GeoOperations.ScriptEval(’``SELECT Name, states.Name as State FROM``Within()``DATASOURCE states LOCATIONSERVICE type=”STATE”, country=”US”``’, MyTable{Name, Point});`

参数名称和字段名称要区分大小写，但是操作、参数选项（例如 `meters`、` minutes,  ` 等）或诸如 SELECT 及 FROM 的关键词则不区分。

## AddressPointLookup 和 PointToAddressLookup 脚本故障排除