API сервиса - Godis715/Krasnodar-Road-Network GitHub Wiki

API

GET /nodes/info

Возвращает словарь:

node_id -> [double double] (lon lat)

{
    "111": [
        38.9446268,
        45.0551932
    ],
}

GET /roads/info

Возвращает массив:

[[node_id, node_id, ...], ...]

[["295168889", "297087349", "295173006"], ["295173006", "297087349", "295168889"], ["295170449", "295170477", "295170466", "902766935", "295170487", "1116835057", "295170599", "295170450", "295170442"], ]

GET /objects/info

Возвращает словарь:

object_id ->

  • type: str (Например, 'infrastructure')
  • name: str (Например, 'hospital')
  • location: [double double] (lon lat)
  • ref: node_id
{
    "111": {
        "type": "infrastructure",
        "name": "hospital",
        "location": [
            39.0625176,
            45.0233715
        ],
        "ref": "222"
    },
}

POST /objects/find/closest

Параметры:

  • nodes: node_id[] - узлы (любые)
  • metrics: "to" | "from" | "to-from" - способ измерения расстояния (туда, обратно, туда-обратно)
{
    "nodes": ["111", "222", "333"],
    "metrics": "to-from"
}

Возвращает словарь: node_id -> node_id, т.е. ближайший объект

{
    "111": "777",
    "222": "333",
    "...": "..."
}

POST /objects/find/in_radius

Параметры:

  • nodes: node_id[]
  • metrics: "to" | "from" | "to-from"
  • max_dist: double - максимальное расстояние
{
    "nodes": ["111", "222", "333"],
    "metrics": "to-from",
    "max_dist": 500
}

Возвращает словарь: node_id -> node_id[]

{
    "111": ["444"],
    "222": [],
    "333": ["444", "555"]
}

POST /objects/find/optimal

Параметры:

  • nodes: node_id[]
  • criterion: "closest-furthest"|"min-dist-sum"|"min-tree-weight"
  • metrics: "to" | "from" | "to-from"
{
    "nodes": ["111", "222", "333"],
    "criterion": "min-tree-weight",
    "metrics": "to-from"
}

Возвращает node_id

{
    "object_id": "444"
}

POST /shortest_paths_tree

Параметры:

  • nodes: node_id[]
  • object: node_id

Возвращает дерево кратчайших путей (массив дуг), вес дерева и сумму кратчайших путей:

   {
        "tree_weight": 500,
        "paths_weight": 1000,
        "shortest_paths_tree": ["1028409650", "1017947210"], ["1028410041", "1028409650"](/Godis715/Krasnodar-Road-Network/wiki/"1028409650",-"1017947210"],-["1028410041",-"1028409650")
    }

POST /clustering

Параметры:

  • nodes: node_id[]
  • clusters_n: int
{
    "nodes": ["111", "222", "333"],
    "clusters_n": 5
}

Возвращает описание clusters_n кластеров и дендрограмму:

{
    "clusters": [
        {
            "centroid": {
                "id": "908908284",
                "location": [
                    38.931468,
                    38.931468
                ]
            },
            "members": ["1000255556", "1017947210"]
        },
        {
            "...": "..."
        }
    ],
    "dendrogram": {
        "1000183034": [
            "К кластеру "1000183034" подключился кластер "1012312979" на высоте 1"
            {
                "cluster": "1012312979",
                "height": 1
            },
            "Затем - кластер i на высоте h"
            {
                "...": "..."
            }
        ],
        "...": [
            {
                "...": "..."
            }
        ]
    }
}

POST /clustering/shortest_paths_tree

Параметры:

  • object: node_id
  • clusters: из тела ответа Api '/clustering'
{
    "object": "553326884",
    "clusters": [
        {
            "centroid": {
                "id": "908908284",
                "location": [
                    38.931468,
                    38.931468
                ]
            },
            "members": ["1000255556", "1017947210"]
        },
        {
            "...": "..."
        }
    ]
}

Возвращает дерево кратчайших путей (массив дуг) проходящие через центроиды, вес дерева и сумму кратчайших путей:

   {
        "tree_weight": 500,
        "paths_weight": 1000,
        "shortest_paths_tree": ["1028409650", "1017947210"], ["1028410041", "1028409650"](/Godis715/Krasnodar-Road-Network/wiki/"1028409650",-"1017947210"],-["1028410041",-"1028409650")
    }