views:

92

answers:

1

Hi,

I want to get latlng object in google maps in advance. Basically my json result is returning array of address which I need to convert to glatlng to use for markers. But if i will use GeoCoder object then it will send asynch request which I don't want.

Is there any way other than GeoCoder object to convert an address string to GLatLng object?

Thanks

A: 

You can take a look at the json object returned by any query to the maps api.

Then you use the json serializer in system.web.extensions to serialize the json into a class that you have to create from the JSONresponses which you analyze manually.

Note that you can get localized language return results by adding this to the http web request:

    wrHTTPrequest.UserAgent = "Lord Vishnu/Transcendental (Vaikuntha;Supreme Personality of Godness)"
    wrHTTPrequest.Headers.Add("Accept-Language:" + System.Globalization.CultureInfo.CurrentCulture.Name)
    wrHTTPrequest.ContentType = "text/html"

Edit: The example, from one of my files (remove all the SharpMap.Map stuff, it requires an external assembly.

Copyright (C) 2010 Me. Permission is hereby granted to use it for good, not evil - if you add me to your thanks list.

Public Class _Default
    Inherits System.Web.UI.Page

    Protected smmGlobalMap As SharpMap.Map

    'http://www.java2s.com/Code/VB/Development/ListallCultureInformation.htm
    Public Sub listcultures()
        'Dim x As System.DateTime = DateTime.Now
        'Response.Write(x.ToString("HH':'mm':'ss MMM d', 'yyyy 'PST'", New System.Globalization.CultureInfo("zh-CN", False)))
        Dim info As System.Globalization.CultureInfo
        For Each info In System.Globalization.CultureInfo.GetCultures(System.Globalization.CultureTypes.AllCultures)
            Response.Write("Deutsch: " + info.DisplayName + " English: " + info.EnglishName + " Native: " + info.NativeName + " Name: " + info.Name + " Codepage: " + info.TextInfo.ANSICodePage.ToString() + "<br />")
            If Not info.IsNeutralCulture Then
                'item.SubItems.Add(amount.ToString("C", info.NumberFormat))
                'item.SubItems.Add(dateNow.ToString("d", info.DateTimeFormat))
            End If
        Next

    End Sub


    Public Sub GeoCodeTest()
        'Dim GeoCodeResponse As Google.Maps.JSON.cGeoCodeResponse = GetJSONgeodata("San Bernardino, Switzerland")
        'Dim GeoCodeResponse As Google.Maps.JSON.cGeoCodeResponse = GetJSONgeodata("北京")
        'Dim GeoCodeResponse As Google.Maps.JSON.cGeoCodeResponse = GeoCodeRequest("San Bernardino, Switzerland")
        Dim GeoCodeResponse As Google.Maps.JSON.cGeoCodeResponse = GeoCodeRequest("北京")
        Response.Write(Seri(GeoCodeResponse))
        Response.Write("<br /><br /><br />")
        Response.Write(GeoCodeResponse.results(0).address_components(0).long_name)
        Response.Write("<br /><br />")
        Response.Write(GeoCodeResponse.results(0).geometry.location.lat.ToString)
        Response.Write("<br />")
        Response.Write(GeoCodeResponse.results(0).geometry.location.lng.ToString)
        Response.Write("<br /><br /><br />")
        Response.Write(GeoCodeResponse.results(0).geometry.viewport.northeast.lat.ToString)
        Response.Write("<br />")
        Response.Write(GeoCodeResponse.results(0).geometry.viewport.northeast.lng.ToString)
        Response.Write("<br /><br /><br />")
    End Sub


    Public Function Seri(ByRef GeoData As Google.Maps.JSON.cGeoCodeResponse) As String
        Dim jssJSONserializer As System.Web.Script.Serialization.JavaScriptSerializer = New System.Web.Script.Serialization.JavaScriptSerializer()
        Dim CommentData As New Google.Maps.JSON.cGeoCodeResponse
        Dim str As String = jssJSONserializer.Serialize(GeoData)
        Return str
    End Function


    ' http://www.codeproject.com/KB/IP/httpwebrequest_response.aspx
    ' http://www.linuxhowtos.org/C_C++/socket.htm
    ' http://en.wikipedia.org/wiki/List_of_countries_by_GDP_(PPP)_per_capita
    Public Function GeoCodeRequest(ByRef strAddress As String) As Google.Maps.JSON.cGeoCodeResponse
        strAddress = System.Web.HttpUtility.UrlEncode(strAddress) ' Add reference to System.Web
        Dim strURL As String = "http://maps.google.com/maps/api/geocode/json?address=" + strAddress + "&sensor=false"

        ' *** Establish the request
        Dim wrHTTPrequest As System.Net.HttpWebRequest = DirectCast(System.Net.WebRequest.Create(strURL), System.Net.HttpWebRequest)

        ' *** Set properties
        wrHTTPrequest.Method = "GET"
        wrHTTPrequest.Timeout = 10000 ' 10 secs
        wrHTTPrequest.UserAgent = "Lord Vishnu/Transcendental (Vaikuntha;Supreme Personality of Godness)"
        wrHTTPrequest.Headers.Add("Accept-Language:" + System.Globalization.CultureInfo.CurrentCulture.Name)
        wrHTTPrequest.ContentType = "text/html"


        ' *** Retrieve request info headers
        Dim wrHTTPresponse As System.Net.HttpWebResponse = DirectCast(wrHTTPrequest.GetResponse(), System.Net.HttpWebResponse)

        ' My Windows' default code-Page
        Dim enc As System.Text.Encoding = System.Text.Encoding.GetEncoding(1252)

        ' Google's code-page
        enc = System.Text.Encoding.UTF8

        Dim srResponseStream As New System.IO.StreamReader(wrHTTPresponse.GetResponseStream(), enc)

        Dim strJSONencodedResponse As String = srResponseStream.ReadToEnd()
        wrHTTPresponse.Close()
        srResponseStream.Close()

        If String.IsNullOrEmpty(strJSONencodedResponse) Then
            Return Nothing
        End If

        Dim jssJSONserializer As System.Web.Script.Serialization.JavaScriptSerializer = New System.Web.Script.Serialization.JavaScriptSerializer()
        Dim GeoCodeResponse As New Google.Maps.JSON.cGeoCodeResponse
        GeoCodeResponse = jssJSONserializer.Deserialize(Of Google.Maps.JSON.cGeoCodeResponse)(strJSONencodedResponse)

        Return GeoCodeResponse
    End Function




    Public Function GetJSONgeodata(ByVal strAddress As String) As Google.Maps.JSON.cGeoCodeResponse
        'strAddress = "Zurich, Switzerland"
        strAddress = System.Web.HttpUtility.UrlEncode(strAddress) ' Add reference to System.Web
        Dim strURL As String = "http://maps.google.com/maps/api/geocode/json?address=" + strAddress + "&sensor=false"


        Dim wwwClient As Net.WebClient = Nothing
        Dim strJSONtranslatedText As String = Nothing

        Try
            'http://www.stevetrefethen.com/blog/UsingGoogleMapsforGeocodinginC.aspx
            wwwClient = New Net.WebClient()
            wwwClient.Encoding = System.Text.Encoding.UTF8
            strJSONtranslatedText = wwwClient.DownloadString(strURL)
        Catch ex As Exception
            MsgBox(ex.Message)
        Finally
            wwwClient.Dispose()
            wwwClient = Nothing
        End Try
        If String.IsNullOrEmpty(strJSONtranslatedText) Then
            Return Nothing
        End If

        Dim jssJSONserializer As System.Web.Script.Serialization.JavaScriptSerializer = New System.Web.Script.Serialization.JavaScriptSerializer()
        Dim GeoCodeRespone As New Google.Maps.JSON.cGeoCodeResponse
        GeoCodeRespone = jssJSONserializer.Deserialize(Of Google.Maps.JSON.cGeoCodeResponse)(strJSONtranslatedText)

        Return GeoCodeRespone
    End Function



    ' http://sharpmap.codeplex.com/wikipage?title=CustomTheme
    ' http://sharpmap.codeplex.com/Thread/View.aspx?ThreadId=28205
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        'GeoCodeTest()
        listcultures()

        'Set up the map
        smmGlobalMap = InitializeMap(New System.Drawing.Size(CInt(imgMap.Width.Value), CInt(imgMap.Height.Value)))
        If Page.IsPostBack Then
            'Page is post back. Restore center and zoom-values from viewstate
            smmGlobalMap.Center = DirectCast(ViewState("mapCenter"), SharpMap.Geometries.Point)
            smmGlobalMap.Zoom = CDbl(ViewState("mapZoom"))
        Else
            'This is the initial view of the map. Zoom to the extents of the map:
            smmGlobalMap.ZoomToExtents()
            'Save the current mapcenter and zoom in the viewstate
            ViewState.Add("mapCenter", smmGlobalMap.Center)
            ViewState.Add("mapZoom", smmGlobalMap.Zoom)
            'Create the map
            CreateMap()
        End If
        DistanceAltstRebstein()
    End Sub


    Protected Sub imgMap_Click(ByVal sender As Object, ByVal e As ImageClickEventArgs)
        'Set center of the map to where the client clicked
        smmGlobalMap.Center = SharpMap.Utilities.Transform.MapToWorld(New System.Drawing.Point(e.X, e.Y), smmGlobalMap)
        'Set zoom value if any of the zoom tools were selected
        If rblMapTools.SelectedValue = "0" Then
            'Zoom in
            smmGlobalMap.Zoom = smmGlobalMap.Zoom * 0.5
        ElseIf rblMapTools.SelectedValue = "1" Then
            'Zoom out
            smmGlobalMap.Zoom = smmGlobalMap.Zoom * 2
        End If
        'Save the new map's zoom and center in the viewstate
        ViewState.Add("mapCenter", smmGlobalMap.Center)
        ViewState.Add("mapZoom", smmGlobalMap.Zoom)
        'Create the map
        CreateMap()
        Response.Write("X: " + e.X.ToString + " Y: " + e.Y.ToString + "<br /><br />")
        Response.Write("Longitude: " + smmGlobalMap.Center.X.ToString + " Latitude: " + smmGlobalMap.Center.Y.ToString + "<br />")

    End Sub


    ' http://sharpmapv2.googlecode.com/svn/trunk/SharpMap/Rendering/Thematics/CustomTheme.cs
    Public Function SetStyle1(ByVal row As SharpMap.Data.FeatureDataRow) As SharpMap.Styles.VectorStyle
        Dim vstlStyle1 As SharpMap.Styles.VectorStyle = New SharpMap.Styles.VectorStyle()
        vstlStyle1.Enabled = True
        vstlStyle1.EnableOutline = True

        vstlStyle1.Fill = System.Drawing.Brushes.Yellow
        Return vstlStyle1
    End Function


    'density, countryname
    Private Sub InsertData(ByVal strParameter1 As String, ByVal strParameter2 As String)

        Dim dbcon As New System.Data.SqlClient.SqlConnection("Data Source=pc-myname\MS_SQL_2005;Initial Catalog=ddb;Integrated Security=SSPI;")
        dbcon.Open()


        Dim strSQL As String = "IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'dbo.T_SHP_Country') AND type in (N'U'))"
        strSQL += "CREATE TABLE T_SHP_Country( "
        strSQL += "SHPC_UID uniqueidentifier NULL, "
        strSQL += "SHPC_Density int NULL, "
        strSQL += "SHPC_CountryName nvarchar(max) NULL "
        strSQL += ") ON [PRIMARY] ;"

        Dim dbcmdCheckRequirements As New System.Data.SqlClient.SqlCommand(strSQL, dbcon)
        dbcmdCheckRequirements.ExecuteNonQuery()

        'dbcmdCheckRequirements.CommandText = "DELETE FROM T_SHP_Country"
        'dbcmdCheckRequirements.ExecuteNonQuery()


        strParameter1 = strParameter1.Replace("'", "''")
        strParameter2 = strParameter2.Replace("'", "''")
        'strParameter3 = strParameter3.Replace("'", "''")


        strSQL = "INSERT INTO T_SHP_Country "
        strSQL += "(SHPC_UID, SHPC_Density, SHPC_CountryName)"
        strSQL += "VALUES("
        strSQL += "'" + System.Guid.NewGuid.ToString() + "', " 'PLZ_UID, uniqueidentifier
        strSQL += " '" + strParameter1 + "', " 'PLZ_Name1, nvarchar(max)
        strSQL += " '" + strParameter2 + "' " 'PLZ_State, nvarchar(max)
        strSQL += ")"
        Dim cmd As New System.Data.SqlClient.SqlCommand(strSQL, dbcon)
        cmd.ExecuteNonQuery()

        dbcon.Close()
    End Sub


    Public Function SetStyle(ByVal row As SharpMap.Data.FeatureDataRow) As SharpMap.Styles.VectorStyle
        Response.Write("")

        If False Then
            For i As Integer = 0 To row.Table.Columns.Count - 1 Step 1
                Response.Write("<br>" + row.Table.Columns(i).ColumnName + "<br>")
                Response.Write("<br>" + row("NAME").ToString + ":&nbsp;&nbsp;&nbsp;&nbsp;" + row("POPDENS").ToString + "<br>")
            Next i
        End If

        Try
            'InsertData(row("POPDENS").ToString(), row("NAME").ToString())
            Dim vstlStyle As SharpMap.Styles.VectorStyle = New SharpMap.Styles.VectorStyle()
            Select Case row("POPDENS")
                Case 0 To 5
                    ' Add reference to System.Drawing
                    Dim colCustomColor As System.Drawing.Color = System.Drawing.Color.FromArgb(50, System.Drawing.Color.Gray)
                    'Dim customColor As System.Drawing.Color = System.Drawing.Color.FromArgb(255, 0, 110, 255)
                    Dim sbShadowBrush As System.Drawing.SolidBrush = New System.Drawing.SolidBrush(colCustomColor)

                    vstlStyle.Fill = sbShadowBrush
                Case 6 To 9
                    vstlStyle.Fill = System.Drawing.Brushes.BlanchedAlmond
                Case 10 To 25
                    vstlStyle.Fill = System.Drawing.Brushes.DarkGreen
                Case 26 To 50
                    vstlStyle.Fill = System.Drawing.Brushes.Green
                Case 51 To 100
                    vstlStyle.Fill = System.Drawing.Brushes.YellowGreen
                Case 101 To 200
                    vstlStyle.Fill = System.Drawing.Brushes.Orange
                Case 201 To 250
                    vstlStyle.Fill = System.Drawing.Brushes.DarkOrange
                Case 251 To 300
                    vstlStyle.Fill = System.Drawing.Brushes.OrangeRed
                Case 401 To 600
                    vstlStyle.Fill = System.Drawing.Brushes.Red
                Case 601 To 900
                    vstlStyle.Fill = System.Drawing.Brushes.DarkRed
                Case 901 To 1000
                    vstlStyle.Fill = System.Drawing.Brushes.Crimson
                Case Else
                    vstlStyle.Fill = System.Drawing.Brushes.Pink
            End Select

            vstlStyle.EnableOutline = True
            Dim clCustomPenColor As System.Drawing.Color = System.Drawing.Color.FromArgb(100, 100, 100, 100)
            Dim myPen As New System.Drawing.Pen(clCustomPenColor)
            myPen.Width = 0.1
            'vstlStyle.Outline = System.Drawing.Pens.Black
            vstlStyle.Outline = myPen

            Return vstlStyle

            'If (row("NAME").ToString().StartsWith("S")) Then
            '    Dim vstlStyle As SharpMap.Styles.VectorStyle = New SharpMap.Styles.VectorStyle()
            '    vstlStyle.Fill = System.Drawing.Brushes.Yellow
            '    Return vstlStyle
            'Else
            '    Return Nothing ' Return null which will render the default style
            'End If

        Catch ex As Exception
            Response.Write(ex.Message)
            Return Nothing
        End Try
    End Function


    Sub SetThemeForLayerOnMap(ByRef cstCustomTheme As SharpMap.Rendering.Thematics.CustomTheme, ByVal strLayerName As String, ByRef smmMapParameter As SharpMap.Map)
        TryCast(smmMapParameter.GetLayerByName(strLayerName), SharpMap.Layers.VectorLayer).Theme = cstCustomTheme
        'CType(smmMapParameter.GetLayerByName(strLayerName), SharpMap.Layers.VectorLayer).Theme = cstCustomTheme
    End Sub


    Sub ReIndex(ByVal strRelativePath As String)
        Dim shfShapeFile As New SharpMap.Data.Providers.ShapeFile(Server.MapPath(strRelativePath), True)
        ReIndex(shfShapeFile)
    End Sub


    Sub ReIndex(ByRef shfShapeFile As SharpMap.Data.Providers.ShapeFile)
        If shfShapeFile.IsOpen Then
            shfShapeFile.RebuildSpatialIndex()
        Else
            shfShapeFile.Open()
            shfShapeFile.RebuildSpatialIndex()
            shfShapeFile.Close()
        End If
    End Sub


    Public Function OldDegreesToRadian(ByVal dblDegrees As Double) As Double
        Dim dblRadians = dblDegrees * Math.PI / 180.0
        Return dblRadians
    End Function


    Public Sub DistanceAltstRebstein()
        'http://www.getlatlon.com/
        Dim allat As Double = 47.377894
        Dim allong As Double = 9.539833

        Dim reblat As Double = 47.399364
        Dim reblong As Double = 9.585995

        Dim distance As Double = GetDistance(allat, reblat, allong, reblong)
        Response.Write("Distance: " + distance.ToString("#,#.000") + " km")
    End Sub


    'http://www.codeproject.com/KB/cs/distancebetweenlocations.aspx
    'http://www.billsternberger.net/asp-net-mvc/latitude-and-longitude-lookup-with-jquery-c-asp-net-mvc/
    'http://webcache.googleusercontent.com/search?q=cache:y6AGC8J7zG8J:bryan.reynoldslive.com/post/Latitude2c-Longitude2c-Bearing2c-Cardinal-Direction2c-Distance2c-and-C.aspx+c%23+get+latitude+longitude&amp;cd=2&amp;hl=en&amp;ct=clnk
    Public Function GetDistance(ByVal dblLat1 As Double, ByVal dblLat2 As Double, ByVal dblLong1 As Double, ByVal dblLong2 As Double) As Double
        ' http://itouchmap.com/latlong.html
        ' http://mathforum.org/library/drmath/sets/select/dm_lat_long.html
        ' http://stevemorse.org/jcal/latlon.php
        ' http://en.wikipedia.org/wiki/Atan2



        ' http://www.movable-type.co.uk/scripts/latlong.html
        ' Formula:

        ' R = Earth's radius (mean radius = 6,371km)
        ' Δlat = lat2− lat1
        ' Δlong = long2− long1
        ' a = sin²(Δlat/2) + cos(lat1)*cos(lat2)*sin²(Δlong/2)
        ' c = 2*atan2(√a, √(1−a))
        ' d = R*c

        dblLat1 = OldDegreesToRadian(dblLat1)
        dblLat2 = OldDegreesToRadian(dblLat2)

        dblLong1 = OldDegreesToRadian(dblLong1)
        dblLong2 = OldDegreesToRadian(dblLong2)


        'http://en.wikipedia.org/wiki/Earth_radius#Mean_radii
        Dim dblEarthMeanRadius As Double = 6371.009 ' km
        Dim dblHalfDeltaLat As Double = (dblLat2 - dblLat1) / 2.0
        Dim dblHalfDeltaLong As Double = (dblLong2 - dblLong1) / 2.0


        Dim dblTriangleSideA As Double = Math.Sin(dblHalfDeltaLat) * Math.Sin(dblHalfDeltaLat) + _
                                         Math.Cos(dblLat1) * Math.Cos(dblLat2) * _
                                         Math.Sin(dblHalfDeltaLong) * Math.Sin(dblHalfDeltaLong)

        Dim dblTriangleSideC As Double = 2 * Math.Atan2(Math.Sqrt(dblTriangleSideA), Math.Sqrt(1 - dblTriangleSideA))

        Dim dblDistance As Double = dblEarthMeanRadius * dblTriangleSideC ' in km
        Return dblDistance ' in km

        ' Note for the English: 1 (statute) mile = 1609.344 m = 1.609344 km
        ' http://en.wikipedia.org/wiki/Mile#Nautical_mile
        dblDistance = dblDistance / 1.609344 ' km to statute miles
        Return dblDistance ' in statute miles
    End Function


    ''' <summary>
    ''' Sets up the map, add layers and sets styles
    ''' </summary>
    ''' <param name="outputsize">Initiatial size of output image</param>
    ''' <returns>Map object</returns>
    Private Function InitializeMap(ByVal outputsize As System.Drawing.Size) As SharpMap.Map
        'Initialize a new map of size 'imagesize'
        Dim map As New SharpMap.Map(outputsize)
        map.BackColor = Drawing.Color.AliceBlue
        'Set up the countries layer
        Dim layCountries As New SharpMap.Layers.VectorLayer("Countries")
        'Set the datasource to a shapefile in the App_data folder


        Dim sfShapeFile1 As New SharpMap.Data.Providers.ShapeFile(Server.MapPath("~\App_data\Countries.shp"), True)
        ReIndex(sfShapeFile1)



        'Dim x As System.Data.DataColumnCollection = sfShapeFile1.Columns
        'For Each y As DataColumn In x
        ' Response.Write(y.ColumnName)
        ' Response.Write(y.DataType.ToString())
        '
        '        Next
        'x.Item(0).ColumnName
        'x.Item(0).DataType.ToString()



        layCountries.DataSource = sfShapeFile1
        'Set fill-style to green
        Dim MyTheme As New SharpMap.Rendering.Thematics.CustomTheme(AddressOf SetStyle)

        Dim defaultstyle As SharpMap.Styles.VectorStyle = New SharpMap.Styles.VectorStyle()
        defaultstyle.Fill = System.Drawing.Brushes.Gray
        MyTheme.DefaultStyle = defaultstyle

        layCountries.Theme = MyTheme

        layCountries.Style.Fill = New System.Drawing.SolidBrush(System.Drawing.Color.Green)
        'Set the polygons to have a black outline
        layCountries.Style.Outline = System.Drawing.Pens.Black
        layCountries.Style.EnableOutline = True

        'Set up a river layer
        Dim layRivers As New SharpMap.Layers.VectorLayer("Rivers")
        'Set the datasource to a shapefile in the App_data folder

        Dim sh2 As New SharpMap.Data.Providers.ShapeFile(Server.MapPath("~\App_data\Rivers.shp"), True)
        ReIndex(sh2)


        layRivers.DataSource = sh2
        'Define a blue 1px wide pen
        layRivers.Style.Line = New System.Drawing.Pen(System.Drawing.Color.Blue, 1)
        'Dim x As New SharpMap.Rendering.Thematics.IndividualTheme("abc")



        'Add the layers to the map object.
        'The order we add them in are the order they are drawn, so we add the rivers last to put them on top
        map.Layers.Add(layCountries)
        map.Layers.Add(layRivers)
        Return map
    End Function


    ''' <summary>
    ''' Creates the map, inserts it into the cache and sets the ImageButton Url
    ''' </summary>
    Private Sub CreateMap()
        If smmGlobalMap Is Nothing Then
            Response.Write("<h1 style=""color: red;"">smmGlobalMap is NULL !</h1>")
        Else
            Dim img As System.Drawing.Image = smmGlobalMap.GetMap()
            Dim imgID As String = SharpMap.Web.Caching.InsertIntoCache(1, img)
            imgMap.ImageUrl = "getmap.aspx?ID=" & HttpUtility.UrlEncode(imgID)
        End If

    End Sub


End Class




















' http://www.4guysfromrolla.com/articles/052610-1.aspx

' http://code.google.com/apis/maps/faq.html
' http://www.billsternberger.net/asp-net-mvc/latitude-and-longitude-lookup-with-jquery-c-asp-net-mvc/
' http://code.google.com/apis/maps/documentation/geocoding/
' http://code.google.com/apis/maps/documentation/geocoding/index.html
' http://code.google.com/apis/maps/faq.html#geocoder_countries



' http://maps.google.com/maps/api/geocode/json?address=1600+Amphitheatre+Parkway,+Mountain+View,+CA&amp;sensor=false
' http://maps.google.com/maps/api/geocode/json?address=Zurich,+Switzerland&amp;sensor=false
' http://maps.google.com/maps/api/geocode/json?address=SanBernardino,+Switzerland&amp;sensor=false&amp;output=json
' http://maps.google.com/maps/api/geocode/json?address=afsdfKarrrachiii&amp;sensor=false&amp;output=json


' http://math.rice.edu/~pcmi/sphere/sphere.html
' http://math.rice.edu/~pcmi/sphere/


Namespace Google.Maps.JSON


    Public Class cAddressComponent
        Public long_name
        Public short_name
        Public types As New List(Of String) '"locality", "country", "postal_code", "sublocality", administrative_area_level_1", administrative_area_level_2", "political"
    End Class


    Public Class cLocation
        Public lat As Double = 0
        Public lng As Double = 0
    End Class


    Public Class cViewPort
        Public southwest As New cLocation
        Public northeast As New cLocation
    End Class


    Public Class cBounds
        Public southwest As New cLocation
        Public northeast As New cLocation
    End Class


    Public Class cGeometry
        Public location As New cLocation
        Public location_type As String = "APPROXIMATE" ' "GEOMETRIC_CENTER",
        Public viewport As New cViewPort
        Public bounds As New cBounds
    End Class


    Public Class cResult
        Public types As New List(Of String) ' "route", "point_of_interest", "establishment", "locality", "sublocality", "political" 
        Public formatted_address As String
        Public address_components As New List(Of cAddressComponent)
        Public geometry As New cGeometry
    End Class


    Public Class cGeoCodeResponse
        Public status As String = "ZERO_RESULTS" ' "OK" 
        Public results As New List(Of cResult)
    End Class


End Namespace
Quandary
Do you have any link or example to see?
I've an example, written myself. It's from one of my asp.net websites in VB.NET. The class you use to deserialize is Google.Maps.JSON.cGeoCodeResponse. (The class is courtesy of my JSON response reverse engineering, not Google, just in case you permaturely blame google in case it contains an error.)
Quandary
Thanks Quandary. I will use jquery getJSon and try to parse the result.