Neste artigo, vou recordar como usar o Google Maps em aplicações VB .NET interagindo como controle WebBrowser.
No exemplo do artigo, vamos exibir um mapa a partir de um endereço informado e também a partir da longitude e latitude informada.
Para exibir o mapa, não vamos precisar usar qualquer licença do Google, nem invocar alguma API para obter o resultado. Vamos apenas usar a url de consulta do Google: “http://maps.google.com/maps?q=” e exibir o resultado no controle WebBrowser.
Fazendo isso, ao executar o projeto, iremos obter uma mensagem indicando que o Navegador é incompatível e não pode ser usado:
Isso ocorre por que o controle WebBrowser por padrão emula o Internet Explorer 7, que é um navegador muito antigo para suportar o Google Maps.
Então, temos que forçar o WebBrowser a emular outra versão do IE – mas isso só pode ser feito via alteração do registro do sistema. Na verdade, a configuração que se deve alterar no registro depende do programa que você está executando e a alteração tem que ser feita apenas para este programa.
Para contornar o problema, criamos uma rotina que verifica a versão instalada e faz a alteração no registro do sistema.
Recursos usados: Visual Studio 2015 Community
Criando o projeto no VS Community 2015
Abra o VS Community 2015 e clique em New Project e selecione a linguagem Visual Basic e o template Windows Forms Application. Informe o nome VBNET_Tasks e clique no botão OK.
No formulário form1.vb inclua os seguintes controles:
- 6 Labels
- 6 TextBox : txtRua, txtCidade, txtEstado, txtCep, txtLatitude e txtLongitude
- 2 Button – btnMapaEndereco, btnMapaCoordenadas
- 1 WebBrowser – webb1
Disponha os controles no formulário conforme o leiaute da figura abaixo:
A seguir, no evento Click do botão de comando: Mapa/Endereço – inclua o código abaixo:
Private Sub btnMapaEndereco_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles btnMapaEndereco.Click
If VerificaNavegador() Then
Try
Dim rua As String = String.Empty
Dim cidade As String = String.Empty
Dim estado As String = String.Empty
Dim cep As String = String.Empty
Dim consultaEndereco As New StringBuilder()
consultaEndereco.Append("http://maps.google.com/maps?q=")
' monta a rua como parte da consulta
If txtRua.Text <> String.Empty Then
rua = txtRua.Text.Replace(" ", "+")
consultaEndereco.Append(rua + "," & "+")
End If
' monta a cidade como parte da consulta
If txtCidade.Text <> String.Empty Then
cidade = txtCidade.Text.Replace(" ", "+")
consultaEndereco.Append(cidade + "," & "+")
End If
' monta o estado como parte da consulta
If txtEstado.Text <> String.Empty Then
estado = txtEstado.Text.Replace(" ", "+")
consultaEndereco.Append(estado + "," & "+")
End If
' monta o cep como parte da consulta
If txtCep.Text <> String.Empty Then
cep = txtCep.Text.ToString()
consultaEndereco.Append(cep)
End If
' passa a url com a query string para o controle webbrowser
webb1.Navigate(consultaEndereco.ToString())
Catch ex As Exception
MessageBox.Show(ex.Message.ToString(), "Não foi possível obter o Mapa")
End Try
Else
MessageBox.Show("O Naveador usado é Incompatível", "Aviso")
End If
End Sub
Neste código estamos chamando a rotina VerificarNavegador() que irá verificar a versão do IE instalado e irá fazer a alteração no registro para que o WebBrowser possa renderizar as informações com a versão atualizada.
A seguir, no evento Click do botão de comando – Mapa – Coordenadas – inclua o código abaixo:
Private Sub btnMapaCoordenadas_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles btnMapaCoordenadas.Click
If VerificaNavegador() Then
If txtLatitude.Text = String.Empty Or txtLongitude.Text = String.Empty Then
MessageBox.Show("Forneça os valores para a latitude e a longitude.", "Dados inválidos")
End If
Try
Dim lat As String = String.Empty
Dim lon As String = String.Empty
Dim consultaEndereco As New StringBuilder()
consultaEndereco.Append("http://maps.google.com/maps?q=")
' toma a latitude como parte da consulta
If txtLatitude.Text <> String.Empty Then
lat = txtLatitude.Text
consultaEndereco.Append(lat + "%2C")
End If
' toma a longitude como parte da consulta
If txtLongitude.Text <> String.Empty Then
lon = txtLongitude.Text
consultaEndereco.Append(lon)
End If
webb1.Navigate(consultaEndereco.ToString())
Catch ex As Exception
MessageBox.Show(ex.Message.ToString(), "Error")
End Try
Else
MessageBox.Show("O Naveador usado é Incompatível", "Aviso")
End If
End Sub
Agora vamos definir o código do método VerificaNavegador() que obtém a versão do IE instalada e verifica o registro:
Private Function VerificaNavegador() As Boolean
Dim versaoNavegador As Integer, RegVal As Integer
Try
' obtem a versão instalada do IE
Using Wb As New WebBrowser()
versaoNavegador = Wb.Version.Major
End Using
' define a versão do IE
If versaoNavegador >= 11 Then
RegVal = 11001
ElseIf versaoNavegador = 10 Then
RegVal = 10001
ElseIf versaoNavegador = 9 Then
RegVal = 9999
ElseIf versaoNavegador = 8 Then
RegVal = 8888
Else
RegVal = 7000
End If
' define a chave atual
Dim Key As RegistryKey = Registry.CurrentUser.OpenSubKey("SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION", True)
Key.SetValue(System.Diagnostics.Process.GetCurrentProcess().ProcessName + ".exe", RegVal, RegistryValueKind.DWord)
Key.Close()
Return True
Catch ex As Exception
Return False
End Try
End Function
Como o aplicativo é baseado inteiramente no Google Maps, como um bônus adicional, o site do Google Maps fornece todos os controles de manipulação de visualização necessários para navegar no mapa.
Assim, sem esforço adicional, você obtém recursos como zoom, mapas de tráfego, mapas de ruas, imagens de varredura e mapas híbridos. Podemos também obter um mapa de visão geral, a capacidade de imprimir o mapa, e-mail, ou link para ele sem custo adicional.
Também é possível remover a interface e alimentar endereços específicos ou coordenadas diretamente para o código equivalente e acessar mapas específicos diretamente através de um controle de navegador da web.
Executando o projeto iremos obter o seguinte resultado:


Pegue o projeto completo aqui: VB_Maps.zip






