内容
使用KAILOS制作您的室内地图并建立您自己的室内位置服务。手册分为两个步骤:步骤1使用基于Web的地图构建工具和Android数据采集工具构建建筑物的无线电地图; 步骤 2 使用 KAILOS RESTful API 开发应用程序。
KAILOS系统架构
KAILOS室内定位系统将室内地图构建工具、传感器数据采集工具、数据采集服务器、位置服务器和地图服务器集成在一个系统中,为基于位置的服务提供了便捷的开发环境。
KAILOS运行在服务器端。这使得系统易于使用和维护,并保持其上构建的基于位置的服务轻量级。
室内地图构建工具
- 平面规划工具
- POI编辑器
- 调查规划工具
- 路网编辑
传感器数据采集工具
Android应用程序
数据收集服务器
- 原始数据处理器
- 无线电地图生成器
原始数据
位置服务器
输入:Wi-Fi · PDR · 其他信号
- 信号滤波器
- 位置过滤器
- 地图匹配
- 混合位置提供商
地图服务器
- 目录服务
- 路由服务
Maps
步骤1:构建无线电地图
在可以提供建筑物或楼层的室内地图之前,必须构建该区域的无线电地图。请按照以下步骤操作;注册兴趣点 (POI) 和道路是可选的。
建筑物、楼层和信号收集平面图被注册在KAILOS基于网络的地图构建工具中。无线电地图信号通过Android应用程序KAILOS数据采集工具进行采集,结果可以通过测试导航应用程序进行检查。
- 基于网络的地图构建工具建筑物、平面图、兴趣点、道路和测量图·浏览器(Chrome)
- 数据采集工具步行调查收集器·Android应用程序(WSTool.apk)
- 测试导航KAILOS Localization Tester · Android 应用程序 (kailos-tester.apk)
我们的团队安排了对您建筑物的工具的访问。
请求访问基于网络的地图构建工具
基于网络的地图构建工具运行在浏览器中:在计算机上打开KAILOS站点即可使用。
最低要求
- 具有互联网接入的计算机或移动设备
- 一种支持HTML5 Canvas的浏览器
- 一种支持标准JavaScript的浏览器
添加建筑物
登录KAILOS使用地图构建工具。无需登录,您可以查看其他用户构建的室内地图,但无法添加或更改建筑物。
登录后,打开工具,将地图移动到您想要提供室内定位服务的建筑物。左上角的搜索框可以通过地址或名称快速找到建筑物。放大直到建筑物看起来足够大以便可以舒适地工作 (图 1)。
将鼠标指针放置在建筑物上并单击鼠标右键(图 2)。从菜单中选择 添加建筑物:屏幕上会出现一个新图层,即建筑物图层。单击顶部工具栏中的“修改建筑物”,进入建筑物修改模式(图 3)。
在建筑物修改模式下,拖动图层边界上的点以将其与实际建筑物的轮廓(图 4–5)对齐。
添加楼层地图
点击“上传”,将准备好的楼层平面图图像上传到KAILOS服务器(图 6)。该图像出现在建筑图层 (图 7) 内。
单击对齐地图图像以将平面图放置在实际建筑物上:移动、缩放和旋转图像直到其与建筑物匹配(图 8–11)。
对齐完成后,输入建筑物、楼层的名称等信息,然后点击“保存”即可完成(图 12)。
注册兴趣点(POI)
接下来,注册建筑物内的兴趣点(可选)。 POI 是提供室内导航时可以成为目的地的地方,例如办公室、楼梯或卫生间。
单击地图顶部的POI按钮
,然后单击您想要注册的地点。该地点的输入面板在左上角打开 (图 13)。输入地点信息并点击保存,然后点击手形按钮
完成POI注册(图 14)。其他地方也同样的方法注册。
注册道路
道路是室内基于位置的应用的用户可以沿着的路径。注册道路是可选的,但是当构建应用程序时,KAILOS 地图匹配使用它们来更精确地显示用户的位置。
单击地图顶部的道路按钮
(图 15)并单击地图上道路延伸的点。双击终点完成道路(图 16),然后单击手形按钮
退出道路模式。要从现有道路继续,请再次单击
并继续绘制。道路交叉口显示为红点 (图 17)。
规划信号采集
在收集信号之前,规划收集信号的路径。下一步,收集者使用数据收集工具沿着这些计划的路径(调查线)行走。绘制它们的工作方式与注册道路非常相似。
首先隐藏道路,使其不妨碍:点击地图右侧的图层按钮
,打开用于显示和隐藏图层的菜单,并清除道路复选框(图 19)。
单击地图顶部的测量按钮
(图 18)并单击测量线的起点。测量线从起点经过任意数量的转折点到达终点;双击终点将其注册为计划路径 (图 20–21)。单击手形按钮
完成规划。
从这里开始,利用数据收集工具沿着计划路径收集信号,该数据收集工具加载注册的计划。
收集信号
安装并运行数据收集工具
在将收集信号的移动设备上安装Android数据收集工具——步行调查收集器(Walking Survey Collector),例如智能手机或平板电脑(图 22)。
要求
- Android 4.3或更高版本
- 无线局域网(Wi-Fi)模块
- SD卡
安装
- 将
WSTool.apk文件复制到设备 SD 卡上的文件夹中。 - 使用设备上的文件资源管理器应用程序打开APK文件。
- 点击安装来安装数据收集工具。
- 运行安装的工具。
在使用该工具之前登录。首次登录后,工具启动时自动登录;要注销,请按设备的 菜单 按钮并选择 注销。
配置设备
在主屏幕上,打开菜单→设置,在连接选项卡上选择Wi-Fi,然后打开菜单→高级。打开始终允许扫描 (图 23)。
主视图
调查列表选项卡。该选项卡列出了在基于网络的地图构建工具中注册的楼层。点击加载调查楼层,加载用您的ID注册的楼层并以列表形式显示(图 24–25)。点击要收集信号的楼层:该工具会下载楼层平面图和为其注册的测量线,将它们存储在设备上并打开楼层的收集视图。
“收集信息”选项卡。 您在“调查列表”选项卡中选择的楼层被添加到“收集信息”选项卡,并且它们的信息被存储在设备(图 26)上。因此,即使没有互联网连接(Wi-Fi、3G或4G),您也可以打开这些楼层的采集视图;下面步骤 3 中的注意事项 2 解释了连接的重要性。该选项卡还总结了每个楼层的收集情况 - 有多少条调查线(调查路径)以及已收集了多少条调查线 - 其 发送数据 按钮会在收集完成后将收集到的数据上传到服务器。
分四步收集数据
在收集视图中,您可以移动、旋转和缩放平面图。
步骤1-检查测量计划。收集视图显示登记的平面图及其计划的测量线(图 27)。一层可以有一条或多条测量线,具体取决于它们在网络工具中的绘制方式。
步骤2——准备好并检查方向。选择测量线:它变成蓝色并显示从哪里开始和在哪里结束——红色三角形是起点,红色圆圈是终点(图 28)。
- 调查信息显示所选调查线已被收集了多少次;点击它了解详细信息(请参阅下面的“检查收集的数据”)。
- 收集开始收集。 取消取消选择测量线并返回到之前的状态。
步骤3——开始采集。转到规划路径的起点(红色三角形),点击采集并以舒适、规则的步伐沿着测量线行走。当您到达终点(红色圆圈)时,点击完成收集。
在收集时,该工具记录Wi-Fi和BLE信号强度和传感器数据——3轴加速度计、陀螺仪、指南针和气压计。 正在收集...视图实时显示进度 (图 29)。如果平面图变得混乱,您可以在收集过程中移动、缩放和旋转地图。
- 取消收集 取消正在进行的收集。
- 完成收集停止收集并将收集到的数据存储在设备上。
步骤4-保存。 当收集结束时,收集的数据被存储在设备上。 正在保存...视图显示每种类型的数据(Wi-Fi、BLE 和传感器数据)的进度,并在保存完成时显示完成 (图 30)。
检查收集到的数据
要查看收集了多少 Wi-Fi 扫描或传感器样本,请点击调查信息。它显示每个调查线已收集的次数以及每次收集的详细信息 (图 31)。如果集合出错,请在列表中选择它并将其删除。
何时应该删除采集的数据? 例如,在到达终点之前误点击“采集完成”,或者采集者走得太快或跑步时。然后收集的 Wi-Fi 扫描太少,不太可能获得良好的无线电地图;删除数据并重新收集。
将采集到的数据上传至KAILOS服务器
当收集按计划完成时,将收集到的数据上传到服务器:点击收集信息选项卡(图 32–33)中的发送数据。成功上传后,将显示一条消息进行确认,并且收集的数据将从设备中删除 (图 34)。
完成无线电地图
一旦收集到的信号和传感器数据已被发送到KAILOS服务器,则运行标记以完成无线电地图。标签分析收集到的数据,对收集到的指纹进行位置标记,并自动构建室内无线电地图。
选择您注册的调查计划(调查计划),然后在标签窗口中选择标签。无线电地图已完成(图 35)。
—打开全尺寸图像步骤2:使用KAILOS API开发应用程序
KAILOS 以 RESTful Web 服务提供室内位置服务开发所需的 API。路径相对于 KAILOS 服务器;如需 API 访问权限及项目服务器地址,请 联系我们的团队.
位置API
估计位置
POST/api/location
根据 Wi-Fi 指纹、BLE 扫描和卫星定位数据估计用户的位置。
参数
- data
- JSON,如下。
{
"wifi": [ // Fingerprint (list of AP scans)
{
"bssid": "00:26:66:2f:43:60", // BSSID
"rss": -80, // RSS
"ssid": "Welcome-KAIST" // SSID (optional)
},
...
],
"ble": [ // BLE fingerprint (scan result over one second)
{
"bssid": "00:26:66:2f:43:61",
"rss": -85,
"device_name": "myPhone" // (optional)
},
...
],
"gps": [
{
"lng": 100.0, // Longitude
"lat": 100.0, // Latitude
"acc": 0.0, // Accuracy
"alt": 0.0, // Altitude
"bear": 0.0, // Bearing
"elap": 0.0, // Elapsed real-time nanos
"speed": 0.0, // Speed
"time": 0.0 // Time
},
...
]
}{
"lnglat": { // GeoJSON format
type: "Point", // GeoJSON Point type
coordinate: [100.0, 100.0] // GeoJSON coordinate: [lng, lat] (WGS-84)
},
"alt": 45.0000, // Altitude (optional)
"level": 7, // Level number
"floorID": 9, // Floor map ID
"bd": "N1", // Building code (optional)
"err": 6.7 // Position error (optional)
}更新调查数据
POST/api/db/updateSurveyData
将 Wi-Fi 勘测数据(已知位置处的接入点扫描)上传到无线电地图数据库。
参数
- data
- JSON,如下。
{
"wifiList": [
{
"apList": [
{
"ssid": "isiLab",
"bssid": "00:26:66:2f:43:60",
"rssi": -89
},
...
],
"lng": 127.36534260538609,
"lat": 36.374168514955834,
"level": 7, // Building floor
"bd": "N1", // Building name
"floorID": 9 // Unique floor ID
},
...
]
}响应 HTTP状态代码。
地图API
检索楼层地图
GET/floors/{floorId}/image
返回楼层的平面图图像。
参数
- floorId
- 楼层ID。
GET /floors/554ff57ec900625812229172/image获取楼层的POI
GET/pois/floor/{floorId}
返回在楼层上注册的兴趣点。将楼层 ID 附加到 URL 中;响应是一个解析为 JSON 的字符串。
参数
- floorId
- 楼层ID。
GET /pois/floor/533107a2eff3417c12f357f9[
{
"_id": "54866f6c32c4250829314146", // POI ID
"category": "prof", // POI category
"floorId": "533107a2eff3417c12f357f9", // Floor ID
"geometry": { // Location as GeoJSON
"type": "Point",
"coordinates": [127.36565597355366, 36.37398342955928]
},
"name": "한동수 Demo", // POI name
"level": "3", // Zoom level of the POI (importance)
"roomNumber": "704", // Room number
"zoomEnd": 30, // Not used
"zoomStart": 15, // Not used
"userId": "5322d496285a9bfc0537539f", // ID of the user who registered the POI
"regTime": "1418096492643", // Registration timestamp
"description": "DongSoo Han - Demo" // Description
},
{
"_id": "54c95ac0bed48ea802d0ddb8",
"category": "elevator",
"floorId": "533107a2eff3417c12f357f9",
"geometry": {
"type": "Point",
"coordinates": [127.36574783921242, 36.3740876309574]
},
"name": "",
"level": "3",
"roomNumber": "",
"zoomEnd": 30,
"zoomStart": 15,
"userId": "5322d496285a9bfc0537539f",
"regTime": 1422482112074,
"description": ""
},
...
{
"_id": "551a582f65ea1154059b0a11",
"category": "lab",
"floorId": "533107a2eff3417c12f357f9",
"geometry": {
"type": "Point",
"coordinates": [127.3655292391777, 36.37419723124106]
},
"name": "ISILab",
"level": "3",
"roomNumber": "723",
"zoomEnd": 30,
"zoomStart": 15,
"userId": "5322d496285a9bfc0537539f",
"regTime": 1427789871625,
"description": "ISILab"
}
]Android示例(Java,来自原手册)
// KAILOS_SERVER: the address of your KAILOS server.
public class PoiRestThread extends Thread {
private static String TAG = "PoiRestThread";
public static boolean isThreadWorking = false;
private String mFloorId;
public PoiRestThread() {
}
public void setRequestFloorId(String floorId) {
mFloorId = floorId;
}
public void start() {
isThreadWorking = true;
super.start();
}
// Requests the POIs of a floor, parses the JSON response and notifies a handler.
public void run() {
ArrayList poiList = null;
try {
String strRequestURL = KAILOS_SERVER + "/pois/floor/" + mFloorId;
HttpGet httpGet = new HttpGet(strRequestURL);
HttpParams httpParameters = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(httpParameters, Constants.SOCKET_TIME_OUT_MS * 2);
HttpConnectionParams.setSoTimeout(httpParameters, Constants.SOCKET_TIME_OUT_MS);
DefaultHttpClient httpClient = new DefaultHttpClient(httpParameters);
ClientConnectionManager clientConnectionManager = httpClient.getConnectionManager();
httpClient = new DefaultHttpClient(
new ThreadSafeClientConnManager(httpParameters, clientConnectionManager.getSchemeRegistry()),
httpParameters);
ResponseHandler responseHandler = new BasicResponseHandler();
String strResponse = httpClient.execute(httpGet, responseHandler);
if (strResponse != null && !strResponse.equals("null")) {
Log.i(TAG, strResponse);
// The POIs of the floor were retrieved.
}
} catch (Exception e) {
// Exceptions such as time-outs are ignored.
}
}
}按类别获取楼层的POI
GET/pois/floor/{floorId}/{categoryType}
与获取楼层的 POI 相同,将下面列表中的类别类型附加到 URL。响应具有相同的格式。
参数
- floorId
- 楼层ID。
- categoryType
- POI 类别类型,例如
elevator。
POI类别
POI使用以下按类别分组的类别类型。
| 类别 | 类型 |
|---|---|
| education |
|
| 紧急情况 |
|
| store |
|
| facility |
|
| general |
|
| floorchange |
|
| etc |
|
获取建筑物的楼层
GET/floors/building/{buildingId}
返回建筑物的楼层列表。
参数
- buildingId
- 建筑物ID。
[
{
"_id": "5403e318b11b008c1406a646",
"buildingId": "5403e318b11b008c1406a645",
"description": "1",
"floorNumber": 1,
"floorPlanType": "image/png",
"geometry": {
"type": "Polygon",
"coordinates": [
["127.3662497", "36.3745616"],
["127.3650642", "36.3740173"]
],
"angle": "0"
},
"name": "1",
"regTime": "1409540888640",
"userId": "5322d496285a9bfc0537539f",
"zoomEnd": "28",
"zoomStart": "15"
},
{
"_id": "5403e5d7b11b008c1406a647",
"buildingId": "5403e318b11b008c1406a645",
"description": "2",
"floorNumber": 2,
"floorPlanType": "image/png",
"geometry": {
"type": "Polygon",
"coordinates": [
["127.36624958772654", "36.37456190071682"],
["127.36512807350164", "36.374028005943565"]
],
"angle": "0.00"
},
"name": "2",
"regTime": "1409541591516",
"userId": "5322d496285a9bfc0537539f",
"zoomEnd": "28",
"zoomStart": "15"
}
]路由API
查找路线
POST/routes
查找室内或室外两点之间的导航路线。响应是一个解析为 JSON 的字符串:作为段列表的路由。
主体(application/x-www-form-urlencoded)
- startFloorId
- 如果是室内,则起始点的楼层ID;如果在室外,则为空字符串。
- startX
- 起点的经度。
- startY
- 起点的纬度。
- endFloorId
- 如果是室内,则为目的地楼层ID;如果在室外,则为空字符串。
- endX
- 目的地的经度。
- endY
- 目的地的纬度。
[
{
"lng1": 127.36141960240502, // Longitude of the segment start
"lat1": 36.370199561212004, // Latitude of the segment start
"lng2": 127.36141960240502, // Longitude of the segment end
"lat2": 36.370199561212004, // Latitude of the segment end
"type": "OUT" // Segment type: OUT = outdoor, IN_OUT = indoor-outdoor connection, IN = indoor
},
...
{
"lng1": 127.36456921426938,
"lat1": 36.37411861283401,
"lng2": 127.36458644270897,
"lat2": 36.37414054145845,
"type": "IN_OUT"
},
{
"lng1": 127.36458644270897,
"lat1": 36.37414054145845,
"lng2": 127.36458644270897,
"lat2": 36.37414054145845,
"type": "IN",
"floorNumber": 100, // Floor number of an indoor segment
"floorId": "5493d972eb4b45d42d777720", // Floor ID
"buildingId": "5403e318b11b008c1406a645" // ID of the building the floor belongs to
},
...
]Android示例(Java,来自原手册)
// KAILOS_SERVER: the address of your KAILOS server.
package kr.ac.kaist.isilab.kai_navi.route;
import java.util.ArrayList;
import java.util.List;
import kr.ac.kaist.isilab.kai_navi.utils.Constants;
import org.apache.http.NameValuePair;
import org.apache.http.client.ResponseHandler;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.conn.ClientConnectionManager;
import org.apache.http.impl.client.BasicResponseHandler;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpParams;
import android.content.Context;
import android.util.Log;
public class RouteRestThread extends Thread {
private static String TAG = "RouteRestThread";
public static DefaultHttpClient mHttpClient = null;
private static Context mContext = null;
private String mStartFloorId = "";
private Double mStartLng = 127.36561;
private Double mStartLat = 36.374101;
private String mEndFloorId = "";
private Double mEndLng = 127.36561;
private Double mEndLat = 36.374101;
public static void createHttpClient() {
HttpParams httpParameters = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(httpParameters, 20000);
HttpConnectionParams.setSoTimeout(httpParameters, 10000);
mHttpClient = new DefaultHttpClient(httpParameters);
ClientConnectionManager clientConnectionManager = mHttpClient.getConnectionManager();
mHttpClient = new DefaultHttpClient(
new ThreadSafeClientConnManager(httpParameters, clientConnectionManager.getSchemeRegistry()),
httpParameters);
}
public void setContext(Context context) {
mContext = context;
}
public RouteRestThread() {
}
public void setRequestData(Double startLng, Double startLat, String startFloorId,
Double endLng, Double endLat, String endFloorId) {
mStartFloorId = startFloorId;
mStartLng = startLng;
mStartLat = startLat;
mEndFloorId = endFloorId;
mEndLng = endLng;
mEndLat = endLat;
}
@Override
public void start() {
super.start();
}
@Override
public void run() {
try {
String strServerURL = KAILOS_SERVER + "/routes";
if (mHttpClient == null)
createHttpClient();
HttpPost httpPost = new HttpPost(strServerURL);
httpPost.setHeader("Accept", "application/json");
httpPost.setHeader("Accept-Language", "ko_KR");
httpPost.setHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");
List pairs = new ArrayList();
pairs.add(new BasicNameValuePair("startX", mStartLng.toString()));
pairs.add(new BasicNameValuePair("startY", mStartLat.toString()));
pairs.add(new BasicNameValuePair("startFloorId", mStartFloorId));
pairs.add(new BasicNameValuePair("endX", mEndLng.toString()));
pairs.add(new BasicNameValuePair("endY", mEndLat.toString()));
pairs.add(new BasicNameValuePair("endFloorId", mEndFloorId));
httpPost.setEntity(new UrlEncodedFormEntity(pairs));
ResponseHandler responseHandler = new BasicResponseHandler();
String strResponse = mHttpClient.execute(httpPost, responseHandler);
if (strResponse != null && !strResponse.equals("null")) {
Log.i(TAG, strResponse);
// The route was retrieved.
}
} catch (Exception e) {
Log.e(TAG, e.getMessage());
}
}
}早期端点
原始手册的英文版记录了较早的 Map 和 Route API,其中每个查询都是发送至 /api/map/… 的 POST 请求。此处保留这些接口供现有集成使用。
显示先前的地图和路线端点
检索楼层地图
POST/api/map/getFloorMaps
参数
- data
- JSON,如下。
{
"queryType": "NEAREST_ENTIRE", // Query type [NEAREST_ENTIRE | NEAREST_REPRESENTATIVE | FLOOR_ID]
"lng": "100.0", // Longitude (used for NEAREST_ENTIRE, NEAREST_REPRESENTATIVE)
"lat": "101.0", // Latitude (used for NEAREST_ENTIRE, NEAREST_REPRESENTATIVE)
"floorID": "1234" // Floor ID (used for FLOOR_ID)
}{
"floormaps": [
{
"objID": 14,
"neLat": 36.374393463134766,
"neLng": 127.36409759521484,
"swLat": 36.373573303222656,
"swLng": 127.36292266845703,
"angle": 0,
"areaID": 1,
"buildingID": 15,
"floorID": 12,
"category": "IMG",
"memberID": 1,
"floorName": "N5 2F",
"floorNumber": 2,
"buildingName": "N5 기초과학연구동",
"floorNumberBase": 2,
"areaName": "KAIST 한국과학기술원",
"imageURL": "uploads/1____1377087116.png"
},
...
]
}获取兴趣点
POST/api/map/directory
参数
- data
- JSON,如下。
{
"queryType": "POI", // Query type [POI]
"keyword": "dongsoo" // Search keyword
}{
"poi": [
{
"_id": "525cc557fd4be8314bc5951d",
"floorId": "525cc3f8fd4be8314bc594e7",
"name": {
"kr": "한동수",
"en": "Dongsoo Han"
},
"category": "prof",
"roomNumber": "814",
"visibleZoomStart": 19,
"visibleZoomEnd": 30,
"geometry": {
"type": "POINT",
"coordinates": [[127.3660891, 36.3740404]]
},
"memberId": "1"
},
{
"_id": "525cc557fd4be8314bc5952b",
"floorId": "525cc3f8fd4be8314bc594e5",
"name": {
"kr": "한동수",
"en": "Dongsoo Han"
},
"category": "prof",
"roomNumber": "704",
"visibleZoomStart": 19,
"visibleZoomEnd": 30,
"geometry": {
"type": "POINT",
"coordinates": [[127.365545, 36.3740436]]
},
"memberId": "1"
}
]
}获取某一楼层的路网
POST/api/map/route
参数
- queryType
GET_ROADS_BY_FLOORID- floorId
- 楼层ID(字符串)。
queryType: "GET_ROADS_BY_FLOORID"
floorId: "525cc3f8fd4be8314bc594c3"{
"road": [
[
[127.363031, 36.37373, "525cc3f8fd4be8314bc594c3"],
[127.363031, 36.37373, "525cc3f8fd4be8314bc594c9"]
],
[
[127.363017, 36.374319, "525cc3f8fd4be8314bc594c3"],
[127.363017, 36.374319, "525cc3f8fd4be8314bc594ca"]
],
[
[127.363018, 36.37432, "525cc3f8fd4be8314bc594c3"],
[127.363018, 36.37432, "525cc3f8fd4be8314bc594c9"]
]
]
}求最短路径
POST/api/map/route
参数
- queryType
FIND_PATH- from
- 起始点:经度、纬度、楼层ID(字符串)。
- to
- 终点:经度、纬度、楼层 ID(字符串)。
queryType: "FIND_PATH"
from: 127.3658898,36.3741702,525cc3f8fd4be8314bc594e7
to: 127.3658872,36.3741724,525cc3f8fd4be8314bc594e7{
"path": [
[127.3658872, 36.3741724, "525cc3f8fd4be8314bc594e7"],
[127.3658872, 36.3741238, "525cc3f8fd4be8314bc594e7"],
[127.3658872, 36.3740968, "525cc3f8fd4be8314bc594e7"],
[127.3658858, 36.3740579, "525cc3f8fd4be8314bc594e7"],
[127.3661031, 36.3740557, "525cc3f8fd4be8314bc594e7"],
[127.3661031, 36.3740795, "525cc3f8fd4be8314bc594e7"],
[127.3661031, 36.3741724, "525cc3f8fd4be8314bc594e7"]
]
}API支持
对于有关使用 KAILOS 及其 API 的问题,或对其他 API 的请求,请与我们的团队联系。
联系我们的团队最初由KAIST的智能服务集成实验室在kailos.io上作为KAILOS手册发布。






































