# 以 Qlik GeoOperations 撰寫指令碼

Qlik GeoOperations 連接器為您建立並格式化 GeoOperations 指令碼。您可以在 資料載入編輯器 中修改這些指令碼。您也可以使用 GeoOperations 函數手動撰寫指令碼，而非使用 Qlik GeoOperations 連接器。

## Qlik GeoOperations 的運作方式

首先，您應新增 Qlik GeoOperations 連接器作為資料來源。在應用程式的 資料載入編輯器 中，選取要從連接器載入的資料時，您可以選取要執行的操作和要套用的參數。然後 Qlik GeoOperations 連接器會將對應的 GeoOperations 指令碼新增至您的載入指令碼。您也可以手動新增此指令碼。

每個操作指令碼由選取資料使用的 LOAD 陳述式和操作組成。這些會傳送至載入指令碼中的 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 函數傳回欄位。依照預設，所有欄位都會傳回並納入。您可以使用 SELECT 陳述式置於 GeoOperations 函數之前，以選取並選擇性地重新命名您感興趣的特定欄位。例如，此指令碼使用 SELECT 僅載入位置服務的其中兩個郵遞區號欄位：

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

相較於在 Qlik LOAD 陳述式中指定欄位，在 GeoOperations 指令碼中使用 SELECT 陳述式可以更有效率，因為若沒有在 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 指令碼撰寫的問題