Пример #1
0
        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}&region={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();
        }
Пример #2
0
        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();
        }