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