最近在做关于拼车的项目,使用到了腾讯地图API(路线规划服务),在这里分享一下代码,欢迎点评(第一次写博客呢)。
官方文档:https://lbs.qq.com/webservice_v1/guide-road.html
一、定义腾讯地图开发key类
public class TengXunBase { public string TXserverUrl { get { return "https://apis.map.qq.com"; } } public string TXmapKey { get { return System.Web.Configuration.WebConfigurationManager.AppSettings["TXmapKey"]; } } public string TXsecretKey { get { return System.Web.Configuration.WebConfigurationManager.AppSettings["TXsecretKey"]; } } }
二、定义拼接url请求类
public class TengXunBaseRequest : TengXunBase { #region url public string GetModeDirectionUrl(TengXunDirectionBase m) { return string.Format("{0}/ws/direction/v1/{1}/?from={2}&to={3}", this.TXserverUrl, m.mode, m.from, m.to); } public string GetDirectionUrl(TengXunDirectionBase m) { string result = GetModeDirectionUrl(m); if (!string.IsNullOrEmpty(m.waypoints)) { result = string.Format("{0}&waypoints={1}", result, m.waypoints); } if (!string.IsNullOrEmpty(m.callback)) { result = string.Format("{0}&output=json&callback={1}", result, m.callback); } else { result=string.Format("{0}&output=json", result); } return result = string.Format("{0}&key={1}&sig={2}", result, this.TXmapKey,m.sig); } #endregion #region 获取签名 /// <summary> /// 获取签名 /// 1. 首先对参数进行排序:按参数名升序 /// 2. 签名计算(sig):请求路径+”?”+请求参数+SK进行拼接,并计算拼接后字符串md5值,即为签名(sig) /// 3. 生成最终请求:将计算得到的签名sig,放到请求中(参数名即为:sig) /// </summary> /// <param name="m"></param> /// <returns></returns> public string GetDirectionSig(TengXunDirectionBase m) { string result = string.Format("/ws/direction/v1/{0}/", m.mode); if (!string.IsNullOrEmpty(m.callback)) { result = string.Format("{0}?callback={1}&from={2}&key={3}&output=json&to={4}", result, m.callback, m.from, m.to); } else { result = string.Format("{0}?from={1}&key={2}&output=json&to={3}", result, m.from, this.TXmapKey, m.to); } if (!string.IsNullOrEmpty(m.waypoints)) { result = string.Format("{0}&waypoints={1}", result, m.waypoints); } result = string.Format("{0}{1}", result, this.TXsecretKey); return DreamsTech.Utility.EncryptDecryptHelper.GetMd5(result); } #endregion }
三、路线规划服务请求参数类
public class TengXunDirectionBase { /// <summary> /// 必填 驾车(driving);步行(walking);骑行(bicycling);公交(transit) /// </summary> public string mode { get; set; } /// <summary> /// 必填 起点位置坐标 如 from=40.034852,116.319820 /// </summary> public string from { get; set; } /// <summary> /// 必填 终点位置坐标,格式:lat,lng 如to=39.771075,116.351395 /// </summary> public string to { get; set; } /// <summary> /// 途经点,格式:lat1,lng1;lat2,lng2;… 最大支持10个 /// </summary> public string waypoints { get; set; } /// <summary> /// 回调函数 如 callback=cb /// </summary> public string callback { get; set; } /// <summary> /// 签名 /// </summary> public string sig { get; set; } }
四、 请求路线规划服务
/// <summary> /// 请求路线规划服务 /// </summary> /// <param name="m"></param> /// <returns></returns> private TXDrivingVO GetTXDriving(TXDrivingDTO m) { if (string.IsNullOrEmpty(m.from) || string.IsNullOrEmpty(m.to)) { Context.MessageType = BusinessLayer.EMessageType.BussinessError; Context.Message = "参数有误"; return null; } if (string.IsNullOrEmpty(m.mode)) { m.mode = "driving"; } TengXunDirectionBase txDirectionBase = new TengXunDirectionBase() { mode = m.mode, from = m.from, to = m.to, waypoints = m.waypoints }; TengXunBaseRequest txBaseRequest = new TengXunBaseRequest(); txDirectionBase.sig = txBaseRequest.GetDirectionSig(txDirectionBase); string url = txBaseRequest.GetDirectionUrl(txDirectionBase); TXDrivingVO result = new TXDrivingVO(); HttpClient client = new HttpClient(); HttpResponseMessage hrm = client.GetAsync(url).Result; if (hrm.StatusCode == System.Net.HttpStatusCode.OK) { JObject jo = (JObject)JsonConvert.DeserializeObject(hrm.Content.ReadAsStringAsync().Result); result.status = Convert.ToInt32(jo["status"]); result.message = jo["message"].ToString(); result.result = jo["result"]; return result; } else { Context.MessageType = BusinessLayer.EMessageType.BussinessError; Context.Message = "调用腾讯地图异常"; return null; } }