utilización de coordenadas espaciales para establecer la...

12
Guía N° 2 Universidad de El Salvador 2012 Página 1 Utilización de coordenadas espaciales para establecer la geo- localización de un POI Responsable Ing. César Augusto González Rodríguez Colaboradores Bryan Josué Rodríguez Parada Alexandra María Cañas Tovar José Antonio Sánchez Delgado Luis Alejandro González Taller Sistema de geo localización de espacios físicos de la FIA Requisitos de los participantes Conocimientos básicos de JAVA y XML. Preferiblemente un móvil (smartphone) con gps, Sistema operativo Android 2.2 o superior. Duración del taller 2 horas Universidad de El Salvador Facultad de Ingeniería y Arquitectura Escuela de Ingeniería en Sistemas Programación en Dispositivos Móviles

Upload: others

Post on 02-Nov-2020

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Utilización de coordenadas espaciales para establecer la ...aula.fia.ues.edu.sv/materialpublico/compdes2012/Guia_2_Final.pdf · Guía N° 2 Universidad de El Salvador 2012 Página

Guía N° 2 Universidad de El Salvador

2012 Página 1

Utilización de coordenadas espaciales para establecer la geo-

localización de un POI

Responsable

Ing. César Augusto González Rodríguez

Colaboradores

Bryan Josué Rodríguez Parada Alexandra María Cañas Tovar José Antonio Sánchez Delgado Luis Alejandro González

Taller

Sistema de geo localización de espacios físicos de la FIA

Requisitos de los participantes

Conocimientos básicos de JAVA y XML.

Preferiblemente un móvil (smartphone) con gps, Sistema operativo Android 2.2 o superior.

Duración del taller 2 horas

Universidad de El Salvador

Facultad de Ingeniería y Arquitectura

Escuela de Ingeniería en Sistemas

Programación en Dispositivos Móviles

Page 2: Utilización de coordenadas espaciales para establecer la ...aula.fia.ues.edu.sv/materialpublico/compdes2012/Guia_2_Final.pdf · Guía N° 2 Universidad de El Salvador 2012 Página

Guía N° 2 Universidad de El Salvador

2012 Página 2

Comienzo del taller

En la sesión anterior realizamos la activity que permitía capturar una foto y al mismo tiempo

recuperarla a la activity principal. Por lo cual ahora desarrollaremos la activity que permita

extraer las coordenadas georeferenciales de un POI (Punto de Interés Especifico) y permita

mandarlas al servidor asignado. Por lo cual debemos acoplar al proyecto el siguiente código.

a) Visualización del XML

La interfaz de tu Activity se vera de la siguiente manera:

b) Complementar la Activity SendImageActivity

Luego pasaremos a complementar la activity SendImageActivity, añadiendo el código que se

presente a continuación al código que ya se tenía dentro de dicha Activity, según como se

indique:

Dentro de la clase, usted observara ciertos comentarios en donde se indica que deberá

agregar cierto código que se coloca correlativamente como código uno, código dos, código

tres, etc.

Page 3: Utilización de coordenadas espaciales para establecer la ...aula.fia.ues.edu.sv/materialpublico/compdes2012/Guia_2_Final.pdf · Guía N° 2 Universidad de El Salvador 2012 Página

Guía N° 2 Universidad de El Salvador

2012 Página 3

1. Código uno: Agregar las librerías iniciales

import java.util.ArrayList;

import java.util.List

import com.gtworldmobile.classes.Uploader;

import android.app.ProgressDialog;

import android.content.Context;

import android.content.SharedPreferences;

import android.location.Address;

import android.location.Geocoder;

import android.location.Location;

import android.location.LocationListener;

import android.location.LocationManager;

import android.os.AsyncTask;

import android.widget.ArrayAdapter;

import android.widget.Spinner;

import android.widget.TextView;

import android.widget.CheckBox;

import android.widget.EditText;

2. Código 2: URL conexión con el servidor y creación de variables

private String URL = "";

private static String CREARPOI_SERVICES="GTWorld/CrearPoi";

public String ip_cargada= "";

String nombrePref = "preferencias";

List<String> parametros;

Button guardar;

Button obtenerDir;

Spinner tipo_poi;

TextView dirPath;

CheckBox checkbox_poi;

EditText nombre_poi;

EditText descripcion_poi;

EditText latitud_poi;

EditText longitud_poi;

EditText altitud_poi;

EditText url_poi;

TextView direccion_poi;

LocationManager locationManager;

private ProgressDialog progress;

private Activity crearPoi;

Uploader ups;

Page 4: Utilización de coordenadas espaciales para establecer la ...aula.fia.ues.edu.sv/materialpublico/compdes2012/Guia_2_Final.pdf · Guía N° 2 Universidad de El Salvador 2012 Página

Guía N° 2 Universidad de El Salvador

2012 Página 4

3. Código 3: Obtención desde el SharedPreferences la ip utilizada para conexión

SharedPreferences prefs =

getSharedPreferences("preferencias",Context.MODE_PRIVATE);

ip_cargada= prefs.getString("ip", "");

URL=ip_cargada.concat(CREARPOI_SERVICES);

4. Código 4: Agregar el servicio de localización y uso de los componentes

crearPoi = this; locationManager = (LocationManager) this .getSystemService(Context.LOCATION_SERVICE); guardar = (Button) findViewById(R.id.boton_guardar_poi); obtenerDir = (Button) findViewById(R.id.obtener_dir); tipo_poi = (Spinner) findViewById(R.id.tipoPoi); nombre_poi = (EditText) findViewById(R.id.nombre_poi); url_poi = (EditText) findViewById(R.id.url_poi); descripcion_poi = (EditText) findViewById(R.id.descripcion_poi); checkbox_poi = (CheckBox) findViewById(R.id.checkbox_poi); latitud_poi = (EditText) findViewById(R.id.latitud_poi); longitud_poi = (EditText) findViewById(R.id.longitud_poi); altitud_poi = (EditText) findViewById(R.id.altitud_poi); direccion_poi = (TextView) findViewById(R.id.direccion_poi); ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource( this, R.array.tipo_pois, android.R.layout.simple_spinner_item); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); tipo_poi.setAdapter(adapter); obtenerDir.setOnClickListener(onClickGenerico); guardar.setOnClickListener(onClickGenerico);

5. Código 5: Colocar la funcionalidad a los botones

Page 5: Utilización de coordenadas espaciales para establecer la ...aula.fia.ues.edu.sv/materialpublico/compdes2012/Guia_2_Final.pdf · Guía N° 2 Universidad de El Salvador 2012 Página

Guía N° 2 Universidad de El Salvador

2012 Página 5

if (v.getId()==R.id.obtener_dir){

//Si el click lo dio el boton de guardar

poi....ejecutamos este codigo

Geocoder g = new Geocoder(getApplicationContext());

List<Address> ad = null;

try {

ad = g.getFromLocation(

Double.valueOf(latitud_poi.getText().toString()),

Double.valueOf(longitud_poi.getText().toString()), 1);

} catch (Exception e) {

e.printStackTrace();

}

if (ad != null && ad.isEmpty() == false) {

direccion_poi.setText(ad.get(0).getThoroughfare() +

","

+ ad.get(0).getSubAdminArea() + ","

+ ad.get(0).getCountryName());

}

//hasta aqui el codigo del clic a la obtencion de

direccion

}

if (v.getId()==R.id.boton_guardar_poi){

parametros = new ArrayList<String>();

// ----- VALIDAR CAMPOS----------------------------------

----

boolean valido = true;

if (nombre_poi.getText().toString().length() > 1)

parametros.add(nombre_poi.getText().toString());

else

valido = false;

parametros.add(descripcion_poi.getText().toString());

if (checkbox_poi.isChecked())

parametros.add("1");

else

parametros.add("0");

parametros.add(url_poi.getText().toString());

if (latitud_poi.getText().toString().length() > 0)

parametros.add(latitud_poi.getText().toString());

else

valido = false;

if (longitud_poi.getText().toString().length() > 0)

parametros.add(longitud_poi.getText().toString());

else

valido = false;

if (altitud_poi.getText().toString().length() > 0)

parametros.add(altitud_poi.getText().toString());

else

valido = false;

Page 6: Utilización de coordenadas espaciales para establecer la ...aula.fia.ues.edu.sv/materialpublico/compdes2012/Guia_2_Final.pdf · Guía N° 2 Universidad de El Salvador 2012 Página

Guía N° 2 Universidad de El Salvador

2012 Página 6

// Obtener idUser de shared preferences

SharedPreferences prefs =

getSharedPreferences(nombrePref,

MODE_PRIVATE);

parametros.add(prefs.getString("id", ""));

//

...........................................................

parametros.add(String.valueOf((tipo_poi

.getSelectedItemPosition() + 1)));

if (direccion_poi.getText().toString().length() > 0)

parametros.add(direccion_poi.getText().toString());

else

parametros.add("No especificada");

if (valido) {

new EnviarDatos().execute();

} else {

Toast.makeText(SendImageActivity.this, "Campos no

validos",

Toast.LENGTH_LONG).show();

}

}

6. Código 6: Método de obtención de las coordenadas georeferenciales

LocationListener locationListener = new LocationListener() {

public void onLocationChanged(Location location) {

latitud_poi.setText(String.valueOf(location.getLatitude()));

longitud_poi.setText(String.valueOf(location.getLongitude()));

altitud_poi.setText(String.valueOf(location.getAltitude()));

}

public void onProviderDisabled(String provider) {

}

public void onProviderEnabled(String provider) {

}

public void onStatusChanged(String provider, int status,

Bundle extras) {

}

};

Page 7: Utilización de coordenadas espaciales para establecer la ...aula.fia.ues.edu.sv/materialpublico/compdes2012/Guia_2_Final.pdf · Guía N° 2 Universidad de El Salvador 2012 Página

Guía N° 2 Universidad de El Salvador

2012 Página 7

7. Código 7: Método de onPause y onResume

@Override

public void onPause() {

super.onPause();

locationManager.removeUpdates(locationListener);

}

@Override

public void onResume() {

super.onResume();

locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0,

0, locationListener);

locationManager.requestLocationUpdates(

LocationManager.NETWORK_PROVIDER, 0, 0,

locationListener);

}

8. Código 8: Método de subida de datos public class EnviarDatos extends AsyncTask<Void, Void, Void> {

List<String> estatus = new ArrayList<String>();

protected void onPreExecute() {

progress = ProgressDialog.show(crearPoi, "Enviando...",

"Por favor espere", true);

}

protected void onPostExecute(Void p) {

progress.dismiss();

for (String msj : estatus)

Toast.makeText(SendImageActivity.this, msj,

Toast.LENGTH_LONG)

.show();

}

@Override

protected Void doInBackground(Void... params) {

try {

ups = new Uploader(URL, filePath, fileName, parametros);

ups.uploadForm();

estatus.add(ups.getStatusForm());

if (filePath != null) {

ups.uploadImage();

estatus.add(ups.getStatusImage());

}

Page 8: Utilización de coordenadas espaciales para establecer la ...aula.fia.ues.edu.sv/materialpublico/compdes2012/Guia_2_Final.pdf · Guía N° 2 Universidad de El Salvador 2012 Página

Guía N° 2 Universidad de El Salvador

2012 Página 8

} catch (Exception e) {

e.printStackTrace();

estatus.add(e.getMessage());

}

return null;

}

}

Observaciones:

La Activity SendImageActivity contiene los métodos para recuperar todos los datos que son de relevancia para crear el Punto de interés del Usuario. Además se hace uso del método LocationManager (uso gps) para la extracción de las coordenadas espaciales y ubicar así el POI georeferencialmente. Utilizando la clase Uploader la cual se explicara dentro del taller, pero no se digitará por cuestiones de tiempo; es la que nos permite comunicarnos con el servidor y probar de esta manera que nuestro POI ha sido guardado dentro de la base de datos del sistema GTWORLD.

c) Descripción de la clase Uploader. Java Descripción clase Upload.java

Clase que se encarga de enviar un mensaje HTTP POST a un servicio web y opcionalmente

subir un archivo de imagen.

Este mensaje contiene los valores para almacenar un nuevo Poi en la Base de Datos. Para ello

se utiliza el método uploadForm() de la clases Upload.java así como se muestra a

continuación.

Page 9: Utilización de coordenadas espaciales para establecer la ...aula.fia.ues.edu.sv/materialpublico/compdes2012/Guia_2_Final.pdf · Guía N° 2 Universidad de El Salvador 2012 Página

Guía N° 2 Universidad de El Salvador

2012 Página 9

Primero se crea un objeto HttpClient que permitirá ejecutar una petición al servidor, y uno HttpPost que será dicha petición POST a ejecutar. Se crea una lista de elementos NameValuePair, que se enviaran como parámetro en el mensaje HTTP POST. Cada uno de estos elementos contiene la información necesaria para que el servidor cree un nuevo Poi y lo almacene en la BD. Con el listado de elementos NameValuePair se construye y se asigna una entidad (Entity) al objeto HttpPost.

Page 10: Utilización de coordenadas espaciales para establecer la ...aula.fia.ues.edu.sv/materialpublico/compdes2012/Guia_2_Final.pdf · Guía N° 2 Universidad de El Salvador 2012 Página

Guía N° 2 Universidad de El Salvador

2012 Página 10

Se le asigna un encabezado al objeto HttpPost, y se realiza la petición con el método execute() del HttpClient. Se captura la respuesta del servidor que deberá contener, si no existió error alguno, el ID del Poi creado. Ahora se ejecuta el método uploadImage() si, y solo si existe una imagen para enviar.

Page 11: Utilización de coordenadas espaciales para establecer la ...aula.fia.ues.edu.sv/materialpublico/compdes2012/Guia_2_Final.pdf · Guía N° 2 Universidad de El Salvador 2012 Página

Guía N° 2 Universidad de El Salvador

2012 Página 11

La diferencia de esta petición es que la Entidad es ahora del tipo MultipartEntity, que permite

enviar un archivo como mensaje HTTP POST. Dicho archivo se especifica con la variable

filePath, que contiene la dirección de la imagen dentro de la tarjeta SD.

En el encabezado se asigna el ID del Poi al que se le asociara la imagen.

Al ejecutar la petición POST, si todo se realizó correctamente el servidor regresara como Respuesta “Su Foto ha sido guardada” Por ultimo si tienes algún error en tu aplicación consulta a uno de los encargados para auxiliarte. Y por ultimo si tienes tu dispositivo móvil prueba la aplicación y crear tu Primer punto de Interés.

Page 12: Utilización de coordenadas espaciales para establecer la ...aula.fia.ues.edu.sv/materialpublico/compdes2012/Guia_2_Final.pdf · Guía N° 2 Universidad de El Salvador 2012 Página

Guía N° 2 Universidad de El Salvador

2012 Página 12

d) Ejemplo de la aplicación a desarrollar

Observar la siguiente secuencia:

Crear un nuevo POI

Elige el tipo de POI

Toma la foto del POI

Coloca una descripción del POI

Envie sus datos al servidor y espere por favor

Por ultimo espere a que se le notifique que sus datos y su foto ha sido guardada con

éxito