[Google Maps Datasets API(V1)] Javaで地理空間データのデータセットを作成・更新・削除する

Maps Datasets API V1(Java)を使用して、
GoogleMapsの地理空間データのデータセットを作成・更新・削除する方法
についてご紹介します。

:::note info
APIを利用する環境の準備から始める場合や、コードを実行する際は、
[⧉[Google Maps Datasets API(V1)] Javaで地理空間データを利用する](https://qiita.com/doran/items/e45e84ccbb8cfddbfee7)
を参照ください。
:::

|No||目次|
|---|---|---|
|1||[データセットを作成](#1-データセットを作成)|
||1|[IAM権限](#11-iam権限)|
||2|[スコープ](#12-スコープ)|
||3|[実行](#13-実行)|
||4|[レスポンスの内容](#14-レスポンスの内容)|
|2||[データセットを更新](#2-データセットを更新)|
||1|[IAM権限](#21-iam権限)|
||2|[スコープ](#22-スコープ)|
||3|[実行](#23-実行)|
||4|[レスポンスの内容](#24-レスポンスの内容)|
|3||[データセットを削除](#3-データセットを削除)|
||1|[IAM権限](#31-iam権限)|
||2|[スコープ](#32-スコープ)|
||3|[実行](#33-実行)|
||4|[レスポンスの内容](#34-レスポンスの内容)|

## 1. データセットを作成
指定したプロジェクトにデータセットを作成します。
データセット作成と同時にデータファイルをアップロードすることはできません。

### 1.1. IAM権限
APIを実行するには次の権限を指定してください。
```
Maps Platform データセット管理者
（roles/mapsplatformdatasets.admin）
```

### 1.2. スコープ
このAPIを実行するには、以下のスコープを指定してください。
```
https://www.googleapis.com/auth/cloud-platform
```

### 1.3. 実行

```java
public static void main(String[] args) throws Exception{
    try(MapsPlatformDatasetsClient client = getMapsPlatformDatasetsClient()){
        Dataset.Builder value = Dataset.newBuilder();
        value.setDisplayName("データセット表示名");
        value.addUsage(Usage.USAGE_DATA_DRIVEN_STYLING);
        
        CreateDatasetRequest.Builder builder = CreateDatasetRequest.newBuilder();
        builder.setParent(String.format("projects/%s", "プロジェクトID"));
        builder.setDataset(value.build());
        
        Dataset response = client.createDataset(builder.build());
        System.out.println(response);
    }
}
```
#### 1.3.1. HTTPリクエスト
POST:　https:\//mapsplatformdatasets.googleapis.com/v1/projects/{プロジェクトID}/datasets
が実行されます。

#### 1.3.2. クエリパラメータ
クエリパラメータはありません。

#### 1.3.3. リクエストボディ
CreateDatasetRequest.Builderのsetメソッドにより、リクエストボディを追加できます。
build()メソッドでCreateDatasetRequestインスタンスを取得し、
createDataset()に渡します。

|メソッド|引数|説明|
|---|---|---|
|setParent|String|【必須】projects/{プロジェクトID}|
|setDataset|[Dataset](#datasetcreate)|データセット|

#### Dataset(Create)
|メソッド|引数|説明|
|---|---|---|
|setDisplayName|String|【必須】コンソールUIに表示される名前|
|addUsage|[Usage(enum)](#usage)|【必須】ユースケース<br>Usage.USAGE_DATA_DRIVEN_STYLINGのみ指定可能|
|setDescription|String|説明|
|setVersionId|String|データセットのバージョンID|
|setLocalFileSource|[LocalFileSource](#localfilesourceset)|1回のアップロードで使用するデータセットのローカルファイルソース|
|setGcsSource|[GcsSource](#gcssourceset)|1回のアップロードで使用するデータセットの Google Cloud Storageファイルソース|

#### LocalFileSource(Set)
|メソッド|引数|説明|
|---|---|---|
|setFilename|String|アップロードしたファイルの名前と拡張子|
|setFileFormat|[FileFormat(enum)](#fileformat)|アップロードするファイルの形式|

#### GcsSource(Set)
|メソッド|引数|説明|
|---|---|---|
|setInputUri|String|ソースデータURI|
|setFileFormat|[FileFormat(enum)](#fileformat)|アップロードするファイルの形式|

#### Usage
|定義値|内容|
|---|---|
|USAGE_UNSPECIFIED|未使用|
|USAGE_DATA_DRIVEN_STYLING|このデータセットはデータドリブンのスタイル設定に使用|

#### FileFormat
|定義値|内容|
|---|---|
|FILE_FORMAT_UNSPECIFIED|未設定|
|FILE_FORMAT_GEOJSON|GeoJsonファイル|
|FILE_FORMAT_KML|KMLファイル|
|FILE_FORMAT_CSV|CSVファイル|

### 1.4. レスポンスの内容
#### Dataset
|メソッド|戻り値|説明|
|---|---|---|
|getName|String|リソース名<br>形式：projects/{プロジェクトID}/datasets/{データセットID}|
|getDisplayName|String|コンソールUIに表示される名前|
|getDescription|String|説明|
|getVersionId|String|データセットのバージョンID|
|getUsage|List\<[Usage(enum)](#usage)\>|ユースケース|
|getStatus|[Status](#status)|バージョンのステータス|
|getCreateTime|Timestamp|データセットの作成時刻|
|getUpdateTime|Timestamp|データセットの更新時刻|
|getVersionCreateTime|Timestamp|このバージョンのデータセットの作成時刻|
|getVersionDescription|String|このバージョンのデータセットの説明|
|getLocalFileSource|[LocalFileSource](#localfilesource)|1回のアップロードで使用するデータセットのローカルファイルソース|
|getGcsSource|[GcsSource](#gcssource)|1回のアップロードで使用するデータセットの Google Cloud Storageファイルソース|

#### Status
|メソッド|戻り値|説明|
|---|---|---|
|getState|[State(enum)](#state)|ステータスの列挙型|
|getErrorMessage|String|失敗の理由を示すエラーメッセージ|

#### LocalFileSource
|メソッド|戻り値|説明|
|---|---|---|
|getFilename|String|アップロードしたファイルの名前と拡張子|
|getFileFormat|[FileFormat(enum)](#fileformat)|アップロードするファイルの形式|

#### GcsSource
|メソッド|戻り値|説明|
|---|---|---|
|getInputUri|String|ソースデータURI|
|getFileFormat|[FileFormat(enum)](#fileformat)|アップロードするファイルの形式|

#### State
|定義値|内容|
|---|---|
|STATE_UNSPECIFIED|未設定|
|STATE_IMPORTING|データをデータセットにインポート|
|STATE_IMPORT_SUCCEEDED|データセットへのデータのインポートが完了|
|STATE_IMPORT_FAILED|データセットにデータのインポート失敗|
|STATE_DELETING|データセットを削除中|
|STATE_DELETION_FAILED|削除の失敗状態|
|STATE_PROCESSING|データを処理中|
|STATE_PROCESSING_FAILED|処理の失敗状態|
|STATE_NEEDS_REVIEW|未使用|
|STATE_PUBLISHING|公開状態|
|STATE_PUBLISHING_FAILED|公開エラーの状態|
|STATE_COMPLETED|完了状態|

## 2. データセットを更新
指定したデータセットのメタデータを更新します。
更新できるのは「displayName」と「description」のみです。

### 2.1. IAM権限
APIを実行するには次の権限を指定してください。
```
Maps Platform データセット管理者
（roles/mapsplatformdatasets.admin）
```

### 2.2. スコープ
このAPIを実行するには、以下のスコープを指定してください。
```
https://www.googleapis.com/auth/cloud-platform
```

### 2.3. 実行
リソース名には、[DatasetのgetName()](#dataset)で取得できるリソース名を設定します。
リソース名 = projects/{プロジェクトID}/datasets/{データセットID}

```java
public static void main(String[] args) throws Exception{
    try(MapsPlatformDatasetsClient client = getMapsPlatformDatasetsClient()){
        Dataset.Builder value = Dataset.newBuilder();
        value.setName("リソース名");
        value.setDisplayName("new_display_name");
        
        UpdateDatasetMetadataRequest.Builder builder = UpdateDatasetMetadataRequest.newBuilder();
        builder.setDataset(value);
        
        Dataset response = client.updateDatasetMetadata(builder.build());
        System.out.println(response);
    }
}
```
#### 2.3.1. HTTPリクエスト
PATCH:　https:\//mapsplatformdatasets.googleapis.com/v1/projects/{プロジェクトID}/datasets/{データセットID}
が実行されます。

#### 2.3.2. クエリパラメータ
クエリパラメータはありません。

#### 1.3.3. リクエストボディ
UpdateDatasetMetadataRequest.Builderのsetメソッドにより、リクエストボディを追加できます。
build()メソッドでUpdateDatasetMetadataRequestインスタンスを取得し、
updateDatasetMetadata()に渡します。

|メソッド|引数|説明|
|---|---|---|
|setDataset|[Dataset](#datasetupdate)|更新するメタデータ|

#### Dataset(Update)
|メソッド|引数|説明|
|---|---|---|
|setName|String|【必須】リソース名<br>形式：projects/{プロジェクトID}/datasets/{データセットID}|
|setDisplayName|String|コンソールUIに表示される名前|
|setDescription|String|説明|

### 2.4. レスポンスの内容
#### Dataset

[1.4. レスポンスの内容(Dataset)](#dataset)と同じです。

## 3. データセットを削除
指定したデータセットを削除します。

### 3.1. IAM権限
APIを実行するには次の権限を指定してください。
```
Maps Platform データセット管理者
（roles/mapsplatformdatasets.admin）
```

### 3.2. スコープ
このAPIを実行するには、以下のスコープを指定してください。
```
https://www.googleapis.com/auth/cloud-platform
```

### 3.3. 実行
リソース名には、[DatasetのgetName()](#dataset)で取得できるリソース名を設定します。
リソース名 = projects/{プロジェクトID}/datasets/{データセットID}

```java
public static void main(String[] args) throws Exception{
    try(MapsPlatformDatasetsClient client = getMapsPlatformDatasetsClient()){
        client.deleteDataset("リソース名");
    }
}
```
#### 3.3.1. HTTPリクエスト
DELETE:　https:\//mapsplatformdatasets.googleapis.com/v1/projects/{プロジェクトID}/datasets/{データセットID}
が実行されます。

#### 3.3.2. クエリパラメータ
クエリパラメータはありません。

#### 3.3.3. リクエストボディ
リクエストボディはありません。

### 3.4. レスポンスの内容
レスポンスはありません。
削除に失敗すると例外が発生します。

<br>
<br>
おしまい。。