Пример #1
0
        private static async Task <QueryResponse> MakeRequest(FindByPropertyRequest request)
        {
            var result = new QueryResponse();

            try
            {
                string urlRequest = request.GetRequestUrl();
                using (var responseStream = await ServiceHelper.GetStreamAsync(new Uri(urlRequest)))
                {
                    XDocument xmlDoc = XDocument.Load(responseStream);
                    string    name;

                    foreach (XElement element in xmlDoc.Descendants(XmlNamespaces.Atom + "entry"))
                    {
                        var r = new QueryResult()
                        {
                            EntityUrl = element.Element(XmlNamespaces.Atom + "id").Value,
                            Location  = new GeodataLocation()
                        };

                        XElement content = element.Element(XmlNamespaces.Atom + "content");

                        if (content != null && content.FirstNode != null)
                        {
                            XElement properties = (XElement)content.FirstNode;//.Element(XmlNamespaces.m + "properties");

                            if (properties != null)
                            {
                                foreach (var prop in properties.Descendants())
                                {
                                    name = prop.Name.LocalName;

                                    switch (name.ToLowerInvariant())
                                    {
                                    case "latitude":
                                        r.Location.Latitude = XmlUtilities.GetDouble(prop, 0);
                                        break;

                                    case "longitude":
                                        r.Location.Longitude = XmlUtilities.GetDouble(prop, 0);
                                        break;

                                    case "__distance":
                                        r.Distance = SpatialTools.ConvertDistance(XmlUtilities.GetDouble(prop, 0), DistanceUnitType.Kilometers, request.DistanceUnits);
                                        break;

                                    case "__IntersectedGeom":
                                        var wkt = XmlUtilities.GetString(prop);
                                        if (!string.IsNullOrEmpty(wkt))
                                        {
                                            r.IntersectedGeography = new Geography()
                                            {
                                                WellKnownText = wkt
                                            };
                                        }
                                        break;

                                    default:
                                        if (!r.Properties.ContainsKey(name))
                                        {
                                            var nVal = ParseNodeValue(prop);
                                            r.Properties.Add(name, nVal);

                                            if (nVal is Geography)
                                            {
                                                r.HasGeography = true;
                                            }
                                        }
                                        break;
                                    }
                                }
                            }
                        }

                        result.Results.Add(r);
                    }
                }
            }
            catch (Exception ex)
            {
                result.ErrorMessage = ex.Message;
            }

            return(result);
        }
Пример #2
0
 /// <summary>
 /// Processes a query request.
 /// </summary>
 /// <param name="request">A request class that derives from the BaseQueryRequest class.</param>
 /// <returns>A query response.</returns>
 public static async Task <QueryResponse> ProcessQuery(FindByPropertyRequest request)
 {
     return(await MakeRequest(request));
 }