0% encontró este documento útil (0 votos)
71 vistas8 páginas

Mapas y Geolocalización en Apps Móviles

Este documento describe un curso sobre mapas y geolocalización para la carrera de Ingeniería de Sistemas. El curso es impartido por el docente Oscar Mendez Zavaleta y los estudiantes Andres Astete Vasquez y Jorge Leon Paiva Reategui. El documento introduce los conceptos de geolocalización y sus ventajas para el desarrollo de aplicaciones móviles, y describe el desarrollo técnico de una aplicación que utiliza geolocalización para mostrar la ubicación del usuario en un mapa.

Cargado por

andres astete
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
71 vistas8 páginas

Mapas y Geolocalización en Apps Móviles

Este documento describe un curso sobre mapas y geolocalización para la carrera de Ingeniería de Sistemas. El curso es impartido por el docente Oscar Mendez Zavaleta y los estudiantes Andres Astete Vasquez y Jorge Leon Paiva Reategui. El documento introduce los conceptos de geolocalización y sus ventajas para el desarrollo de aplicaciones móviles, y describe el desarrollo técnico de una aplicación que utiliza geolocalización para mostrar la ubicación del usuario en un mapa.

Cargado por

andres astete
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd

FACULTAD DE INGENIERÍA

ESCUELA DE INGENIERÍA DE SISTEMAS

“Mapas y Geolocalización”
CURSO : PROGRAMACION DE APLICACIONES
MOVILES

DOCENTE : MENDEZ ZAVALETA OSCAR

INTEGRANTES :
 ASTETE VASQUEZ ANDRES
 PAIVA REATEGUI JORGE LEON

CICLO : VII

TRUJILLO – PERÚ

2015
Introducción
La geolocalización, consiste en conocer automáticamente la ubicación geográfica en la que nos
encontramos. Una funcionalidad que va cobrando cada vez más importancia, desde que en el
2009 se acuñara este término, utilizada sobretodo en el mundo móvil y en el desarrollo de
aplicaciones móviles.

Es por esta importancia en auge que cada vez más smartphones, y no sólo los de gama alta,
incluyen un GPS para poder determinar nuestra localización sobre el mapa. Precisamente es el
sector del desarrollo de aplicaciones móviles el que está sabiendo ver la amplia variedad de
posibilidades que ofrece la geolocalización. De hecho, hay muchas maneras en las que te puede
ayudar esta funcionalidad desde tu dispositivo móvil.

Por ejemplo, utilizando los datos de localización de tu dispositivo, encontrar comercios


cercanos, cafeterías, cines, etc, o algo tan simple como establecer la franja horaria en la que te
encuentras simplemente conociendo tu localización por GPS, información que obtiene de los
diversos satélites que orbitan la Tierra.

Aunque también puede recibir información a través del wi-fi y bluetooth además del GPS, la
localización final es una combinación de los datos obtenidos con esas herramientas. Es por eso
que la ubicación puede que no siempre sea exacta, sino que será una ubicación aproximada.

Ventajas de la geolocalización en el desarrollo de aplicaciones


El potente factor social es una de las mayores ventajas. Es decir, que el usuario de algunas app
pueda compartir su ubicación en redes sociales, ya que dará a conocer esta aplicación y esta
marca a sus amigos y contactos.

Del mismo modo puede ser una estrategia de marketing. La inclusión de la geolocalización en el
desarrollo de aplicaciones móviles ha permitido que determinadas apps aumenten su uso y que
ganen usuarios. Es sin duda una funcionalidad en auge, sobre todo desde que aplicaciones
móviles muy conocidas como Foursquare, Google Maps o Facebook las incorporaran.

Dar información detallada al usuario sobre turismo, motor de apps de realidad aumentada,
búsqueda de información, aumentar el contexto, etc. Algunos ejemplo de aplicaciones que
utilizan geolocalización en estos sentidos:

Swarm: La nueva aplicación nacida de la transformación de Foursquare nace como red social y
se basa en hacer check-in

TratoJusto :es una aplicación de comercio colaborativo. Esta app te conecta con personas cerca
de ti que te pueden ayudar en lo que necesites, ya sea con la mudanza, si necesitas un cargador
de móvil, o quizás un fontanero para arreglar tu grifo.

Nike+ Running: Esta app realiza un seguimiento de tus carreras y te ayuda a alcanzar tus metas;
ya sea que se trate de correr tu primera carrera o de fijar un nuevo récord personal. Utiliza el
GPS para determinar dónde te encuentras y cuantos kilómetros has recorrido y situarlo en el
mapa.
Desarrollo
Disposición inicial
- Permisos en el Manifest, por el acceso a internet para el mapa y la ubicación del GPS
requerimos estos 2 permisos bajo el tag:

<uses-permission android:name="android.permission.INTERNET" />


<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

- Uso de la librería de mapas, también en el Manifest bajo el tag:

<uses-library android:name="com.google.android.maps" />

- En la clase de la actividad principal, utilizaremos herencia de MapActivity para


facilitarnos el manejo del mapa e implementaremos la interfaz LocationListenerpara
detectar los cambios en la localización.
- Por heredar de MapActivity debemos implementar el método:
@Override

protected boolean isRouteDisplayed() {

return false;

- Por implementar LocationListener debemos realizar los siguientes métodos:


@Override

public void onLocationChanged(Location location) {}

@Override

public void onProviderDisabled(String provider) {}

@Override

public void onStatusChanged(String provider, int status, Bundle extras) {}

@Override

public void onProviderEnabled(String provider) {}


Diseño
- Utilizaremos una vista especial para el mapa es necesario un key para la utilización
del servicio de Google Maps y depende directamente del certificado utilizado para
firmar las aplicaciones, el valor del atributo android:apiKey que aparece en el código
es válida para mi certificado.
<com.google.android.maps.MapView

xmlns:android="http://schemas.android.com/apk/res/android"

android:id="@+id/mapview"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:clickable="true"

android:apiKey="0xJ4uwRGDV296srCn4Iiy46oFmd1jecLr07BsAA"

/>

Agregando código
- La clase de la Activity para nuestra aplicación extenderá de MapActivity para
facilitarnos el manejo de la visualización del mapa e
implementará LocationListenerpara el manejo de las actualizaciones de ubicación.

public class Main extends MapActivity implements LocationListener

- De los métodos disponibles, utilizaremos onProviderDisabled para forzar al usuario


a tener el GPS funcionando antes de que la aplicación inicie.
@Override

public void onProviderDisabled(String provider) {

Intent intent = new Intent( android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS

startActivity(intent);

- Vamos a mostrar un marker en las diferentes ubicaciones detectadas, para ello


haremos una clase que represente este Overlay mostrando la imagen seleccionada.
Para este ejemplo se utilizará la imagen del ícono, al definirla dentro de la misma
clase de laActivity principal entonces será una clase privada.
class MyOverlay extends Overlay { }
- Tendremos una variable de instancia representando el punto donde se colocará el
marcador y será un parámetro recibido por el constructor:

GeoPoint point;

/* El constructor recibe el punto donde se dibujará el marker */

public MyOverlay(GeoPoint point) {

super();

this.point = point;

- Sobrecargaremos el método draw para dibujar nuestro marker:

@Override

public boolean draw(Canvas canvas, MapView mapView, boolean shadow, long when) {

super.draw(canvas, mapView, shadow);

//se traduce el punto geo localizado a un punto en la pantalla

Point scrnPoint = new Point();

mapView.getProjection().toPixels(this.point, scrnPoint);

//se construye un bitmap a partir de la imagen

Bitmap marker = BitmapFactory.decodeResource(getResources(), R.drawable.icon);

//se dibuja la imagen del marker

canvas.drawBitmap(marker, scrnPoint.x - image.getWidth() / 2, scrnPoint.y –

marker.getHeight() / 2, null);

return true;

}
- El código completo de la clase para los overlays es el siguiente:
class MyOverlay extends Overlay {

GeoPoint point;

//El constructor recibe el punto donde se dibujará el marker

public MyOverlay(GeoPoint point) {

super();

this.point = point;

@Override

public boolean draw(Canvas canvas, MapView mapView, boolean shadow, long when) {

super.draw(canvas, mapView, shadow);

//se traduce el punto geolocalizado a un punto en la pantalla */

Point scrnPoint = new Point();

mapView.getProjection().toPixels(this.point, scrnPoint);

//se construye un bitmap a partir de la imagen

Bitmap marker = BitmapFactory.decodeResource(getResources(), R.drawable.icon);

// se dibuja la imagen del marker

canvas.drawBitmap(marker, scrnPoint.x - marker.getWidth() / 2, scrnPoint.y - mar

return true;

}
- Para ir dibujando estos markers al principio y cada vez que haya una actualización
de la ubicación, utilizaremos un método nuevo con la firma:

protected void updateLocation(Location location)

- Obtenemos el MapView y de él un MapController:

MapView mapView = (MapView) findViewById(R.id.mapview);

MapController mapController = mapView.getController();

- Construimos un punto a partir de la latitud y longitud del Location recibido:

GeoPoint point = new GeoPoint((int) (location.getLatitude() * 1E6), (int)

(location.getLongitude() * 1E6));

- Movemos el centro del mapa hacia esta ubicación:


mapController.animateTo(point);

mapController.setZoom(15);

- Posterior a esto, intentaremos hacer geolocalización del punto, obtener una


dirección a partir de las coordenadas del punto. Primero instanciamos un
objeto Geocoder que responderá de acuerdo a la localidad configurada en el
teléfono.

Geocoder geoCoder = new Geocoder(this, Locale.getDefault());

- A través de este Geocoder y con el punto de la ubicación intentamos obtener alguna


dirección asociada y se lo hacemos saber al usuario por medio de un toast (aviso).
try {

List<Address> addresses = geoCoder.getFromLocation(point.getLatitudeE6() / 1E6,

point.getLongitudeE6() / 1E6, 1);

String address = "";

if (addresses.size() > 0) {

for (int i = 0; i < addresses.get(0).getMaxAddressLineIndex(); i++)

address += addresses.get(0).getAddressLine(i) + "\n";

Toast.makeText(this, address, Toast.LENGTH_SHORT).show();

} catch (IOException e) {

e.printStackTrace();

}
- Por último, instanciamos la clase MyOverlay construída previamente para agregar
un nuevo marker en el listado de overlays del mapa e invalidamos la vista para que
vuelva a dibujarse todo.

List<Overlay> mapOverlays = mapView.getOverlays();

MyOverlay marker = new MyOverlay(point);

mapOverlays.add(marker);

mapView.invalidate();

- En el método onCreate vamos a instanciar un LocationManager para mostrar el


primer marker y solicitar actualizaciones:

MapView mapView = (MapView) findViewById(R.id.mapview);

//habilitamos el control de zoom

mapView.setBuiltInZoomControls(true);

LocationManager locationManager = (LocationManager)getSystemService(Context.LOCATION_

SERVICE);

updateLocation(locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER));

/* se actualizará cada minuto y 50 metros de cambio en la localización

mientras más pequeños sean estos valores más frecuentes serán las actualizaciones*/

locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 6000, 50, this);

- Luego en el método onLocationChanged llamamos a nuestro


métodoupdateLocation para que dibuje un nuevo marker cada vez que se actualice
la localización:

@Override

public void onLocationChanged(Location location) {

updateLocation(location);

También podría gustarte