sistema hacer google geolocalizacion ejemplos datos con bases c# html5 geolocation w3c-geolocation

c# - google - hacer geolocalizacion



¿Cómo puedo usar la geolocalización HTML5 en la aplicación C#? (4)

Confiar en un navegador oculto es una solución arriesgada e, inevitablemente, se romperá en algún momento en el futuro.

En su lugar, desea integrar la funcionalidad de geolocalización en su propia aplicación. Las dos fuentes principales de información de ubicación son su dirección IP (que luego alimenta a cualquiera de los proveedores de GeoIP ) y las estaciones móviles / Wi-Fi visibles (que alimenta a la API de geolocalización de Google ).

Estoy desarrollando un software antirrobo para obtener la ubicación exacta de las computadoras. Los portátiles con gps incorporado son muy raros en mi país, por lo que tengo que usar HTML5 Geolocation en mi aplicación.

Para Internet Explorer 9+, hay una clave de registro que puede agregar urls para permitir un url sin necesidad de verificación del usuario. Si agrega un valor REG_DWORD llamado domain.com en HKCU/Software/Microsoft/Internet Explorer/Geolocation/HostConsent , el navegador de ruta permitirá la solicitud de geolocalización automáticamente. Sin embargo, no puedo ejecutar Internet Explorer oculto, así que eso no funciona para mí ya que el ladrón no debería darse cuenta y ver qué está pasando.

  • Necesito ejecutar Internet Explorer oculto de alguna manera
  • ... o necesito incrustar webkit o algo en mi aplicación pero no sé cómo puedo usarlo o cómo puedo permitir esta solicitud mediante programación.

Prefiero la segunda forma porque ahora Internet Explorer termina con Microsoft y creo que la próxima versión tendrá una estructura diferente.

¿Cómo puedo incrustar y usar Webkit o GeckoFX en mi aplicación? ¿Cómo puedo permitir una solicitud de geolocalización programáticamente en esta aplicación?


Eche un vistazo a la clase GeoCoordinateWatcher que está definida en el ensamblado System.Device

La clase GeoCoordinateWatcher proporciona datos de ubicación basados ​​en coordenadas del proveedor de ubicación actual. La prioridad del proveedor de ubicación actual es la más alta en la computadora, en función de una serie de factores, como la antigüedad y la precisión de los datos de todos los proveedores, la precisión solicitada por las aplicaciones de ubicación y el consumo de energía y el impacto en el rendimiento asociado con el proveedor de localización. El proveedor de ubicación actual puede cambiar con el tiempo, por ejemplo, cuando un dispositivo GPS pierde su señal satelital en interiores y un proveedor de triangulación de Wi-Fi se convierte en el proveedor más preciso de la computadora.

Ejemplo de uso:

static void Main(string[] args) { GeoCoordinateWatcher watcher = new GeoCoordinateWatcher(); watcher.StatusChanged += (sender, e) => { Console.WriteLine("new Status : {0}", e.Status); }; watcher.PositionChanged += (sender, e) => { Console.WriteLine("position changed. Location : {0}, Timestamp : {1}", e.Position.Location, e.Position.Timestamp); }; if(!watcher.TryStart(false, TimeSpan.FromMilliseconds(5000))) { throw new Exception("Can''t access location"); } Console.ReadLine(); }

Creo que esta clase se basa en el mismo mecanismo que el que utiliza Internet Explorer.

Cuando lo use, tendrá un icono en la bandeja de notificaciones del sistema que le indicará que recientemente se ha accedido a esa ubicación.

También tendrá una entrada agregada en los registros de Windows.


Puede integrar un navegador webkit en su aplicación utilizando PhantomJS . PhantomJS es un navegador sin cabeza y se puede agregar a su aplicación a través de la búsqueda en NuGet o en la línea de comando de NuGet PM> Install-Package PhantomJS . Una vez que PhantomJS se haya agregado a su proyecto, querrá crear un archivo para controlar el fantasma algo como:

public string PhantomJson(string phantomControlFile, params string[] arguments) { string returnJsonString = String.Empty; if (!String.IsNullOrEmpty(URL)) { ProcessStartInfo startInfo = new ProcessStartInfo { CreateNoWindow = true, RedirectStandardError = true, RedirectStandardOutput = true, FileName = Path.Combine(PhantomExecutionPath, "phantomjs.exe"), UseShellExecute = false, WorkingDirectory = PhantomExecutionPath, Arguments = @"--proxy-type=none --ignore-ssl-errors=true {1} ""{0}"" {2}".FormatWith(URL, phantomControlFile, arguments.Any() ? String.Join(" ", arguments) : String.Empty) }; StringBuilder receivedData = new StringBuilder(); using (Process p = Process.Start(startInfo)) { p.OutputDataReceived += (o, e) => { if (e.Data != null && e.Data != "failed") { //returnJsonString = e.Data; receivedData.AppendLine(e.Data); } }; p.BeginOutputReadLine(); p.WaitForExit(); } returnJsonString = receivedData.ToString(); if (!String.IsNullOrEmpty(returnJsonString)) { return returnJsonString; } else { throw new ArgumentNullException("Value returned null. Unable to retrieve data from server"); } } else { throw new ArgumentNullException("Url cannot be null"); } }

Entonces querrás construir un archivo de control para decirle a los phantomjs a dónde ir; algo como:

var args, myurl, page, phantomExit, renderPage, system; system = require("system"); args = system.args; page = null; myurl = args[1]; phantomExit = function(exitCode) { // this is needed as there are time out issues when it tries to exit. if (page) { page.close(); } return setTimeout(function() { return phantom.exit(exitCode); }, 0); }; renderPage = function(url) { page = require("webpage").create(); return page.open(url, function(status) { if (status === ''success'') { // Process Page and console.log out the values return phatomExit(0); } else { console.log("failed"); return phantomExit(1); } }); }; renderPage(myurl);


Si está implementando una versión moderna de Windows, puede usar la biblioteca nativa de .NET System.Device.Location que le permite obtener información sobre la ubicación del dispositivo.

Aquí hay un enlace en MSDN sobre cómo usarlo GeoCoordinate Class

Si usa XAML, también puede probar este método. Detectar la ubicación de los usuarios usando XAML