我正在使用Microsoft bot框架构建一个聊天机器人。我被困在如何从“活动”获取纬度和经度值。
有没有办法从“活动”中获取纬度和经度信息?
此处已存在similar question,但这并没有给出这个问题的答案。
我尝试了Microsoft..Bot.Builder.Location并且不会给用户提供长期服务但有助于从用户那里获取信息并对其进行验证。
任何建议都将不胜感激。
答案 0 :(得分:3)
您可以使用此免费REST API获取该地点的纬度和经度,此REST API适用于Wi-Fi Traingulation。
REST API for getting Latitude and Longitude of a place
创建一个与用于反序列化的REST API输出相对应的模型类:
public class PlaceGeography
{
public string ip { get; set; }
public string country_code { get; set; }
public string country_name { get; set; }
public string region_code { get; set; }
public string region_name { get; set; }
public string city { get; set; }
public string zip_code { get; set; }
public string time_zone { get; set; }
public float latitude { get; set; }
public float longitude { get; set; }
public int metro_code { get; set; }
}
现在,只需从Bot Framework中的C#代码发出GET请求,得到如下结果:
public async static Task<HttpResponseMessage> GetCoOrdinates()
{
string responseJSON = string.Empty;
PlaceGeography obj = new PlaceGeography();
using (HttpClient client = new HttpClient())
{
string URI = $"http://freegeoip.net/json/";
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
using (HttpResponseMessage msg = await client.GetAsync(URI))
{
if (msg.IsSuccessStatusCode) //if HTTP 200 then
{
responseJSON = await msg.Content.ReadAsStringAsync();
JsonConvert.PopulateObject(responseJSON, obj); // Deserialize model class object and get latitude and longitude
return msg;
}
else
return msg;
}
}
}
答案 1 :(得分:1)
对于移动设备上的Messenger,用户可以使用内置功能专门发送其位置。完成后,您可以从传入消息中接收值:
var location = activity.Entities?.FirstOrDefault(e => e.Type == "Place");
if (location != null)
{
var latitude = location.Properties["geo"]?["latitude"]?.ToString();
var longitude = location.Properties["geo"]?["longitude"]?.ToString();
}