Skip to content
Darren edited this page Apr 14, 2017 · 12 revisions

2.1 设置APP-KEY

设置APP-KEY除了1.2节中提到的在AndroidManifest.xml中配置外,SDK还提供了api在代码中来设置,比如

OneNetApi.setAppKey("xxxxxxxxx");

提供该api的目的是让开发者可以管理不同产品下的设备。

2.2 HTTP请求结果回调

public interface OneNetApiCallback {

    /**
     * Called when the HTTP response code was 2xx.
     */
    void onSuccess(String response);

    /**
     * Called when the request could not be executed due to cancellation, a connectivity problem,
     * timeout or the HTTP response code was not 2xx.
     */
    void onFailed(Exception e);

}

以查询设备为例

Map<String, String> urlParams = new HashMap<>();
urlParams.put("page", "1");
urlParams.put("per_page", "10");

OneNetApi.fuzzyQueryDevices(urlParams, new OneNetApiCallback() {
    @Override
    public void onSuccess(String response) {
        // Do your work here
    }

    @Override
    public void onFailed(Exception e) {
        e.printStackTrace();
    }
});
  • SDK请求结果回调的onSuccess()onFailed()方法均运行在UI线程,方便对UI进行刷新
  • onSuccess()方法表示Http请求成功,即Http响应码范围为[200, 300)时触发,并不是SDK的Api调用成功
  • 同理,onFailed()方法表示Http请求失败。

2.3 地图数据点

数据点的通用格式为

{
    "at": "2013-04-22T00:35:43",
    "value": 42
}

{
    "at": "2013-04-22T00:35:43",
    "value": {}
}

其中at字段表示时间戳,是可选项,value字段支持的数据类型包括:

  • 整型(int)
  • 浮点数(float)
  • 字符串(string)
  • JSON格式
  • 二进制数据

对于地图数据来说value对应的数据格式为:

{
    "lat": 0.0,
    "lon": 0.0,
    "ele": 0.0
}

lat表示纬度,lon表示经度,ele表示海拔,海拔不传不影响地图的展示,如果上传的数据点为地图支持的格式,那么在开发者中心预览的时候自动以地图的形式来预览,如下所示:

需要注意的是,开发者中心使用的是百度地图,百度地图使用的是百度坐标系,是一种加密的坐标系,并不是GPS坐标,所以直接从地图上拾取的坐标点,相对于真实的GPS坐标是有偏移的,这一点其他地图也是类似,包括Google地图在中国的部分。关于地图坐标系的相关内容将在下一节详细说明。

2.4 关于地图坐标系的偏移问题

我们知道地球上的一个点是以经纬度来表示的,称为“WGS-84坐标系统”,国际上的GPS定位仪器所记录的坐标都是使用这个坐标系统,也称为“原始坐标系”或“地球坐标系”,Google地图在国外的绝大部分地区标注的经纬度都是基于“WGS-84坐标系统”。

但在我国出于国家安全的考虑,国内所有导航电子地图必须使用国家测绘局绘制的加密坐标系统,即通过一个不可逆的加密算法,将真实经纬度转换成一个不正确的坐标,即“GCJ-02坐标系”,业内也称“火星坐标系”,这个坐标系也是国内使用最广泛的坐标系。

除此之外,在国内也允许使用在“GCJ-02坐标系”基础上进行二次加密得到的坐标系,如百度地图使用的“bd-09坐标系”。

以下为国内主要的电子地图所使用的坐标系统:

地图 坐标系
Google地图 GCJ-02
百度地图 百度坐标
高德地图 GCJ-02
腾讯搜搜地图 GCJ-02
搜狗地图 搜狗坐标
阿里云地图 GCJ-02
图吧地图 图吧坐标

所以GPS记录的原始坐标必须经过相应的加密后才能在地图上正确的显示,如果是在百度地图上拾取的坐标,在百度地图上可以正确展示,但在其它地图上就不能直接使用了,这一点请开发者注意。

OneNET开发者中心使用的是百度地图,所以在展示的时候对原始地图数据点做了相应的加密处理,但并未改变原始数据,所以开发者在上传的时候一定要传GPS原始坐标才能正确展示。

网络上流传的纠偏算法一定程度上可以将加密坐标还原到接近原始坐标的位置,但还是不准确的,只能作为参考。