---
title: 位置情報による並び替え
description: 地図の項目をコンテンツを設定している場合、order_queryに並び順と緯度経度を指定することで、指定の位置からの距離でコンテンツの並び替えが可能です。また、緯度経度によるorder_queryを指定すると、指定した位置からの距離が追加でレスポンスされます。
---

地図の項目をコンテンツを設定している場合、`order_query`に並び順と緯度経度を指定することで、指定の位置からの距離でコンテンツの並び替えが可能です。  
また、指定した位置からの距離情報(km)が`ext_X_distance`の項目名でレスポンスに追加されます。

## 設定方法
### order_queryによる並び替え
`項目の識別子=並び順=緯度:経度`の形式で指定し、エンドポイントのパラメータに指定します。  
パラメータはURLエンコードしてください。  

#### リクエスト例
- order_query=ext_1=DESC=3.1065323937409204:101.58251235994912

**Request URL**  
`https://sitekey.g.kuroco.app/rcms-api/1/map_test?order_query=ext_1%3DDESC%3D3.1065323937409204%3A101.58251235994912`

|並び順の指定|説明|
|:--|:--|
|DESC|指定した緯度経度から遠い順に並びます。|
|ASC|指定した緯度経度から近い順に並びます。|
|なし|指定した緯度経度からの距離が追加でレスポンスされますが並び順は変更されません。<br/>`項目の識別子==緯度:経度`で指定します。|

#### レスポンス例

```json
{
  "list": [
    {
      "subject": "Tokyo",
      "ext_1_distance": "5337.28",
      "ext_1": {
        "gmap_x": "139.7671248",
        "gmap_y": "35.68123620000001",
        "gmap_type": "roadmap",
        "gmap_zoom": "14",
        "gmap_place_id": "ChIJC3Cf2PuLGGAROO00ukl8JwA"
      }
    },
    {
      "subject": "Osaka",
      "ext_1_distance": "4958.37",
      "ext_1": {
        "gmap_x": "135.5022535",
        "gmap_y": "34.6937249",
        "gmap_type": "roadmap",
        "gmap_zoom": "10",
        "gmap_place_id": "ChIJ4eIGNFXmAGAR5y9q5G7BW8U"
      }
    },
    {
      "subject": "Fukuoka",
      "ext_1_distance": "4519.57",
      "ext_1": {
        "gmap_x": "130.4016888",
        "gmap_y": "33.5901838",
        "gmap_type": "roadmap",
        "gmap_zoom": "9",
        "gmap_place_id": "ChIJKYSE6aHtQTURg4c5NplyCvY"
      }
    }
  ]
}
```

:::info
`order_query`を緯度経度で指定すると、指定した位置からの距離情報(km)が`ext_X_distance`の項目名でレスポンスに追加されます。
:::


### Filterクエリとの併用 
`:D(項目の識別子:緯度:経度) < 500`のような形式でフィルターを作成することで、指定の位置からの距離を条件としたコンテンツの検索が可能です。  
Filterクエリのみで利用することも可能ですが、`ext_X_distance`は`order_query`に指定した位置をもとに計算されます。  
並び替え不要でFilterをかける場合でも`項目の識別子==緯度:経度`の形式でパラメータを指定した`order_query`と併用することをお勧めします。  

#### リクエスト例
- filter=:D(ext_1:35.17189148918877:136.68933682996803) < 500
- order_query=ext_1=ASC=35.17189148918877:136.68933682996803

**Request URL**  
`https://sitekey.g.kuroco.app/rcms-api/1/maptest?filter=%3AD%28ext_1%3A35.17189148918877%3A136.68933682996803%29%20%3C%20200&order_query=ext_1%3DASC%3D35.17189148918877%3A136.68933682996803`

#### レスポンス例

```json
{
  "list": [
    {
      "subject": "Osaka",
      "ext_1_distance": "120.56",
      "ext_1": {
        "gmap_x": "135.5022535",
        "gmap_y": "34.6937249",
        "gmap_type": "roadmap",
        "gmap_zoom": "10",
        "gmap_place_id": "ChIJ4eIGNFXmAGAR5y9q5G7BW8U"
      }
    }
  ]
}
```

:::tip
複数の条件を結合することも可能です。  
例：:D(ext_1:35.17189148918877:136.68933682996803) < 200 or :D(ext_1:35.17189148918877:136.68933682996803) > 500
:::

:::info
`filter`に指定する位置情報と、`order_query`に指定する位置情報を別の場所に設定することもできますが、
`ext_X_distance`の項目でレスポンスされる距離は`order_query`に指定した位置をもとに計算されます。
:::

### パフォーマンスの向上
コンテンツ定義の検索設定で[インデックス付与]を有効にすると、地図項目に対してインデックスが付与されます。

![Image from Gyazo](https://t.gyazo.com/teams/diverta/d18e199f1fcc85a96480a3071ccfd901.png)

付与されたインデックスは、以下の条件を満たすと活用され、パフォーマンスの向上が期待できます。  
条件を満たさないリクエストでは、「インデックス付与」の設定がない場合と同等のパフォーマンスになります。

- 並び順を昇順にする (降順ではインデックスが活用されません)
  - OK: ext_1=ASC=35.7008524:139.7435939
  - NG: ext_1=DESC=35.7008524:139.7435939
- 並び順に地図項目1つだけを指定する (他の項目の並び順条件を追加したりすると、インデックスが活用されません)
  - OK: ext_1=ASC=35.7008524:139.7435939
  - NG: ext_1=ASC=35.7008524:139.7435939,ext_2=ASC
- topics_group_idを1つだけを指定する (複数のコンテンツ定義が指定されていると、インデックスが活用されません)