阿里云物联网平台的位置服务并非一个完全独立的功能模块。位置信息可包含二维坐标与三维坐标,而位置数据的来源本质上是借助设备属性进行上传。换言之,若要让设备上报位置,您需先将其视为一个普通属性进行处理。
1)添加二维位置数据
操作过程十分简洁。进入数据分析 → 空间数据可视化 → 二维数据,点击添加,将刚才演示所用的设备选入,刷新间隔设为1秒。接着,在产品功能定义中定位到标准功能,点击添加功能,在其它类型里搜索位置,然后从结果列表中选取一个——实际上前面几个选项均可使用。这里我们选择的是:
标识符:GeoLocation 适用类别:CuttingMachine
位置上传需要配置的信息如下:
这里需特别提醒:如果您选择的标准属性与上图所示的类型定义不一致,就必须手动修改。位置属性的每一项都要严格按照上图进行调整,哪怕仅有一个地方不同,最终操作也会失败。当然,更简便的方式是一开始就直接参照上图手动创建属性。
2)基础代码
上传位置数据并不需要复杂操作,与上传普通属性的流程完全一致。模型代码可参考以下示例:
public class TestModel{
public string id { get { return DateTime.Now.Ticks.ToString(); } set { } }
public string version { get { return "1.0"; } set { } }
public Params @params { get; set; }
public TestModel(){
@params = new Params();
}
public class Params{
public geoLocation GeoLocation { get; set; }
public class geoLocation{
public Value value { get; set; }
public long time { get { return AliIoTClientJson.GetUnixTime(); } set { } }
public geoLocation(){
value = new Value();
}
public class Value{
public double Longitude { get; set; }
public double Latitude { get; set; }
public double Altitude { get; set; }
public int CoordinateSystem { get; set; }
}
}
public Params(){
GeoLocation = new geoLocation();
}
}
public string method { get { return "thing.event.property.post"; } set { } }
}
整体流程可概括为:定义位置模型 → 设置位置数据 → 上传位置数据。完整控制台程序如下:
class Program{
static AliIoTClientJson client;
static void Main(string[] args){
// 创建客户端
client = new AliIoTClientJson(new DeviceOptions{
ProductKey = "a1A6VVt72pD",
DeviceName = "json",
DeviceSecret = "7QrjTptQYCdepjbQvSoqkuygic2051zM",
RegionId = "cn-shanghai"
});
client.OpenPropertyDownPost();
// 设置要订阅的Topic、运行接收内容的Topic
string[] topics = new string[] { client.CombineHeadTopic("get") };
// 使用默认事件
client.UseDefaultEventHandler();
// 连接服务器
client.ConnectIoT(topics, null, 60);
while (true){
ToServer();
Thread.Sleep(1000);
}
Console.ReadKey();
}
public static void ToServer(){
// 实例化模型
TestModel model = new TestModel();
// 设置属性值
// 经度
model.@params.GeoLocation.value.Longitude = 113.952981;
// 纬度
model.@params.GeoLocation.value.Latitude = 22.539843;
// 海拔
model.@params.GeoLocation.value.Altitude = 56;
// 坐标系类型
model.@params.GeoLocation.value.CoordinateSystem = 2;
// 上传属性数据
client.Thing_Property_Post(model, false);
}
// TestModel类定义同上,此处省略
}
上述代码中使用了模拟的位置数据,实际开发时请根据现场环境进行赋值。
最后,打开阿里云物联网控制台 → 数据分析 → 空间数据可视化 → 二维数据 → 演示产品,即可看到设备定位在深圳阿里云大厦——也就是高新园地铁站附近的位置。效果是不是很直观?
