/// <summary> /// Retrieves the reuqest URL for the query. /// </summary> /// <returns>A string URL for the query.</returns> public override string GetRequestUrl() { string spatialFilter; double disKm = SpatialTools.ConvertDistance(Distance, DistanceUnits, DistanceUnitType.Kilometers); if (disKm < 0.16) { disKm = 0.16; } if (disKm > 1000) { disKm = 1000; } if (Center != null) { spatialFilter = string.Format(CultureInfo.InvariantCulture, "?spatialFilter=nearby({0:0.#####},{1:0.#####},{2})", Center.Latitude, Center.Longitude, disKm); } else if (!string.IsNullOrWhiteSpace(Address)) { spatialFilter = string.Format(CultureInfo.InvariantCulture, "?spatialFilter=nearby('{0}',{1})", Uri.EscapeDataString(Address), disKm); } else { throw new Exception("Location to search nearby is not specified."); } return(string.Format(base.GetBaseRequestUrl(), spatialFilter)); }
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); }