Was this page helpful?
Your feedback about this content is important. Let us know what you think.
Additional feedback?
1500 characters remaining
C# Sample Code

Query API Sample Code (C#)

Bing

The following C# code provides examples of how to query a data source using the Query API.

using System;
using System.Net;
using System.Xml;
namespace QueryAPIExamples
{
  /// <summary>
  /// Using the Spatial Data Services Query API to query the test data source FourthCoffeeSample
  /// </summary>
  public class SpatialDataQuerying
  {

   string BingMapsKey = "InsertYourBngMapsKeyHere";

   string DataSourceID = "20181f26d9e94c81acdf9496133d4f23";
   static void Main()
   {
       SpatialDataQuerying queryTest = new SpatialDataQuerying();
       queryTest.RunExampleQueries();
       Console.ReadLine();
       
   }
    
   #region Run the Queries

    /// <summary>
    /// Run the Bing Spatial Data Query examples in this class.
    /// Requires the spatial data to already be uploaded.
    /// </summary>
    public void RunExampleQueries()
    {
      ExampleFindByAreaRadius();
      ExampleFindByBoundingBox();
      ExampleFindByProperty();
      ExampleQueryByIdAtom();
     // ExampleQueryByIdJson();
    }
    #endregion 
    
    #region Query By Area
    public void ExampleFindByAreaRadius()
    {
       Console.WriteLine("\nExampleFindByAreaRadius");

      // Find all previously uploaded MyShops entities located within
      // a certain radius around a point.
      // Custom name of spatial data source created during upload
      string dataSourceName = "FourthCoffeeSample";
      // Name of entities in the data source
      string dataEntityName = "FourthCoffeeShops";
      // Unique access ID assigned to your data source by Bing Maps
      // e.g. f8986xxxxxxxc844b
      string accessId = DataSourceID;
      // Your Bing Maps Spatial Data Services query key.
      string bingMapsKey = BingMapsKey;
      // Coordinates of the point to search from.
      double SearchLatitude = 47.63674;
      double SearchLongitude =  - 122.30413;
      // Search radius
      double Radius = 3; // km
      // Setup REST request to query our uploaded customer data
      string requestUrl = string.Format("http://spatial.virtualearth.net/REST/v1/data/{0}/{1}/{2}" + 
        "?spatialFilter=nearby({3},{4},{5})&key={6}",accessId,dataSourceName,
        dataEntityName,SearchLatitude, SearchLongitude, Radius, bingMapsKey);
      // Send the request and get back an XML response.
      XmlDocument response = GetXmlResponse(requestUrl);
      // Display each entity's info.
      ProcessEntityElements(response);
    }
    #endregion 
    
    #region Helper Methods

      
    public static XmlDocument GetXmlResponse(string requestUrl)
    {
        try
        {
            HttpWebRequest request = WebRequest.Create(requestUrl) as HttpWebRequest;
            HttpWebResponse response = request.GetResponse() as HttpWebResponse;

            XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.Load(response.GetResponseStream());
            return (xmlDoc);

        }
        catch (Exception e)
        {
            Console.WriteLine(e.Message);

            Console.Read();
            return null;
        }
    }

    /// <summary>
    /// Display each "entry" in the Bing Spatial Data Services Atom (XML) response.
    /// </summary>
    /// <param name="entryElements"></param>
    private void ProcessEntityElements(XmlDocument response)
    {
      XmlNodeList entryElements = response.GetElementsByTagName("entry");
      for (int i = 0; i <= entryElements.Count - 1; i++)
      {
        XmlElement element = (XmlElement)entryElements[i];
        XmlElement contentElement = (XmlElement)element.GetElementsByTagName(
          "content")[0];
        XmlElement propElement = (XmlElement)
          contentElement.GetElementsByTagName("m:properties")[0];
        XmlNode nameElement = propElement.GetElementsByTagName("d:Name")[0];
        if (nameElement == null)
          throw new Exception("Name not found");
        XmlNode latElement = propElement.GetElementsByTagName("d:Latitude")[0];
        if (latElement == null)
          throw new Exception("Latitude not found");
        XmlNode longElement = propElement.GetElementsByTagName("d:Longitude")
          [0];
        if (longElement == null)
          throw new Exception("Longitude not found");
        string name = nameElement.InnerText;
        double latitude = 0;
        Double.TryParse(latElement.InnerText, out latitude);
        double longitude = 0;
        Double.TryParse(longElement.InnerText, out longitude);
        Console.WriteLine("Coordinates of '{0}': {1}, {2}", name, latitude,
          longitude);
      }
    }
    #endregion
   
    #region Query by Property
    public void ExampleFindByProperty()
    {
        Console.WriteLine("\nExampleFindByProperty");
      // Find all previously uploaded MyShops entities that accept
      // online orders.
      // Custom name of spatial data source created during upload
      string dataSourceName = "FourthCoffeeSample";
      // Name of entities in the data source
      string dataEntityName = "FourthCoffeeShops";
      // Unique access ID assigned to your data source by Bing Maps
      // e.g. f8986xxxxxxxc844b
      string accessId = DataSourceID;
      // Your Bing Maps Spatial Data Services query key.
      string bingMapsKey = BingMapsKey;
      // Setup REST request to query our uploaded customer data
      string requestUrl = String.Format(
        "http://spatial.virtualearth.net/REST/v1/data/{0}/{1}/{2}" + 
        "?$filter=AcceptsOnlineOrders Eq True&key={3}", accessId,
        dataSourceName, dataEntityName, bingMapsKey);
      // Send the request and get back an XML response.
      XmlDocument response = GetXmlResponse(requestUrl);
      // Display each entity's info.
      ProcessEntityElements(response);
    }
    #endregion 
    
    #region Query by Bounding Box
    public void ExampleFindByBoundingBox()
    {
        Console.WriteLine("\nExampleFindByBoundingBox");
      // Find all previously uploaded MyShops entities located within
      // the specified bounding box.
      // Custom name of spatial data source created during upload
        string dataSourceName = "FourthCoffeeSample";
        // Name of entities in the data source
        string dataEntityName = "FourthCoffeeShops";
      // Unique access ID assigned to your data source by Bing Maps
      // e.g. f8986xxxxxxxc844b
      string accessId = DataSourceID;
      // Your Bing Maps Spatial Data Services query key.
      string bingMapsKey = BingMapsKey;
      // Coordinates of the bounding box's corners
      double lat1 = 47.61247675940658;
      double long1 =  - 122.3237670214032;
      double lat2 = 47.68239156080077;
      double long2 =  - 122.27996173131822;
      // Setup REST request to query our uploaded customer data
      string requestUrl = String.Format(
        "http://spatial.virtualearth.net/REST/v1/data/{0}/{1}/{2}" + 
        "?spatialFilter=bbox({3},{4},{5},{6})&key={7}", accessId,
        dataSourceName, dataEntityName, lat1, long1, lat2, long2, bingMapsKey);
      // Send the request and get back an XML response.
      XmlDocument response = GetXmlResponse(requestUrl);
      // Display each entity's info.
      ProcessEntityElements(response);
    }
    #endregion 

    #region Query By ID
    /// <summary>
    /// Query by ID using ATOM protocol
    /// </summary>
    public void ExampleQueryByIdAtom()
    {
        Console.WriteLine("\nExampleQueryByIdAtom");
      // http://spatial.virtualearth.net/REST/v1/data/accessId/dataSourceName/entityTypeName('entityId')?key=queryKey
      // http://spatial.virtualearth.net/REST/v1/data/f8986xxxxxxxc844b/MyShopsSample/MyShops('1')?key=queryKey
      // Custom name of spatial data source created during upload
     string dataSourceName = "FourthCoffeeSample";
      // Name of entities in the data source
      string dataEntityName = "FourthCoffeeShops";
      // Unique access ID assigned to your data source by Bing Maps
      // e.g. f8986xxxxxxxc844b
      string accessId = DataSourceID;
      // ID of the entity to search for
      int entityId = -22067;
      // Your Bing Maps Spatial Data Services query key.
      string bingMapsKey = BingMapsKey;
      string requestUrl = string.Format("http://spatial.virtualearth.net" + 
        "/REST/v1/data/{0}/{1}/{2}('{3}')?key={4}", accessId, dataSourceName,
        dataEntityName, entityId, bingMapsKey);
      // By default, the Spatial Data API returns
      // data responses in Atom (xml) format.
      XmlDocument xmlResponse = GetXmlResponse(requestUrl);
      // Select the first shop data in the xml results.
      XmlNamespaceManager nsmgr = new XmlNamespaceManager(xmlResponse.NameTable);
      nsmgr.AddNamespace("a", "http://www.w3.org/2005/Atom");
      nsmgr.AddNamespace("m", 
        "http://schemas.microsoft.com/ado/2007/08/dataservices/metadata");
      nsmgr.AddNamespace("d", 
        "http://schemas.microsoft.com/ado/2007/08/dataservices");
      XmlNode firstShopNode = xmlResponse.SelectSingleNode(
        "//a:entry/a:content/m:properties", nsmgr);
      // Extract result data from the xml nodes.
      int retrievedEntityId = int.Parse(firstShopNode.SelectSingleNode(
        "d:EntityID", nsmgr).FirstChild.Value);
      string postalCode = firstShopNode.SelectSingleNode(
        "d:PostalCode", nsmgr).FirstChild.Value;
      double latitude = double.Parse(firstShopNode.SelectSingleNode(
        "d:Latitude", nsmgr).FirstChild.Value);
      double longitude = double.Parse(firstShopNode.SelectSingleNode(
        "d:Longitude", nsmgr).FirstChild.Value);
      Console.WriteLine(string.Format("Found EntityID {0} Postal Code: {1} Lat,Lon:  ({2},{3})", 
          retrievedEntityId,postalCode, latitude, longitude));
    }

    #endregion;


  }
}


Show:
© 2015 Microsoft