Export (0) Print
Expand All

Query API Sample Code (VB)

Bing

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

Imports System
Imports System.Net
Imports System.Xml
Imports Microsoft.VisualBasic
''' <summary>
''' Using the Spatial Data Services Query API to query the test data source FourthCoffeeSample
''' </summary>
Public Class SpatialDataQuerying

    Private MyKey As String = "InsertYourBingMapsKey"

    Private DataSourceID As String = "20181f26d9e94c81acdf9496133d4f23"


#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 Sub RunExampleQueries()
        ExampleFindByAreaRadius()
        ExampleFindByBoundingBox()
        ExampleFindByProperty()
        ExampleQueryByIdAtom()
        ' ExampleQueryByIdJson();
    End Sub
#End Region

#Region "Query By Area"
    Public Sub ExampleFindByAreaRadius()
        Console.WriteLine(vbLf & "ExampleFindByAreaRadius")

        ' Find all previously uploaded MyShops entities located within
        ' a certain radius around a point.
        ' Custom name of spatial data source created during upload
        Dim dataSourceName As String = "FourthCoffeeSample"
        ' Name of entities in the data source
        Dim dataEntityName As String = "FourthCoffeeShops"
        ' Unique access ID assigned to your data source by Bing Maps
        ' e.g. f8986xxxxxxxc844b
        Dim accessId As String = DataSourceID
        ' Your Bing Maps Spatial Data Services query key.
        Dim bingMapsKey As String = MyKey
        ' Coordinates of the point to search from.
        Dim SearchLatitude As Double = 47.63674
        Dim SearchLongitude As Double = -122.30413
        ' Search radius
        Dim Radius As Double = 3 ' km
        ' Setup REST request to query our uploaded customer data
        Dim requestUrl As String = 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, MyKey)
        ' Send the request and get back an XML response.
        Dim response As XmlDocument = GetXmlResponse(requestUrl)
        ' Display each entity's info.
        ProcessEntityElements(response)
    End Sub
#End Region

#Region "Helper Methods"


    Public Shared Function GetXmlResponse(ByVal requestUrl As String) As XmlDocument
        Try
            Dim request As HttpWebRequest = TryCast(WebRequest.Create(requestUrl), HttpWebRequest)
            Dim response As HttpWebResponse = TryCast(request.GetResponse(), HttpWebResponse)

            Dim xmlDoc As New XmlDocument()
            xmlDoc.Load(response.GetResponseStream())
            Return (xmlDoc)

        Catch e As Exception
            Console.WriteLine(e.Message)

            Console.Read()
            Return Nothing
        End Try
    End Function

    ''' <summary>
    ''' Display each "entry" in the Bing Spatial Data Services Atom (XML) response.
    ''' </summary>>
    Private Sub ProcessEntityElements(ByVal response As XmlDocument)
        Dim entryElements As XmlNodeList = response.GetElementsByTagName("entry")
        For i As Integer = 0 To entryElements.Count - 1
            Dim element As XmlElement = CType(entryElements(i), XmlElement)
            Dim contentElement As XmlElement = CType(element.GetElementsByTagName("content")(0), XmlElement)
            Dim propElement As XmlElement = CType(contentElement.GetElementsByTagName("m:properties")(0), XmlElement)
            Dim nameElement As XmlNode = propElement.GetElementsByTagName("d:Name")(0)
            If nameElement Is Nothing Then
                Throw New Exception("Name not found")
            End If
            Dim latElement As XmlNode = propElement.GetElementsByTagName("d:Latitude")(0)
            If latElement Is Nothing Then
                Throw New Exception("Latitude not found")
            End If
            Dim longElement As XmlNode = propElement.GetElementsByTagName("d:Longitude")(0)
            If longElement Is Nothing Then
                Throw New Exception("Longitude not found")
            End If
            Dim name As String = nameElement.InnerText
            Dim latitude As Double = 0
            Double.TryParse(latElement.InnerText, latitude)
            Dim longitude As Double = 0
            Double.TryParse(longElement.InnerText, longitude)
            Console.WriteLine("Coordinates of '{0}': {1}, {2}", name, latitude, longitude)
        Next i
    End Sub
#End Region

#Region "Query by Property"
    Public Sub ExampleFindByProperty()
        Console.WriteLine(vbLf & "ExampleFindByProperty")
        ' Find all previously uploaded MyShops entities that accept
        ' online orders.
        ' Custom name of spatial data source created during upload
        Dim dataSourceName As String = "FourthCoffeeSample"
        ' Name of entities in the data source
        Dim dataEntityName As String = "FourthCoffeeShops"
        ' Unique access ID assigned to your data source by Bing Maps
        ' e.g. f8986xxxxxxxc844b
        Dim accessId As String = DataSourceID
        ' Your Bing Maps Spatial Data Services query key.
        Dim bingMapsKey As String = MyKey
        ' Setup REST request to query our uploaded customer data
        Dim requestUrl As String = String.Format("http://spatial.virtualearth.net/REST/v1/data/{0}/{1}/{2}" & "?$filter=AcceptsOnlineOrders Eq True&key={3}", accessId, dataSourceName, dataEntityName, MyKey)
        ' Send the request and get back an XML response.
        Dim response As XmlDocument = GetXmlResponse(requestUrl)
        ' Display each entity's info.
        ProcessEntityElements(response)
    End Sub
#End Region

#Region "Query by Bounding Box"
    Public Sub ExampleFindByBoundingBox()
        Console.WriteLine(vbLf & "ExampleFindByBoundingBox")
        ' Find all previously uploaded MyShops entities located within
        ' the specified bounding box.
        ' Custom name of spatial data source created during upload
        Dim dataSourceName As String = "FourthCoffeeSample"
        ' Name of entities in the data source
        Dim dataEntityName As String = "FourthCoffeeShops"
        ' Unique access ID assigned to your data source by Bing Maps
        ' e.g. f8986xxxxxxxc844b
        Dim accessId As String = DataSourceID
        ' Your Bing Maps Spatial Data Services query key.
        Dim bingMapsKey As String = MyKey
        ' Coordinates of the bounding box's corners
        Dim lat1 As Double = 47.612476759406583
        Dim long1 As Double = -122.3237670214032
        Dim lat2 As Double = 47.682391560800767
        Dim long2 As Double = -122.27996173131822
        ' Setup REST request to query our uploaded customer data
        Dim requestUrl As String = 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, MyKey)
        ' Send the request and get back an XML response.
        Dim response As XmlDocument = GetXmlResponse(requestUrl)
        ' Display each entity's info.
        ProcessEntityElements(response)
    End Sub
#End Region


#Region "Query By ID"
    ''' <summary>
    ''' Query by ID using ATOM protocol
    ''' </summary>
    Public Sub ExampleQueryByIdAtom()
        Console.WriteLine(vbLf & "ExampleQueryByIdAtom")
        ' 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
        Dim dataSourceName As String = "FourthCoffeeSample"
        ' Name of entities in the data source
        Dim dataEntityName As String = "FourthCoffeeShops"
        ' Unique access ID assigned to your data source by Bing Maps
        ' e.g. f8986xxxxxxxc844b
        Dim accessId As String = DataSourceID
        ' ID of the entity to search for
        Dim entityId As Integer = -22067
        ' Your Bing Maps Spatial Data Services query key.
        Dim bingMapsKey As String = MyKey
        Dim requestUrl As String = String.Format("http://spatial.virtualearth.net" & "/REST/v1/data/{0}/{1}/{2}('{3}')?key={4}", accessId, dataSourceName, dataEntityName, entityId, MyKey)
        ' By default, the Spatial Data API returns
        ' data responses in Atom (xml) format.
        Dim xmlResponse As XmlDocument = GetXmlResponse(requestUrl)
        ' Select the first shop data in the xml results.
        Dim nsmgr As 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")
        Dim firstShopNode As XmlNode = xmlResponse.SelectSingleNode("//a:entry/a:content/m:properties", nsmgr)
        ' Extract result data from the xml nodes.
        Dim retrievedEntityId As Integer = Integer.Parse(firstShopNode.SelectSingleNode("d:EntityID", nsmgr).FirstChild.Value)
        Dim postalCode As String = firstShopNode.SelectSingleNode("d:PostalCode", nsmgr).FirstChild.Value
        Dim latitude As Double = Double.Parse(firstShopNode.SelectSingleNode("d:Latitude", nsmgr).FirstChild.Value)
        Dim longitude As Double = 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))
    End Sub

#End Region ';



End Class




Show:
© 2014 Microsoft