.NET - Localizando um computador via System.Device.Location


Como você faria para localizar fisicamente a posição de um computador ?

Encontrar a localização física de um computador nunca foi tão fácil como agora graças aos recursos do novo namespace System.Device.Location da versão 4.0 da plataforma .NET.

Podemos agora acessar facilmente as informações de um computador local que pode vir de diversos provedores como GPS, Wi-Fi e celular. As classes do namespace System.Device.Location fornecem uma API para encapsular os múltiplos fornecedores locais em um computador e dar suporte a priorização perfeita e fazer a transição entre eles.

Usando esta API, você não precisa saber quais tecnologias de localização estão disponíveis no computador de destino de forma que você fica livre do ônus de ter que customizar sua aplicação a uma configuração para um hardware específico.

A seguir temos algumas classes do namespace System.Device.Location:

A classe GeoCoordinateWatcher fornece os dados da localização que esta baseado nas coordenadas de latitude e longitude. Os tipos CivicAddressResolver e ICivicAddressResolver fornecem a habilidade de resolver a partir de uma coordenada de localização para um endereço. Além disso a interface  IGeoPositionWatcher(Of T) pode ser implementada para estender os tipos de dados de localização que são fornecidos.

No Windows 7, todas as classes do namespace System.Device.Location são totalmente funcionais, se um provedor de localização estiver instalado e puder determinar a localização do computador. No Windows 7 Starter Edition, o provedor local padrão que pode ser definido no painel de controle é o provedor único local que é suportado.

Na figura abaixo vemos a janela de localização padrão do Windows 7:

A seguir temos um exemplo bem simples de como usar a API Location em uma aplicação Console usando a linguagem VB .NET:

Abra o Visual Basic 2010 Express Edition e crie uma nova aplicação do tipo Console Application com o nome UsandoAPILocation:

No menu Project clique em Add Reference e a seguir na janela Add Reference clique na guia .NET e selecione System.Device e clique no botão OK;

Digite o código abaixo no módulo Module1.vb da aplicação:

Imports System
Imports System.Device.Location
Module Module1
    Sub Main()
        ResolverEnderecoSync()
        Console.ReadKey()
    End Sub
    Private Sub ResolverEnderecoSync()
        Dim observador As New GeoCoordinateWatcher(GeoPositionAccuracy.High)
        observador.MovementThreshold = 1.0
        observador.TryStart(False, TimeSpan.FromMilliseconds(1000))
        Dim resolver As New CivicAddressResolver()
        If observador.Position.Location.IsUnknown = False Then
            Dim address As CivicAddress = resolver.ResolveAddress(observador.Position.Location)
            If Not address.IsUnknown Then
                Console.WriteLine("Pais: {0}, Cep: {1}", address.CountryRegion, address.PostalCode)
            Else
                Console.WriteLine("Endereco desconhecido.")
            End If
        Else
            Console.WriteLine("Não foi possível obter dados de localização.")
        End If
    End Sub
End Module

 

Ao executar  a aplicação em uma máquina desktop local será apresentada a seguinte tela solicitando para digitar a localização padrão agora ou depois:

Para executar com sucesso exibindo sua localização você deve ter um sensor de localização instalado na máquina do cliente.

Pegue o projeto completo aqui: UsandoAPILocation.zip

Slm 130:1 Das profundezas clamo a ti, ó Senhor.

Slm 130:2 Senhor, escuta a minha voz; estejam os teus ouvidos atentos à voz das minhas súplicas.

Slm 130:3 Se tu, Senhor, observares as iniqüidades, Senhor, quem subsistirá?

Slm 130:4 Mas contigo está o perdão, para que sejas temido.

Slm 130:5 Aguardo ao Senhor; a minha alma o aguarda, e espero na sua palavra.

Slm 130:6 A minha alma anseia pelo Senhor, mais do que os guardas pelo romper da manhã, sim, mais do que os guardas pela manhã.

Slm 130:7 Espera, ó Israel, no Senhor! pois com o Senhor há benignidade, e com ele há copiosa redenção;

Slm 130:8 e ele remirá a Israel de todas as suas iniqüidades.


José Carlos Macoratti