Amazon OpenSearch Serviceで空間検索してQGISで可視化してみた

![img](https://day-journal.com/memo/images/try-092_02.png)

![img](https://day-journal.com/memo/images/try-092_01.png)

### Amazon OpenSearch Serviceで空間検索してQGISで可視化してみました :tada:  

<br>

詳細として下記について説明します。

- [事前準備](https://qiita.com/dayjournal/items/eb7c2804541929f71c38#%E4%BA%8B%E5%89%8D%E6%BA%96%E5%82%99)
- [ドメイン作成](https://qiita.com/dayjournal/items/eb7c2804541929f71c38#%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3%E4%BD%9C%E6%88%90)
- [OpenSearch Dashboardsに接続](https://qiita.com/dayjournal/items/eb7c2804541929f71c38#opensearch-dashboards%E3%81%AB%E6%8E%A5%E7%B6%9A)
- [位置情報データ登録](https://qiita.com/dayjournal/items/eb7c2804541929f71c38#%E4%BD%8D%E7%BD%AE%E6%83%85%E5%A0%B1%E3%83%87%E3%83%BC%E3%82%BF%E7%99%BB%E9%8C%B2)
- [空間検索](https://qiita.com/dayjournal/items/eb7c2804541929f71c38#%E7%A9%BA%E9%96%93%E6%A4%9C%E7%B4%A2)

<br>

## 事前準備

[Amazon OpenSearch Service](https://aws.amazon.com/opensearch-service/)で利用するGISデータを準備します。今回は事前に[QGIS](https://qgis.org)で[OpenStreetMap](https://www.openstreetmap.org)のサンプルデータを準備しました。

ポイントのGISデータをGeoJSONで準備しました。そしてGeoJSONをインポート用のJSONに事前修正しました。
![img](https://day-journal.com/memo/images/amazon-opensearch-service-003_01.png)

今回のサンプルデータをGitHubに登録したのでぜひご利用ください。  

https://github.com/dayjournal/data/tree/main/try-092

これで事前のGISデータの準備は完了です！

<br>

## ドメイン作成

Amazon OpenSearch Serviceでドメインを作成する方法です。  

AWSマネジメントコンソール → Amazon OpenSearch Serviceをクリック。
![img](https://day-journal.com/memo/images/amazon-opensearch-service-001_01.png)

「Create domain」をクリック。
![img](https://day-journal.com/memo/images/amazon-opensearch-service-001_02.png)

ドメイン名・デプロイタイプ・自動調整を設定。
![img](https://day-journal.com/memo/images/amazon-opensearch-service-001_03.png)

データノード・専用マスターノードを設定。
![img](https://day-journal.com/memo/images/amazon-opensearch-service-001_04.png)

ネットワーク・きめ細かなアクセスコントロール・アクセスポリシーを設定  
ユーザー名とパスワードを入力しユーザーを作成する。
ネットワークは今回デモのためパブリックアクセスで設定しました。
![img](https://day-journal.com/memo/images/amazon-opensearch-service-001_05.png)

暗号化を設定 → 「作成」をクリック。
![img](https://day-journal.com/memo/images/amazon-opensearch-service-001_06.png)

しばらく待つと環境構築が完了します。
![img](https://day-journal.com/memo/images/amazon-opensearch-service-001_07.png)

これでドメインの作成は完了です！

<br>

## OpenSearch Dashboardsに接続

Amazon OpenSearch ServiceでOpenSearch Dashboardsに接続する方法です。  

OpenSearch DashboardsのURLをクリック。
![img](https://day-journal.com/memo/images/amazon-opensearch-service-002_01.png)

ドメイン作成時に設定したユーザー名とパスワードを入力 → 「Log In」をクリック。
![img](https://day-journal.com/memo/images/amazon-opensearch-service-002_02.png)

OpenSearch Dashboardsに接続されます。
![img](https://day-journal.com/memo/images/amazon-opensearch-service-002_03.png)

これでOpenSearch Dashboardsの接続は完了です！

<br>

## 位置情報データ登録

Amazon OpenSearch Serviceで位置情報データを登録する方法です。  

OpenSearch Dashboardsに接続 →「Dev Tools」をクリック。
![img](https://day-journal.com/memo/images/amazon-opensearch-service-003_02.png)

位置情報データ用のインデックスを設定。今回は「geo_shape」を利用しました。

```json
PUT point_geo_sample
{
  "mappings": {
        "properties": {
            "geometry": {
                "type": "geo_shape"
            }
        }
  }
}
```

![img](https://day-journal.com/memo/images/amazon-opensearch-service-003_03.png)

位置情報データをインポート。元データのGeoJSONをインポート用のJSONに事前修正してあります。

```json
POST point_geo_sample/_bulk
{"index": {}}
{ "type": "Feature", "properties": { "full_id": "n260423690", "name": "文教堂書店", "shop": "books" }, "geometry": { "type": "Point", "coordinates": [ 139.7577071, 35.6678306 ] } }
{"index": {}}
{ "type": "Feature", "properties": { "full_id": "n260424181", "name": "LABI", "shop": "electric" }, "geometry": { "type": "Point", "coordinates": [ 139.757034800000014, 35.6671262 ] } }
{"index": {}}
{ "type": "Feature", "properties": { "full_id": "n260424208", "name": "キムラヤ", "shop": "electric" }, "geometry": { "type": "Point", "coordinates": [ 139.7577643, 35.665613 ] } }
{"index": {}}
{ "type": "Feature", "properties": { "full_id": "n261024380", "name": "ソフトバンクショップ", "shop": "mobile_phone" }, "geometry": { "type": "Point", "coordinates": [ 139.7773429, 35.6772184 ] } }
{"index": {}}
{ "type": "Feature", "properties": { "full_id": "n410500414", "name": "ミニストップ", "shop": "convenience" }, "geometry": { "type": "Point", "coordinates": [ 139.745115, 35.7081941 ] } }
{"index": {}}
{ "type": "Feature", "properties": { "full_id": "n417434047", "name": "Inplexe", "shop": "accessories" }, "geometry": { "type": "Point", "coordinates": [ 139.7414085, 35.7005685 ] } }
{"index": {}}
{ "type": "Feature", "properties": { "full_id": "n439115834", "name": "フォルクスワーゲン六本木", "shop": "car" }, "geometry": { "type": "Point", "coordinates": [ 139.7359042, 35.665522 ] } }
{"index": {}}
{ "type": "Feature", "properties": { "full_id": "n474605269", "name": "Family Mart", "shop": "convenience" }, "geometry": { "type": "Point", "coordinates": [ 139.7499649, 35.6692143 ] } }
{"index": {}}
{ "type": "Feature", "properties": { "full_id": "n474605283", "name": "セブン-イレブン", "shop": "convenience" }, "geometry": { "type": "Point", "coordinates": [ 139.7540003, 35.668082 ] } }
{"index": {}}
{ "type": "Feature", "properties": { "full_id": "n474605289", "name": "Lawson", "shop": "convenience" }, "geometry": { "type": "Point", "coordinates": [ 139.754741599999988, 35.6676069 ] } }
{"index": {}}
{ "type": "Feature", "properties": { "full_id": "n559359769", "name": "LAWSON 銀座６丁目店", "shop": "convenience" }, "geometry": { "type": "Point", "coordinates": [ 139.7657173, 35.6687584 ] } }
{"index": {}}
....
```

![img](https://day-journal.com/memo/images/amazon-opensearch-service-003_04.png)

これで位置情報データの登録は完了です！

<br>

## 空間検索

最後に、Amazon OpenSearch Serviceで空間検索をする方法を紹介します。  

今回の空間検索は下記のようなbbox内にあるポイントデータを検索してみます。事前にQGISでデータを可視化し検索したい左上と右下の経緯度を準備します。
![img](https://day-journal.com/memo/images/amazon-opensearch-service-004_01.png)

空間検索をする条件を指定し左上と右下の経緯度を入力します。

```json
POST point_geo_sample/_search
{
  "query":{
    "bool": {
      "must": {
        "match_all": {}
      },
      "filter": {
        "geo_shape": {
          "geometry": {
            "shape": {
              "type": "envelope",
              "coordinates" : [[139.7802, 35.6781], [139.7878, 35.6724]]
            },
              "relation": "within"
          }
        }
      }
    }
  }
}
```

検索結果がQGISの可視化と一致しました！

```json
{
  "took" : 9,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 3,
      "relation" : "eq"
    },
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "point_geo_sample",
        "_type" : "_doc",
        "_id" : "mdQ_54EBMGUV534vZahT",
        "_score" : 1.0,
        "_source" : {
          "type" : "Feature",
          "properties" : {
            "full_id" : "n1892534950",
            "name" : "セブン-イレブン",
            "shop" : "convenience"
          },
          "geometry" : {
            "type" : "Point",
            "coordinates" : [
              139.7819038,
              35.675297
            ]
          }
        }
      },
      {
        "_index" : "point_geo_sample",
        "_type" : "_doc",
        "_id" : "yNQ_54EBMGUV534vZa1Z",
        "_score" : 1.0,
        "_source" : {
          "type" : "Feature",
          "properties" : {
            "full_id" : "n3758524951",
            "name" : "セブン-イレブン",
            "shop" : "convenience"
          },
          "geometry" : {
            "type" : "Point",
            "coordinates" : [
              139.7859394,
              35.6769875
            ]
          }
        }
      },
      {
        "_index" : "point_geo_sample",
        "_type" : "_doc",
        "_id" : "KtQ_54EBMGUV534vZadN",
        "_score" : 1.0,
        "_source" : {
          "type" : "Feature",
          "properties" : {
            "full_id" : "n1215847202",
            "name" : "NATURAL　LAWSON",
            "shop" : "convenience"
          },
          "geometry" : {
            "type" : "Point",
            "coordinates" : [
              139.781879,
              35.6744447
            ]
          }
        }
      }
    ]
  }
}
```

![img](https://day-journal.com/memo/images/amazon-opensearch-service-004_02.png)

Amazon OpenSearch Serviceを利用することでインポートしたデータを空間検索することが可能になります！

<br>
<br>

Amazon OpenSearch ServiceとQGISについて、他にも記事を書いています。よろしければぜひ :bow:
<a href="https://day-journal.com/memo/tags/Amazon-OpenSearch-Service" target="_blank">tags - Amazon OpenSearch Service</a>
<a href="https://day-journal.com/memo/tags/QGIS" target="_blank">tags - QGIS</a>

やってみたシリーズ :grinning:
<a href="https://day-journal.com/memo/tags/Try" target="_blank">tags - Try</a>

https://qiita.com/dayjournal/items/441f89794f6fb5656846

https://qiita.com/dayjournal/items/fa3aac5a24e9605f2958

https://qiita.com/dayjournal/items/e7eeeb8f527bbbbe42cf

<br>
<br>

<a href="https://dayjournal.booth.pm" target="_blank"><img src="https://day-journal.com/memo/images/etc/book.png" alt="book"></a>