Cuando haces una aplicación para publicarla en la tienda de aplicaciones de Windows Phone deseas que pueda tener una gran cantidad de descargas ¿No es así? Bueno, entonces el primero de los los pasos que debes tomar es hacer que tu aplicación sea accesible a más idiomas que el tuyo propio, esto lo puede hacer por medio de la localización de la cual hablo en este artículo. El punto central de este post es cuando dejas un idioma que conoces (el tuyo) y empiezas a trabajar con uno diferente y con diferentes factores como la muy simple diferencia entre un punto y una coma para separar números decimales. Por ejemplo.
En español el dispositivo trabaja así.
Lat: 19.4148
Long: –99.0722
En inglés el dispositivo desplegará.
Lat: 19,4148
Long: –99,0722
El problema viene cuando las coordenadas geográficas son convertidas pues podrás toparte con un resultado como el siguiente.
Y esto es debido a que el valor de una coordenada escapa de los rangos permitidos.
Para la latitud, sus valores no permiten un número que escape del rango –90.0 a 90.0 debido a sus naturales condiciones como lo puedes ver en la siguiente imagen.
Y para la longitud, sus valores deben oscilar entre –180.0 y 180.0 como se muestra en la imagen.
Sabiendo esto y para evitar cualquier problema, lo único que debes hacer es crear un helper que te pueda hacer la tarea de verificar que estos valores se encuentren dentro de este rango. Para la longitud haremos lo siguiente.
public static double VerificarValorLatitud(string valorLatitudRecibido) { double numeroRecibido = Convert.ToDouble(valorLatitudRecibido); if (numeroRecibido > 90 || numeroRecibido < -90) { double valorConvertido = numeroRecibido / 10000; return valorConvertido; } else { return numeroRecibido; } } |
El método debe ser público y estático para poder accederlo de manera inmediata en cualquier momento. El parámetro que recibe lo coloqué como string asumiendo que puede ser leído de una fuente de datos, quizá puede hacerlo como entero, eso depende de como te acomode más. En este caso que el valor es un entero entonces realiza la conversión a doble y es aquí en donde podrás ver el tipo de valor recibido.
Gracias a la condición podrás verificar que ese número no escape del rango permitido y en caso de hacerlo simplemente lo dividirá entre 10,000 (asumiendo claro que estás trabajando con cuatro valores decimales que es la cantidad adecuada para hacerlo en coordenadas geográficas). En cualquiera de los dos casos podrá regresar un valor admisible.
Para el método de la longitud solo es necesario cambiar el intervalo de valores.
public static double VerificarValorLongitud(string valorLongitudRecibido) { double numeroRecibido = Convert.ToDouble(valorLongitudRecibido); if (numeroRecibido > 180 || numeroRecibido < -180) { double valorConvertido = numeroRecibido / 10000; return valorConvertido; } else { return numeroRecibido; } } |
Ya que cuentas con estos métodos listos solo es cuestión de que invoques estas operaciones al momento de trabajar con coordenadas.
Location ubicacion = new Location(); ubicacion.Latitude = VerificadorNumeros.VerificarValorLatitud(cadenaLatitud); ubicacion.Longitude = VerificadorNumeros.VerificarValorLongitud(cadenaLongitud); master.mapa.Center = ubicacion; master.mapa.ZoomLevel = 14; |
Si deseas descargar la clase y un ensamblado que te haga la vida más sencilla, puedes hacerlo aquí.