Documentos de Académico
Documentos de Profesional
Documentos de Cultura
28
C o m o t ra z a r r u t a G PS c o n I o n i c 3
ABR
Aquí veremos como trazar correctamente la ruta que un usuario realiza con nuestra app
de Ionic3, como por ejemplo hacen Runtastic o Wikiloc. Nos centraremos en crear un
servicio que ofrezca a nuestra aplicación la ruta más exacta que hace el usuario, esto
significa tener en cuenta que el GPS puede fallar, devolvernos puntos falsos, ir en
Utilizamos cookieszigzag,
para asegurar
etc. Loque
quedamos
vamoslaamejor
hacerexperiencia al usuario
es aprender entodas
a filtrar nuestro sitio
las web. Si continúa
posiciones que nos
utilizando este
facilita el GPSsitio
paraasumiremos que está
intentar hacer unde acuerdo. del
seguimiento Estoy de acuerdo
usuario lo más preciso posible.
Lo primero que haremos será preparar una aplicación de Ionic3 nueva:
Ya tenemos la estructura de nuestra app creada, ahora lo que haremos será añadir los
Para los que usáis el plugin de Google Maps por primera vez, os recomendaría que
leyerais el manual de instalación del mismo, ya que para obtener las claves de API hay
enlace: h ps://github.com/mapsplugin/cordova-plugin-googlemaps-
doc/blob/master/v1.4.0/Installation/windows/cli/README.md
Una vez tenemos los plugins listos, vamos a ponernos manos a la obra.
Primero de todo crearemos una carpeta models y dentro un archivo que vamos a llamar
Utilizamos cookies para asegurar que damos la mejor experiencia al usuario en nuestro sitio web. Si continúa
public timestamp: number;
utilizando este sitio asumiremos que está de acuerdo. Estoy de acuerdo
public x;
public y;
this.coords = geoposition.coords;
this.timestamp = geoposition.timestamp;
this.x = geoposition.coords.latitude;
this.y = geoposition.coords.longitude;
Una vez tenemos nuestro modelo auxiliar implementado, crearemos una carpeta
@Injectable()
positionPile: number = 3;
// We store the last position emi ed here in order to avoid jumps that could be produced
// We define the Subject and the observable that will emit the position values to the sub
Utilizamos cookies para asegurar que damos la mejor experiencia al usuario en nuestro sitio web. Si continúa
// This method should be called in order the service sta s emi ing positions
actualPosition => {
// Validate the position, if speed is 0 it means that user is stopped, so we don't need
this.positionArray.push(new CustomGeoposition(actualPosition));
// Adding at first position the last position processed, to force simplification to sta
if(this.previousPosition==null){
this.previousPosition = this.positionArray[0];
this.positionArray.unshi (this.previousPosition);
// Simplifying line
this.positionArray = [];
filteredPoints.unshi (this.previousPosition);
this.parseFilteredPoints(filteredPoints);
);
// This method gets the array of simplified positions and emits them to the subscribers
parseFilteredPoints(filteredPoints: CustomGeoposition[]){
filteredPoints.forEach(point => {
this._actualPosition.next( point );
this.previousPosition = point;
});
Ahora, lo que tenemos que hacer es crear un componente que consuma nuestro
@Component({
selector: 'page-home',
templateUrl: 'home.html'
})
map: GoogleMap;
previousPosition: Geoposition;
ngOnInit(){
this.setMap();
this.loadMap();
this.trackingService.sta Tracking();
this.trackingService.actualPosition.subscribe(position => {
if(position!=null){
this.drawRoute(position);
let controls: any = {compass: true, myLocationBu on: false, indoorPicker: false, zoom: t
'backgroundColor': 'white',
'controls': {
'compass': controls.compass,
'indoorPicker': controls.indoorPicker,
'zoom': controls.zoom,
'mapTypeControl': controls.mapTypeControl,
'streetViewControl': controls.streetViewControl
},
'gestures': {
'scroll': true,
'tilt': true,
'rotate': true,
'zoom': true
});
loadMap(){
this.map.on(GoogleMapsEvent.MAP_READY).subscribe(
(map) => {
map.clear();
map.o ();
map.setMapTypeId(plugin.google.maps.MapTypeId.HYBRID);
map.setMyLocationEnabled(true);
},(error)=>{
console.error("Error:", error);
);
drawRoute(pos:Geoposition):void{
if(this.previousPosition==null){
this.previousPosition = pos;
}
Utilizamos cookies para asegurar que damos la mejor experiencia al usuario en nuestro sitio web. Si continúa
this.map.addPolyline(
utilizando este sitio asumiremos que está de acuerdo. Estoy de acuerdo
{
points: [new LatLng(this.previousPosition.coords.latitude, this.previousPosition.coord
visible: true,
color:'#FF0000',
width:4
}).then(
(res)=>{
this.previousPosition = pos;
).catch(
(err)=>{
console.log("err: "+JSON.stringify(err));
);
¡Ya lo tenemos casi todo listo! Solamente faltaría añadir los providers necesarios al
providers: [
StatusBar,
SplashScreen,
TrackingService,
Geolocation
¡Ahora si, ya podemos probar nuestra app! Espero que os haya gustado y lo encontréis
repositorio h ps://github.com/psykologist90/gpstracker
Utilizamos cookies para asegurar que damos la mejor experiencia al usuario en nuestro sitio web. Si continúa
utilizando este sitio asumiremos que está de acuerdo. Estoy de acuerdo
RIL, 2017
th Hacking vs. Digital Marketing
Utilizamos cookies para asegurar que damos la mejor experiencia al usuario en nuestro sitio web. Si continúa
utilizando este sitio asumiremos que está de acuerdo. Estoy de acuerdo