UNTRM – Perú
miércoles, 27 de noviembre de 2013
La introducción de la tecnología en el aula
UNTRM – Perú
lunes, 16 de septiembre de 2013
Sistemas UNTRM: Pasos para el registro en aula virtual
Ing. Abraham Sopla Maslucán
Universidad Nacional TRM – Perú.
Esta guía esta elaborada para los estudiantes de Ingeniería de Sistemas UNTRM, 2013-II. En cuatro pasos ustedes podrán registrarse en el aula virtual de Sistemas UNTRM.
1. Entrando al aula virtual aquí
2. Complete los datos correctamente (no se olvide de apuntar su usuario y clave)
3. Finamente usted obtendrá un mensaje similar
4. Listo, espere la confirmación del profesor para poder hacer uso del aula virtual. Recuerde!!!, apuntar su clave.
miércoles, 17 de julio de 2013
Aplicación móvil para una tienda en cambio
Ing. Abraham Sopla Maslucán
Lima – Perú
Problema
Se requiere usar un web service para crear una aplicación móvil para Android que permita calcular el valor de un monto de dinero dado en cierto tipo de moneda a otro tipo de moneda.
Solución
La solución nos exige el un servicio web, para que los valores de cambio sean totalmente actualizados en el momento que se desea hacer el cambio. Por eso usaremos la información de la siguiente ruta: http://www.webservicex.net/ws/WSDetails.aspx?CATID=2&WSID=10, se subrayan los parámetros que se usaran en la aplicación.
Al invocar el servicio se recibe, en este caso específico, el tipo de cambio de un dólar en soles.
<double xmlns="http://www.webserviceX.NET/">2.7645</double>
Creación del proyecto
Crear un nuevo proyecto con las especificaciones de la siguiente tabla, use el SDK 3.0 como mínimo:
Application Name | Cambio |
Project Name | Cambio |
Package Name | com.soplaingenieros.cambio |
Una actividad en blanco con las siguientes especificaciones:
Activity Name | MainActivity |
Layout Name | activity_main |
Navigation Type | none |
Actividad
activity_main.xml
En el layout de la actividad 1 (activity_actividad1) agregue los widgets para construir la siguiente interfaz:
Nombre los controles: La estructura de la Outline y los nombres de los controles es la siguiente:
Librerías adicionales
· Ksoap2
Agregando el permiso para usuarios de internet
Esto se realiza en el Android Manifest
Programación
MainActivity.java
package com.soplaingenieros.cambio;
import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.PropertyInfo;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapPrimitive;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
import android.os.Bundle;
import android.os.StrictMode;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity {
private static final String SOAP_ACTION = "http://www.webserviceX.NET/ConversionRate";
private static final String NAME_SPACE = "http://www.webserviceX.NET/";
private static final String URL = "http://www.webservicex.net/CurrencyConvertor.asmx";
private static final String METHOD_NAME = "ConversionRate";
// Controles
private EditText etImporte;
private EditText etDe;
private EditText etA;
private TextView tvResultado;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Si se trata de Android versión 3 o superior
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()
.permitAll().build();
StrictMode.setThreadPolicy(policy);
// Controles
etImporte = (EditText) findViewById(R.id.ccEtImporte);
etDe = (EditText) findViewById(R.id.ccEtDe);
etA = (EditText) findViewById(R.id.ccEtA);
}
public void onClickConsultar(View view) {
try {
// Datos
// String cant = etImporte.getText().toString();
String de = etDe.getText().toString();
String a = etA.getText().toString();
// Objeto SOAP
SoapObject request = new SoapObject(NAME_SPACE, METHOD_NAME);
// Propiedad DE
PropertyInfo propDe = new PropertyInfo();
propDe.setName("FromCurrency");
propDe.setValue(de);
request.addProperty(propDe);
// Propiedad A
PropertyInfo propA = new PropertyInfo();
propA.setName("ToCurrency");
propA.setValue(a);
request.addProperty(propA);
// Ejecución
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.setOutputSoapObject(request);
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
androidHttpTransport.call(SOAP_ACTION, envelope);
SoapPrimitive response = (SoapPrimitive) envelope.getResponse();
// Obtener respuesta
Double importe = Double.valueOf(etImporte.getText().toString());
Double resultado = Double.valueOf(response.toString()) * importe;
tvResultado = (TextView) findViewById(R.id.ccTvRespuesta);
tvResultado.setText(String.valueOf(resultado));
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(getApplicationContext(), e.getMessage(),
Toast.LENGTH_LONG).show();
}
}
}
Pruebas y resultados
En este caso se hacen dos pruebas de la aplicación, primero, pasamos 56800 dólares americanos a soles, siendo el resultado 156681.6. En el segundo caso, pasamos 38890 soles a euros. Convierta usted 270 dólares americanos a euros. Aquí te mostramos algunas tipos de monedas con las que podría probar en la aplicación móvil, use las letras en mayúsculas antes del símbolo “-”, por ejemplo PEN, EUR, XPT.
XPF-Pacific Franc
PKR-Pakistani Rupee
XPD-Palladium Ounces
PAB-Panama Balboa
PGK-Papua New Guinea Kina
PYG-Paraguayan Guarani
PEN-Peruvian Nuevo Sol
PHP-Philippine Peso
XPT-Platinum Ounces
martes, 16 de julio de 2013
Aplicación móvil Android para calcular áreas y medir distancias.
El GPS del celular nos permite capturar las coordenadas geográficas en grados decimales. Con esto podemos hacer muchísimas aplicaciones de múltiples usos orientadas al turismo, industria e ingeniería. Por ejemplo, algo que ayude a medir las distancias entre puntos, calcular áreas, trabajar con altitudes. La funcionalidad del GPS en los smartphones es muy usada hoy en día, para simular la realidad aumentada en aplicaciones móviles. En este proyecto, se desarrolla una aplicación móvil para colectar puntos geográficos en una base de datos SQlite, para el cálculo de las distancias se tiene en cuenta la fórmula de Harveshine. Usamos los semiejes del elipsoide Hayford y las ecuaciones de Coticchia-Surace para convertir los coordenados decimales a UTM, con ello calculamos las áreas dado una serie de puntos capturados por el smartphone.
Funcionalidades de la aplicación
· Convierte una coordenada decimal capturada por el GPS del Smartphone a UTM
· Calcula la distancia entre dos puntos capturados por el celular
· Calcula el área dado n puntos (lógicamente, n>=3)
sábado, 13 de julio de 2013
Cálculo de distancia entre dos coordenadas decimales y conversión de coordenada decimal a UTM
La clase calculoUTM tiene los métodos UtmX y UtmY para convertir coordenadas geográficas a UTM, se usa los semiejes del elipsoide Hayford y las ecuaciones de Coticchia-Surace. Por otro lado, la clase calculoDistancia tiene el método Distancia para calcular la distancia entre dos coordenadas decimales, en este caso se usa la ecuación de Harvesine.
principalUTM.java
public class principalUtm {
public static void main(String[] args) {
//Coordenda decimal, casa Santa Apolonia
double La1 = -12.003093;
double Lo1 = -77.094313;
// Coordenada decimal, punto final
double La2 = -11.99096965;
double Lo2 = -77.06366275;
calculoUtm oCalculo = new calculoUtm();
System.out.println("UtmX: "+oCalculo.UtmX(Lo1, La1));
System.out.println("UtmY: "+oCalculo.UtmY(Lo1, La1));
System.out.println("Distancia: "+calculoDistancia.Distancia(La1, Lo1, La2, Lo2));
}
}
calculoUTM.java
public class calculoUtm {
// Semiejes del elipsoide de Hayford
double A = 6378388;
double B = 6356911.946130;
double E = Math.sqrt(Math.pow(A, 2) - Math.pow(B, 2)) / A;
double E1 = Math.sqrt(Math.pow(A, 2) - Math.pow(B, 2)) / B;
double E2 = Math.pow(E1, 2);
double C = Math.pow(A, 2) / B;
public double UtmX(double Lo1, double La1) {
// COnversiones
double Lat = La1 * Math.PI / 180;
double Lon = Lo1 * Math.PI / 180;
double Huso = Math.floor((Lo1 / 6) + 31);
double Lamda = (Huso * 6 - 183) * Math.PI / 180;
double dLamda = Lon - Lamda;
// Calculo de parametros
double AA = Math.cos(Lat) * Math.sin(dLamda);
double EE = 0.5 * Math.log((1 + AA) / (1 - AA));
double feUTM=0.996;
double VV = Math.pow(Math.cos(Lat), 2);
VV = Math.sqrt(1 + E2 * VV);
VV = (C / VV) * feUTM; // 0.9996 factor de escala de la proyeccion UTM
double CC = (E2 / 2) * Math.pow(EE, 2) * Math.pow(Math.cos(Lat), 2);
//Cálculo de X
double X = EE * VV * (1 + CC / 3) + 500000;
return X;
}
public double UtmY(double Lo1, double La1) {
// COnversiones
double Lat = La1 * Math.PI / 180;
double Lon = Lo1 * Math.PI / 180;
double Huso = Math.floor((Lo1 / 6) + 31);
double Lamda = (Huso * 6 - 183) * Math.PI / 180;
double dLamda = Lon - Lamda;
// Calculo de parámetros
double AA = Math.cos(Lat) * Math.sin(dLamda);
double EE = 0.5 * Math.log((1 + AA) / (1 - AA));
double NN = Math.atan(Math.tan(Lat) / Math.cos(dLamda));
NN = NN - Lat;
double VV = Math.pow(Math.cos(Lat), 2);
VV = Math.sqrt(1 + E2 * VV);
double feUTM=0.996;
VV = (C / VV) * feUTM; // 0.9996 factor de escala de la proyeccion UTM
double CC = (E2 / 2) * Math.pow(EE, 2) * Math.pow(Math.cos(Lat), 2);
double A1 = Math.sin(2 * Lat);
double A2 = A1 * Math.pow(Math.cos(Lat), 2);
// Otros cálculos
double J2 = Lat + A1 / 2;
double J4 = (3 * J2 + A2) / 4;
double J6 = (5 * J4 + A2 * Math.pow(Math.cos(Lat), 2)) / 3;
double alfa = ((double) 3 / 4) * E2;
double beta = ((double) 5 / 3) * Math.pow(alfa, 2);
double ganma = ((double) 35 / 27) * Math.pow(alfa, 3);
double Bo = 0.9996 * C * (Lat - alfa * J2 + beta * J4 - ganma * J6);
// Cálculo final de coordenadas UTM
double Y = NN * VV * (1 + CC) + Bo;
if (La1 < 0) {
Y = Y + 10000000;
}
return Y;
}
}
calculoDistancia.java
public class calculoDistancia {
public static double Distancia(double La1, double Lo1, double La2, double Lo2) {
double Distancia = 0, Distancia1 = 0;
double r = 6378;
//Punto inicial
La1 = La1* Math.PI / 180;
Lo1 = Lo1 * Math.PI / 180;
// Punto final
La2 = La2 * Math.PI / 180;
Lo2 = Lo2 * Math.PI / 180;
//Distancia = 6378*Math.acos(Math.sin(La1)*Math.sin(La2)+ Math.cos(La1)* Math.cos(La2)*Math.cos(Lo1 - Lo2));
Distancia1 = Math.pow(Math.sin((Lo2 - Lo1) / 2), 2);
Distancia1 = Math.cos(La1) * Math.cos(La2) * Distancia1;
Distancia1 = Math.pow(Math.sin((La2 - La1) / 2), 2) + Distancia1;
Distancia1 = Math.sqrt(Distancia1);
Distancia1 = 2 * r * Math.asin(Distancia1);
return Distancia1;
}
}