public static List <M线路> 查询公交线路(M经纬度 __起点, M经纬度 __终点, string __城市, E驾车路线选择策略 __策略, out List <M地址> __可能起点, out List <M地址> __可能终点) { __起点 = 转换成百度坐标(__起点); __终点 = 转换成百度坐标(__终点); string __url = "http://api.map.baidu.com/direction/v1?mode=transit&output=xml&ak={0}&origin={1}&destination={2}®ion={3}&tactics={4}"; string __返回值 = ""; __返回值 = Web服务请求(string.Format(__url, _ak, HttpUtility.UrlEncode(string.Format("{1},{0}", __起点.经度, __起点.纬度)), HttpUtility.UrlEncode(string.Format("{1},{0}", __终点.经度, __终点.纬度)), HttpUtility.UrlEncode(__城市), (int)__策略)); var __XML文档 = XDocument.Load(new StringReader(__返回值)); var __根节点 = __XML文档.Root; var __status = __根节点.XPathSelectElement("./status").Value; if (__status != "0") { throw new Exception(__根节点.XPathSelectElement("./message").Value); } var __type = __根节点.XPathSelectElement("./type").Value; var __结果 = new List <M线路>(); if (__type == "2") { foreach (XElement __节点 in __根节点.XPathSelectElements("./result/routes/scheme")) { var __距离 = int.Parse(__节点.XPathSelectElement("./distance").Value); var __时间 = int.Parse(__节点.XPathSelectElement("./duration").Value) / 60; var __线路 = new M线路(string.Format("距离: {0}, 耗时: {1}", __距离, __时间)); __线路.距离 = __距离; foreach (XElement __二级节点 in __节点.XPathSelectElements("./steps/info")) { var __起点经度 = double.Parse(__二级节点.XPathSelectElement("./stepOriginLocation/lng").Value); var __起点纬度 = double.Parse(__二级节点.XPathSelectElement("./stepOriginLocation/lat").Value); var __说明 = __二级节点.XPathSelectElement("./stepInstruction").Value; __线路.点集合.Add(转换成谷歌坐标(new M经纬度(__起点经度, __起点纬度) { 类型 = E坐标类型.百度 })); __线路.步骤说明.Add(过滤字符串(__说明)); } var __最后一个节点 = __节点.XPathSelectElements("./steps/info").Last(); var __终点经度 = double.Parse(__最后一个节点.XPathSelectElement("./stepDestinationLocation/lng").Value); var __终点纬度 = double.Parse(__最后一个节点.XPathSelectElement("./stepDestinationLocation/lat").Value); __线路.点集合.Add(转换成谷歌坐标(new M经纬度(__终点经度, __终点纬度) { 类型 = E坐标类型.百度 })); __结果.Add(__线路); } __可能起点 = null; __可能终点 = null; return(__结果); } throw new NotImplementedException(); }
public static M线路 查询驾车线路(M经纬度 __起点, M经纬度 __终点, string __起点城市, string __终点城市, E驾车路线选择策略 __策略, out List <M地址> __可能起点, out List <M地址> __可能终点) { __起点 = 转换成百度坐标(__起点); __终点 = 转换成百度坐标(__终点); string __url = "http://api.map.baidu.com/direction/v1?mode=driving&output=xml&ak={0}&origin={1}&destination={2}&origin_region={3}&destination_region={4}&tactics={5}"; string __返回值 = ""; __返回值 = Web服务请求(string.Format(__url, _ak, HttpUtility.UrlEncode(string.Format("{1},{0}", __起点.经度, __起点.纬度)), HttpUtility.UrlEncode(string.Format("{1},{0}", __终点.经度, __终点.纬度)), HttpUtility.UrlEncode(__起点城市), HttpUtility.UrlEncode(__终点城市), (int)__策略)); var __XML文档 = XDocument.Load(new StringReader(__返回值)); var __根节点 = __XML文档.Root; var __status = __根节点.XPathSelectElement("./status").Value; if (__status != "0") { throw new Exception(__根节点.XPathSelectElement("./message").Value); } var __type = __根节点.XPathSelectElement("./type").Value; if (__type == "2") { var __结果 = new M线路(string.Format("{0}->{1}", __起点, __终点)); foreach (XElement __节点 in __根节点.XPathSelectElements("./result/routes/steps/content")) { var __点 = __节点.Element("path").Value; var __说明 = __节点.Element("instructions").Value; __结果.点集合.Add(转换成谷歌坐标(new M经纬度(double.Parse(__点.Split(',')[0]), double.Parse(__点.Split(',')[1])) { 类型 = E坐标类型.百度 })); __结果.步骤说明.Add(过滤字符串(__说明)); } __结果.距离 = int.Parse(__根节点.XPathSelectElement("./result/routes/distance").Value); var __备注 = new StringBuilder(); __备注.AppendFormat("耗时: {0}分钟", (int.Parse(__根节点.XPathSelectElement("./result/routes/duration").Value)) / 60).AppendLine(); __备注.AppendFormat("白天打车费用: {0}元", __根节点.XPathSelectElements("./result/taxi/detail/total_price").First().Value).AppendLine(); __备注.AppendFormat("夜间打车费用: {0}元", __根节点.XPathSelectElements("./result/taxi/detail/total_price").Last().Value).AppendLine(); __结果.备注 = __备注.ToString(); __可能起点 = null; __可能终点 = null; return(__结果); } throw new NotImplementedException(); }