Documentos de Académico
Documentos de Profesional
Documentos de Cultura
FACULTAD DE INGENIERIA
ESCUELA ACADEMICA PROFESIONAL DE INGENIERIA DE SISTEMAS E INFORMATICA
INFORME DE PROYECTO DE BIOINFORMATICA TITULO: DISEO DE UN SISTEMA SISTEMA DE POSICIONAMIENTO GLOBAL (GPS), USANDO TECNOLOGIA JAVA
AUTORES: BLAS AZAA ANDREI LOPEZ TORRES KEVIN
DEDICATORIA
A nuestro Creador, Jehov, por iluminarnos da a da en nuestra vida. A nuestros padres y hermanos por su apoyo brindado.
A nuestros profesores de la UNS por su gua en este camino a ser profesionales. A todos aquellos que en algn momento de nuestras vidas estuvieron a nuestro lado.
GPS
Pgina 2
AGRADECIMIENTO
A los profesores de la E.A.P. de Ingenieria de Sistemas e Informatica por la formacin Acadmica brindada, y especialmente a nuestra Asesora Ing. Briones Pereyra Lizbeth Dora por su gran apoyo y amistad.
A nuestra casa de estudios Universidad Nacional del Santa, por ser el lugar donde cada dia, nos brinda su abrigo, sus aulas, sus laboratorios donde cada dia nos insta que debemos aprender y ser mejores, por permitirnos realizar este
proyecto de reconocimiento de GPS, bajo la direccin de nuestra asesora y docente en mencin en el curso de Bioinformatica
GPS
Pgina 3
PRESENTACIN
SEORES:
En cumplimiento a lo dispuesto en la Tercera Unidad para el curso de Bioinformatica, cuyo tema es la realizacin de un Proyecto a libre eleccin dispuesto por nuestra docente a cargo del Curso de Bioinformatica, Ing Lizbeth Dora Briones Pereyra. En tal efecto ponemos a vuestra consideracin el presente informe de Proyecto titulado: DISEO DE UN SISTEMA
(GPS),
USANDO
El informe de Proyecto tiene como lugar El diseo y la aplicacin del Sistema a La Sociedad cuyo presente trabajo pretende obtener la ruta mas corta entre el punto de salida y de llegada, tal es asi en el futuro solo se tenga que abstraer las caractersticas requeridas e ingresarlas al Sistema, el cual nos dara el resultado en mencin.
Esperando podamos satisfacer una necesidad haciendo uso de las herramientas tecnolgicas es por ello le brindamos el presente informe de proyecto con titulo arriba mencionado.
GPS
Pgina 4
RESUMEN
En este trabajo se presenta el estudio e implementacin del algoritmo de segimiento de un receptor de seales GPS basado en una arquitectura de radio definido por software como una aportacin para que en un futuro se cuente con un receptor GPS basado en software y que tenga como principal un Dispositivos Logicos Programables (FPGA).
La implementacin del algoritmo se divide en cuatro partes principales: estudio e implementacin de lazo de seguimiento de cdigo, estudio e implementacin del lazo de seguimiento de portadora, juntar estos dos lazos de seguimiento para que al final tengamos uno solo que a la salida nos de como resultado los datos de navegacin por ultimo implementar el lazo de seguimiento completo en el lenguaje JAVA con vista modo diseo, evaluando la entrada y la salida para poder pasarlo al Dispositivos Logicos Programables (FPGA).
La implementacin del algoritmo sobre dispositivos lgicos programables FPGA es para poder tener un receptor con caractersticas cognitivas el cual nos va a permitir simular otros sistemas de navegacin sin necesidad de cambiar dispositivos de hardware con solo actualizar algunos parmetros de configuracin dentro de la aplicacin de software desarrolado.
GPS
Pgina 5
ABSTRACT
This paper presents the study and implementation of the algorithm TO FOLLOW GPS signal receiver architecture based on software-defined radio as a contribution to make in the future will have an software-based GPS receiver and whose main a programmable logic devices (FPGA).
The implementation of the algorithm is divided into four main parts: study and implementation of code tracking loop, study and implementation of carrier tracking loop, ties together these two follow-up to the end that we have one of us out resulting navigation data finally implement complete tracking loop in the JAVA language design mode view, evaluating the input and output to pass it to the Programmable Logic Devices (FPGA).
The implementation of the algorithm on FPGA's programmable logic devices in order to have a receiver with cognitive characteristics which will allow us to simulate other navigation systems without changing hardware devices by updating some settings within the software application Developed.
GPS
Pgina 6
INDICE
Pag.
2 3 . 4
. 5
ABSTRACT .. 6 INDICE 7 INTRODUCCIN . 9 CAPITULO I DATOS GENERALES 1. OBJETIVOS ...... 10 1.1. OBJETIVO GENERAL: .. 10 1.2. OBJETIVOS ESPECIFICOS: 10 2. OPERACIONALIZACION DE LAS VARIABLES. 10
CAPITULO II PLANTEAMIENTO DE LA INVESTIGACION 2.1 FORMULACIN DEL PROBLEMA.. 11 2.2 HIPTESIS.. 11 2.3 LIMITACIONES: 11
CAPITULO III MARCO TEORICO 3.1 GPS.. 13 3.2.1. Antecedentes histricos: ..... 13 3.2.2. Caractersticas tcnicas y prestaciones .....15 3.2.3. Evolucin del sistema GPS . 16 3.2 RECEPTOR GPS BASICO ..... 18 3.3 CRITERIOS DE PRESENTACION...... 19
GPS
Pgina 7
3.4 RESULTADOS E INTERPRETACION: . 20 3.2.1. Algoritmo de DIJKSTRA: ... 20 3.2.2. Resultados de la prueba . 21
CAPITULO IV
DESARROLLO DE LA APLICACIN EN EL LENGUAJE DE PROGRAMACION JAVA VENTANAS DEL PROGRAMA: ... 25 CODIGO DEL PROGRAMA: 26 CONCLUSIONES .. 44 ENLACES...44
GPS
Pgina 8
INTRODUCCIN
Daremos una descripcin general del sistema GPS y la relacin que podran tener estos con el radio definido por software. Aqu estudiamos una visin general de los receptores de seales GPS implementados en una arquitectura de radio definido por software.
En la actualidad el mtodo ms exacto y confiable para ver la ruta ms radipa de llegar de un punto a otro punto es el GPS. Agregando la tecnologa Java creado bajo estos 5 principios fundamentales:
Debera usar la metodologa de la programacin orientada a objetos. Debera permitir la ejecucin de un mismo programa en mltiples sistemas operativos.
Debera incluir por defecto soporte para trabajo en red. Debera disearse para ejecutar cdigo en sistemas remotos de forma segura. Debera ser fcil de usar y tomar lo mejor de otros lenguajes orientados a objetos, como C++
Unado esto se tiene un sistema diseado en java para poder hacer la prueba del camino mas corto ingresando los puntos de salida y llegada.
GPS
Pgina 9
1. OBJETIVOS 1.1. OBJETIVO GENERAL: Iniciar la prueba de paternidad mediante Sistema De Posicionamiento Global (Gps) haciendo uso de la tecnologa actual como es la tecnologa java, que nospermite agilizar el proceso de dicha prueba de bsqueda del camino mas corto.
1.2. OBJETIVOS ESPECIFICOS: Estimar los posibles caminos segn la informacin de la cadena de distancias (pesos) ingresada por el viajante.
Estimar bajo que caractersticas se fundamenta el hecho que atribuye cua es el camino mas cort.
GPS
Pgina 10
EN QUE MEDIDA EL DISEO DE UN SISTEMA PERMITIR AGILIZAR EL POSICIONAMIENTO GLOBAL (GPS), USANDO TECNOLOGIA JAVA?
2.2 HIPTESIS
El diseo de un sistema nos permitir agilizar agilizar el posicionamiento (gps), usando tecnologia java?
global
2.3 LIMITACIONES:
Para el desarrollo del proyecto no contamos con el apoyo de los Lais, referiendos a sus PCs ya que al acceder no tienen instalado un compilador adecuado para la correcta programacin en java.
Debido a que no solo es el curso de Bioinformatica que llevamos, nos es un tanto limitante el tiempo para poder nutrir ms nuestro proyecto
GPS
Pgina 11
Proyecto de Bioinformatica
GPS
Pgina 12
Los sistemas anteriores de posicionamiento que empleaban estaciones terrestres de A.M. (Amplitud Modulada) cubran un rea mayor que los de UHF (Frecuencias ultracortas), pero no podan determinar con exactitud una posicin debido a las interferencias atmosfricas que afectan a las seales de radio de amplitud modulada y a la propia curvatura de la Tierra que desva las ondas
Por tanto, la nica forma de solucionar este problema era colocando transmisores de radio en el espacio csmico que emitieran constantemente seales codificadas en direccin a la Tierra. De hecho esas seales cubriran un rea mucho mayor que las de A.M., sin introducir muchas interferencias en su recorrido.
Sin embargo, no fue hasta 1993 que el Departamento de Defensa de los Estados Unidos de Amrica, basado en la experiencia recogida del satlite Vanguard (en un principio para uso exclusivamente militar) puso en funcionamiento un sistema de localizacin por satlite conocido por las siglas en ingls GPS(Global Positioning
GPS
System
Sistema
de
Posicionamiento
Global).
Pgina 13
En sus inicios el propio Departamento de Defensa program errores de clculo codificados en las transmisiones de los satlites GPS para limitarlo solamente a la actividad militar que s contaba con decodificadores para interpretar correctamente las seales, pero a partir de mayo de 2000 esta prctica qued cancelada y hoy en da el sistema GPS se utiliza ampliamente en muchas actividades de la vida civil, aunque no est exento de ser reprogramado de nuevo en caso de cualquier conflicto blico.
Este sistema permite conocer la posicin y la altura a la nos encontramos situados en cualquier punto de la Tierra en todo momento, ya sea que estemos situados en un punto fijo sin desplazarnos, e incluso en movimiento, tanto de da como de noche.
El sistema GPS permite rastrear tambin, en tiempo real, la ubicacin de una persona, animal, vehculo, etc., desde cualquier sitio y prestar auxilio si fuera necesario, con la condicin que estn equipados con un dispositivo que pueda emitir algn tipo de seal, ya sea de radio o telefnica, que permita su localizacin.
La primera prueba exitosa del sistema GPS desde el punto de vista prctico como instrumento de ayuda a la navegacin, la realiz el trasbordador
espacial Discovery en el propio ao que se puso en funcionamiento el sistema. Actualmente los satlites GPS pertenecen a una segunda generacin denominada Block II
GPS
Pgina 14
3.4.1. Caractersticas tcnicas y prestaciones. El Sistema de Posicionamiento Global (GPS) lo componen: 1. Sistema de satlites: Est formado por 24 unidades con trayectorias sincronizadas para cubrir toda la superficie del globo terrqueo. Ms concretamente, repartidos en 6 planos orbitales de 4 satlites cada uno. La energa elctrica que requieren para su funcionamiento la adquieren a partir de dos paneles compuestos de celdas solares adosados a sus costados. 2. Estaciones terrestres: Envan informacin de control a los satlites para controlar las rbitas y realizar el mantenimiento de toda la constelacin. 3. Terminales receptores: Indican la posicin en la que estn, conocidas tambin como Unidades GPS.
Segmento espacial: Satlites en la constelacin: 24 (4 x 6 rbitas) Altitud: 20,200 km Perodo: 11 hrs 56 min. Inclinacin: 55 (respecto al ecuador terrestre) Vida til: 7.5 aos Segmento de control (estaciones terrestres) Estacin principal: 1 Antena de tierra: 4 Estacin monitora (de seguimiento): Seal de RF Frecuencia portadora: Civil 1575.42 MHz (L1). Utiliza el Cdigo de Adquisicin
GPS Pgina 15
Aproximado (C/A). Militar 1227,60 MHz (L2). Utiliza el Cdigo de Precisin (P) cifrado. Nivel de potencia de la seal: -160 dBW (en superficie tierra). Polarizacin: circular dextrgira Exactitud Posicin: aproximadamente 15 m (el 95%) Hora: 1 ns Cobertura: mundial Capacidad de usuarios: ilimitada Sistema de coordenadas: Sistema Geodsico Mundial 1984 (WGS84) Centrado en la Tierra, fijo. Integridad: tiempo de notificacin 16 minutos o mayor. NO ES SUFICIENTE PARA LA AVIACIN CIVIL. Disponibilidad: 24 satlites
3.4.2. Evolucin del sistema GPS El GPS est evolucionando hacia un sistema ms slido (GPS III), con una mayor disponibilidad y que reduzca la complejidad de las aumentaciones GPS. Algunas de las mejoras previstas comprenden: Incorporacin de una nueva seal en L2 para uso civil. Adicin de una tercera seal civil (L5): 1176.45 MHz Proteccin y disponibilidad de una de las dos nuevas seales para servicio de Seguridad Para la Vida (SOL). Mejora en la estructura de las seales.
GPS
Pgina 16
Mejora en la precisin (1 5 m). Aumento en el nmero de estaciones monitorizadas: 12 (el doble) Permitir mejor interoperabilidad con la frecuencia L1 de Galileo
El programa GPS III persigue el objetivo de garantizar que el GPS pueda satisfacer requisitos militares y civiles para los prximos 30 aos. Este programa se est desarrollando para utilizar un enfoque en 3 etapas (una de las etapas de transicin es el GPS II); muy flexible, permite cambios futuros y reduce riesgos. El desarrollo de satlites GPS III comenz en 2005, y el primero de ellos estar disponible para su lanzamiento en 2012, con el objetivo de lograr la transicin completa de GPS III en 2017 [44]. Los desafos son los siguientes: Representar los requisitos de usuarios, tanto civiles como militares, en cuanto a GPS. Limitar los requisitos GPS III dentro de los objetivos operacionales Proporcionar flexibilidad que permita cambios futuros para satisfacer requisitos delos usuarios hasta 2030. Proporcionar solidez para la creciente dependencia en la determinacin de posicin y de hora precisa como servicio internacional.
GPS
Pgina 17
3.2 RECEPTOR GPS BASICO El receptor GPS bsico discutido en esta tesis es el mostrado en la figura anterior. Las seales transmitidas de los satlites GPS son recibidas por la antena. A travs de la cadena de radiofrecuencia (RF) la seal de entrada es amplificada a una amplitud adecuada y la frecuencia es convertida a una frecuencia de salida deseada. Un convertidor analgico a digital (ADC) es usado para digitalizar la seal de salida. La antena, seales de RF, y el ADC es el hardware usado en el receptor.
Despus de que las seales son digitalizadas, el software es usado para su procesamiento, y es por eso que a esta tesis se le da un enfoque de software. La adquisicin significa encontrar la seal de un cierto satlite.
El lazo de seguimiento (marcado en la figura anterior) es usado para encontrar la transicin de la fase de los datos de navegacin, aqu cabe mencionar que el seguimiento es la parte central de esta tesis aunque en algunos captulos se hable en general sobre los receptores GPS basados en software no perdamos de vista que el objetivo es el estudio e implementacin del bloque de seguimiento del receptor de seales GPS. En un receptor convencional, la adquisicin y el seguimiento son realizados por hardware. De la transicin
GPS Pgina 18
de fase de los datos de navegacin; las subtramas y los datos de navegacin pueden ser obtenidos. Los datos de efemrides y pseudorango.
Hay dos criterios posibles de implementacin. Uno, es una manera simple de seguir el diagrama de flujo de la seal mostrado en la figura anterior. En este criterio se comienza con la estructura de la seal del sistema GPS y los mtodos para procesar la seal para obtener la informacin necesaria. Esta informacin ser usada para calcular las posiciones de los satlites y los pseudorangos. Usando la posicin de los satlites y los pseudorangos, puede ser encontrada la posicin del usuario. En este criterio, la discusin ser simple, de un objetivo a otro. Sin embargo, la desventaja de este criterio es que los lectores no tendrn una idea clara ya que estos pasos son necesarios. Entenderan el concepto de la operacin del GPS solo despus de leer un libro completo sobre GPS.
El otro criterio es comenzar con el concepto bsico del GPS. Este criterio empezara con el concepto bsico de encontrar la posicin del usuario de la posicin satelital. La descripcin de la constelacin satelital ser presentada. La informacin detallada de la rbita del satlite est contenida en los datos GPS. As que para obtener estos datos, la seal GPS debe ser seguida. El cdigo C/A de las seales GPS ser presentado. Cada satlite tiene un nico cdigo C/A. Un receptor puede realizar la adquisicin sobre el cdigo C/A para encontrar la
GPS Pgina 19
seal. Una vez que el cdigo C/A de un cierto satlite es encontrado, la seal puede ser seguida (seguimiento de cdigo y portadora). Si se realiza un seguimiento correcto, esto ayuda a obtener los datos de navegacin. De estos datos, la posicin del satlite puede ser encontrada. El pseudorango puede ser obtenido comparando 10 el tiempo que un cierto dato llega al receptor. La posicin del usuario puede ser calculado de la posicin satelital y el pseudorango de varios satlites.
Esta tesis toma este segundo criterio para presentar el material debido a que da una clara idea de la funcin del GPS desde el comienzo; no olvidando que en esta tesis adems de que se da esta descripcin detallada del receptor GPS el tema principal es el seguimiento de la seal GPS.
3.4 RESULTADOS E INTERPRETACION: 3.4.1. Algoritmo de DIJKSTRA DIJKSTRA (Grafo G, nodo_fuente s) para u < V[G] hacer distancia[u] = INFINITO padre[u] = NULL distancia[s] = 0 adicionar (cola, (s,distance[s])) mientras que cola no es vaca hacer u = extraer_minimo(cola) para todos v < adyacencia[u] hacer si distancia[v] > distancia[u] + peso (u, v) hacer distancia[v] = distancia[u] + peso (u, v) padre[v] = u
GPS Pgina 20
3.4.2. Resultados de la prueba: El siguiente ejemplo se desarrollar con el fin de encontrar el camino ms corto desde a hasta z:
Leyenda: Rojo: Aristas y vrtices pertenecientes a la solucin momentnea. Azul: Aristas y vrtices candidatos.
Paso 1 En este primer paso, podemos apreciar que hay tres candidatos: Los vrtices b, c y d. En este caso, hacemos el camino desde el vrtice a, hasta el vrtice d, ya que es el camino ms corto de los tres.
GPS
Pgina 21
Solucin momentnea: Pas 2 Ahora, vemos que se aade un nuevo candidato, el vrtice e, y el vrtice c, pero esta vez a travs del d. Pero el camino mnimo surge al aadir el vrtice c. Solucin momentnea: Camino: AD Distancia:5
Pas 3
En este paso no se aade ningn candidato ms puesto que el ltimo vrtice es el mismo que en el paso anterior. En este caso el camino mnimo hallado es el siguiente:
GPS Pgina 22
Pas 4 Como podemos comprobar, se han aadido dos candidatos nuevos, los vrtices f y g, ambos a travs del vrtice b. El mnimo camino hallado en todo el grafo hasta ahora es el siguiente:
Pas 5
GPS
Pgina 23
En el penltimo paso, vuelve a aparecer otro candidato: el vrtice e, pero esta vez a travs del vrtice f. De todas formas, el camino mnimo vuelve a cambiar para retomar el camino que vena siguiendo en los pasos anteriores: Solucin momentnea:
Pas 6 Por fin, llegamos al ltimo paso, en el que slo se aade un candidato, el vrtice z a travs del e. El camino mnimo y final obtenido es nada mas y nada menos k:
GPS
Pgina 24
GPS
Pgina 25
GPS
Pgina 26
CODIGO DEL PROGRAMA PAQUETE INTERFAS: 1. Lienso package Interfaz; import TAD.*; import java.awt.Canvas; import java.awt.Color; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.geom.Ellipse2D; import java.awt.geom.Line2D; import java.awt.geom.Rectangle2D; import javax.swing.ImageIcon;
public class Lienzo extends Canvas{ private int[] X,Y; private int tamVertice=20,visitado=-1; private Ellipse2D vertice[]; private Line2D arista[];
GPS Pgina 27
private Rectangle2D marco; private boolean usarFondo=true; private Grafo grafo; private ImageIcon fondo; private Color color[] = new Color[1]; public Lienzo(int[] X, int Y[],Grafo grafo) { this.X=X; this.Y=Y; this.grafo=grafo; vertice = new Ellipse2D[grafo.MatrizAdyacencia().length]; arista = new Line2D[grafo.MatrizAdyacencia().length]; this.setSize(425, 600); color[0]=Color.BLUE; } @Override public void paint(Graphics g) { Graphics2D g2 = (Graphics2D)g; marco = new Rectangle2D.Double(0, 0, 424, 599); g2.draw(marco); if(usarFondo) { g2.drawImage(fondo.getImage(), 0, 0, 425, 600, null); } pintarAristas(g2); pintarVertices(g2);//pintarVertices(g2); if(visitado!=-1){ pintarVisitado(g2); } }
private void pintarVertices(Graphics2D g2) { int coloreado[]= new int[grafo.grado().length]; //Pintamos en el Orden Total (Grado y Grado de Error) for(int i = 0; i<coloreado.length; i++) { g2.setColor(color[0]); vertice[i] = new Ellipse2D.Double(X[i],Y[i],tamVertice,tamVertice); g2.fill(vertice[i]); g2.setColor(Color.WHITE); g2.drawString(String.valueOf(i), X[i]+4, Y[i]+15); g2.draw(vertice[i]); } } private void pintarAristas(Graphics2D g2) { for(int i=0; i<grafo.MatrizAdyacencia().length; i++) { int startJ=0; if(grafo.getTipoGrafo()==2){// Grafo No Direccionado: no repite la unin de aristas
GPS Pgina 28
startJ=i; } for(int j=startJ; j<grafo.MatrizAdyacencia().length; j++) { if(grafo.MatrizAdyacencia()[i][j]==1) { g2.setColor(new Color(35,90,145));//aca se define el color de las aristas arista[i]=new Line2D.Double( X[i]+tamVertice/2,Y[i]+tamVertice/2, X[j]+tamVertice/2,Y[j]+tamVertice/2); g2.draw(arista[i]); g2.setColor(Color.BLACK);//El Color De Los N De Los Pesos g2.drawString(String.valueOf(grafo.MatrizPesos()[i][j]), ((X[i]+X[j])/2)+4, ((Y[i]+Y[j])/2)+15); } } } } private void pintarVisitado(Graphics2D g2) { g2.setColor(Color.WHITE); g2.fill(vertice[visitado]); g2.setColor(Color.BLACK); g2.drawString(String.valueOf(visitado), X[visitado]+4, Y[visitado]+15); g2.draw(vertice[visitado]); g2.setColor(Color.WHITE); visitado=-1; } public void setVisitado(int visitado) { this.visitado=visitado; } public void setFondo(boolean usarFondo,ImageIcon fondo) { this.usarFondo=usarFondo; this.fondo=fondo; } }
2. Matriz package Interfaz; import TAD.Grafo; import java.awt.Color; import java.awt.Component; import java.awt.Font; import javax.swing.JLabel; import javax.swing.JTable;
GPS Pgina 29
public class Matriz extends javax.swing.JFrame { //private Grafo grafo = new Grafo(); private RenderTabla tModelo = new RenderTabla(); public Matriz(Grafo grafo) { initComponents(); this.setLocationRelativeTo(null); //this.grafo=grafo; formatoTabla(); cargarMatriz(grafo.MatrizAdyacencia()); } public class RenderTabla implements javax.swing.table.TableCellRenderer { public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { JLabel modelo = new JLabel(); //cada celda tendr el formato del modelo if(value!= null && (row==20 || column==0) ) { modelo.setBackground (new Color(58,65,145)); modelo.setOpaque(true); modelo.setForeground(Color.WHITE);//pintamos en la tabla la enumeraciones } else{ modelo.setForeground(Color.BLACK);//pintamos en la tabala la matriz de adyacencia } modelo.setText((String) value); modelo.setFont(new Font("consolas",1,11)); modelo.setHorizontalAlignment(JLabel.CENTER); return modelo; } } private void formatoTabla() { jTableMatriz.setDefaultRenderer(String.class, tModelo); } private void cargarMatriz(int Matriz[][]) { for(int i=0; i<Matriz.length;i++) {// ingresando la matris a la tabla for(int j=1; j<=Matriz[i].length; j++) { jTableMatriz.setValueAt(String.valueOf(Matriz[i][j-1]), i, j); } }
3. Principal:
GPS Pgina 30
package Interfaz; import TAD.*; import java.util.Timer; import java.util.TimerTask; import javax.swing.ImageIcon;
public class Principal extends javax.swing.JFrame { String mensaje=""; private Grafo grafo = new Grafo(); private String provincia[] = {"Santa","Casma","Huaylas","Pomabamba","Sihuas", "Corongo","Pallasca","Yungay","Carhuas","Asuncin", "M. Luzuriaga","C. F. Fitzcarrald","Antonio Raimondi", "Huaraz","Aija","Huarmey","Recuay","Huari", "Bolognesi","Ocros"}; private int X[] = {79,98,176,264,241,167,162,204,221,270,299,308,348,202,219,158,285,337,32 5,260}; private int Y[] = {196,322,201,159,100,117,52,247,282,255,187,224,247,342,384,458,406,315,4 66,532}; private Lienzo lienzo = new Lienzo(X,Y,grafo); private boolean mostrarMapa=true; private Pila pila=new Pila(X.length); private Timer timer; private ImageIcon ancash = new ImageIcon(getClass().getResource("fondo.png")); int desde, hasta; public Principal() { initComponents(); this.setLocationRelativeTo(null); cargarTablas(); dibujar(); } @SuppressWarnings("unchecked") // <editor-fold defaultstate="collapsed" desc="Generated Code"> private void initComponents() { bGMatriz = new javax.swing.ButtonGroup(); jLabel1 = new javax.swing.JLabel(); jPanelSettings = new javax.swing.JPanel(); jCBMapa = new javax.swing.JCheckBox(); jButtonMatriz = new javax.swing.JButton(); jPanelProvincia = new javax.swing.JPanel(); jScrollPane1 = new javax.swing.JScrollPane();
GPS Pgina 31
jTableProvincia = new javax.swing.JTable(); jScrollPane2 = new javax.swing.JScrollPane(); jTableDestino = new javax.swing.JTable(); jScrollPane3 = new javax.swing.JScrollPane(); jTableIndice = new javax.swing.JTable(); jButton1 = new javax.swing.JButton(); jLPLienzo = new javax.swing.JLayeredPane(); jLabel2 = new javax.swing.JLabel(); jScrollPane4 = new javax.swing.JScrollPane(); txtarea1 = new javax.swing.JTextArea();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); setTitle("Sistema de GPS"); setResizable(false); jLabel1.setFont(new java.awt.Font("Consolas", 0, 12)); jLabel1.setForeground(new java.awt.Color(0, 102, 153)); jLabel1.setText("ANCASH - PER");
jPanelSettings.setBorder(javax.swing.BorderFactory.createEtchedBorder()); jCBMapa.setSelected(true); jCBMapa.setText("Mostrar Mapa"); jCBMapa.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jCBMapaActionPerformed(evt); } }); jButtonMatriz.setText("Mostrar Matriz"); jButtonMatriz.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButtonMatrizActionPerformed(evt); } }); javax.swing.GroupLayout jPanelSettingsLayout = new javax.swing.GroupLayout(jPanelSettings); jPanelSettings.setLayout(jPanelSettingsLayout); jPanelSettingsLayout.setHorizontalGroup( jPanelSettingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment .LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanelSettingsLayout.createSequentialGroup() .addGap(50, 50, 50) .addComponent(jCBMapa) .addGap(35, 35, 35) .addComponent(jButtonMatriz)
GPS Pgina 32
jPanelProvincia.setBorder(javax.swing.BorderFactory.createEtchedBorder()); jTableProvincia.setModel(new javax.swing.table.DefaultTableModel( new Object [][] { {null}, {null}, {null}, {null}, {null}, {null}, {null}, {null}, {null}, {null}, {null}, {null}, {null}, {null}, {null}, {null}, {null}, {null}, {null}, {null} }, new String [] { "PARTIDA" } ){ Class[] types = new Class [] { java.lang.String.class }; boolean[] canEdit = new boolean [] { false }; public Class getColumnClass(int columnIndex) {
GPS Pgina 33
return types [columnIndex]; } public boolean isCellEditable(int rowIndex, int columnIndex) { return canEdit [columnIndex]; } }); jScrollPane1.setViewportView(jTableProvincia); jTableProvincia.getColumnModel().getColumn(0).setResizable(false); jTableDestino.setModel(new javax.swing.table.DefaultTableModel( new Object [][] { {null}, {null}, {null}, {null}, {null}, {null}, {null}, {null}, {null}, {null}, {null}, {null}, {null}, {null}, {null}, {null}, {null}, {null}, {null}, {null} }, new String [] { "DESTINO" } ){ Class[] types = new Class [] { java.lang.String.class }; boolean[] canEdit = new boolean [] { false }; public Class getColumnClass(int columnIndex) { return types [columnIndex]; } public boolean isCellEditable(int rowIndex, int columnIndex) { return canEdit [columnIndex]; }
GPS Pgina 34
}); jScrollPane2.setViewportView(jTableDestino); jTableDestino.getColumnModel().getColumn(0).setResizable(false); jTableIndice.setModel(new javax.swing.table.DefaultTableModel( new Object [][] { {null}, {null}, {null}, {null}, {null}, {null}, {null}, {null}, {null}, {null}, {null}, {null}, {null}, {null}, {null}, {null}, {null}, {null}, {null}, {null} }, new String [] { "N" } ){ Class[] types = new Class [] { java.lang.String.class }; boolean[] canEdit = new boolean [] { false }; public Class getColumnClass(int columnIndex) { return types [columnIndex]; } public boolean isCellEditable(int rowIndex, int columnIndex) { return canEdit [columnIndex]; } }); jScrollPane3.setViewportView(jTableIndice); jTableIndice.getColumnModel().getColumn(0).setResizable(false); jButton1.setText("Recorrer"); jButton1.addActionListener(new java.awt.event.ActionListener() {
GPS Pgina 35
public void actionPerformed(java.awt.event.ActionEvent evt) { jButton1ActionPerformed(evt); } }); javax.swing.GroupLayout jPanelProvinciaLayout = new javax.swing.GroupLayout(jPanelProvincia); jPanelProvincia.setLayout(jPanelProvinciaLayout); jPanelProvinciaLayout.setHorizontalGroup( jPanelProvinciaLayout.createParallelGroup(javax.swing.GroupLayout.Alignme nt.LEADING) .addGroup(jPanelProvinciaLayout.createSequentialGroup() .addGroup(jPanelProvinciaLayout.createParallelGroup(javax.swing.GroupLayo ut.Alignment.LEADING) .addGroup(jPanelProvinciaLayout.createSequentialGroup() .addContainerGap() .addComponent(jScrollPane3, javax.swing.GroupLayout.PREFERRED_SIZE, 33, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 124, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 124, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGroup(jPanelProvinciaLayout.createSequentialGroup() .addGap(125, 125, 125) .addComponent(jButton1))) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); jPanelProvinciaLayout.setVerticalGroup( jPanelProvinciaLayout.createParallelGroup(javax.swing.GroupLayout.Alignme nt.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanelProvinciaLayout.createSequentialGroup() .addContainerGap(21, Short.MAX_VALUE) .addGroup(jPanelProvinciaLayout.createParallelGroup(javax.swing.GroupLayo ut.Alignment.TRAILING) .addComponent(jScrollPane3, javax.swing.GroupLayout.PREFERRED_SIZE, 345, javax.swing.GroupLayout.PREFERRED_SIZE)
GPS Pgina 36
.addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 345, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 345, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATE D) .addComponent(jButton1) .addContainerGap()) ); jLPLienzo.setBackground(new java.awt.Color(230, 245, 249)); jLPLienzo.setBorder(javax.swing.BorderFactory.createEtchedBorder()); jLPLienzo.setFocusCycleRoot(true); jLabel2.setFont(new java.awt.Font("Tahoma", 1, 18)); jLabel2.setForeground(new java.awt.Color(0, 102, 153)); jLabel2.setText("GPS"); txtarea1.setColumns(20); txtarea1.setRows(5); jScrollPane4.setViewportView(txtarea1); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LE ADING) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LE ADING) .addGroup(layout.createSequentialGroup() .addGap(55, 55, 55) .addComponent(jLabel1) .addGap(253, 253, 253)) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() .addContainerGap(52, Short.MAX_VALUE) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LE ADING, false) .addComponent(jPanelSettings, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
GPS Pgina 37
.addComponent(jPanelProvincia, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jScrollPane4)) .addGap(18, 18, 18))) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() .addContainerGap() .addComponent(jLabel2) .addGap(184, 184, 184))) .addComponent(jLPLienzo, javax.swing.GroupLayout.PREFERRED_SIZE, 425, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(39, 39, 39)) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TR AILING, false) .addGroup(layout.createSequentialGroup() .addComponent(jLabel2) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(jLabel1) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jPanelProvincia, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(18, 18, 18) .addComponent(jPanelSettings, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATE D) .addComponent(jScrollPane4, javax.swing.GroupLayout.PREFERRED_SIZE, 88, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(3, 3, 3)) .addComponent(jLPLienzo, javax.swing.GroupLayout.PREFERRED_SIZE, 600, javax.swing.GroupLayout.PREFERRED_SIZE))
GPS Pgina 38
.addContainerGap(31, Short.MAX_VALUE)) ); pack(); }// </editor-fold> // <editor-fold defaultstate="collapsed" desc=" Poner las provincias en la tabla "> private void cargarTablas() { for(int i=0; i<provincia.length; i++) { jTableIndice.setValueAt(String.valueOf(i),i,0); jTableProvincia.setValueAt(provincia[i],i,0); jTableDestino.setValueAt(provincia[i],i,0); } } // </editor-fold> private void jCBMapaActionPerformed(java.awt.event.ActionEvent evt) { mostrarMapa=!mostrarMapa; lienzo.setFondo(mostrarMapa, ancash); lienzo.repaint(); } //para que prenda el foco con la propiedad time private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { desde =jTableProvincia.getSelectedRow(); hasta = jTableDestino.getSelectedRow(); if(desde!=-1 && hasta != -1) { recorrerCaminoMinimo(desde,hasta); timer = new Timer(); timer.purge(); timer.schedule(new Recorrer(),0,1500); } } private void jButtonMatrizActionPerformed(java.awt.event.ActionEvent evt) { Matriz ventanaMatriz = new Matriz(grafo); ventanaMatriz.setVisible(true); } class Recorrer extends TimerTask { @Override public void run() { if(!pila.Vacia()) { lienzo.setVisitado(Integer.parseInt(pila.getDatoTope())); lienzo.repaint(); pila.Sacar(); mensaje+=pila.getDatoTope() +" - "; }
GPS Pgina 39
else { timer.cancel(); } txtarea1.setText("Camino mas rapido para llegar de "+ provincia[desde]+ " a "+provincia[hasta]+":\n"+" "+desde+" - "+mensaje); } } public void dibujar() { lienzo.setFondo(mostrarMapa, ancash); jLPLienzo.add(lienzo, new Integer(2)); } private void recorrerCaminoMinimo(int desde, int hasta) { int caminoMinimo=grafo.MatrizCaminosMinimos()[desde][hasta]; int ultimo=hasta; pila.Meter(String.valueOf(ultimo)); while(ultimo!=desde) { for(int i=0; i<grafo.MatrizAdyacencia().length; i++) { if(grafo.MatrizAdyacencia()[i][ultimo]==1) { if(caminoMinimo - grafo.MatrizPesos()[i][ultimo]== grafo.MatrizCaminosMinimos()[desde][i]) { caminoMinimo = grafo.MatrizCaminosMinimos()[desde][i]; ultimo = i; pila.Meter(String.valueOf(ultimo)); } } } } } PAQUETE TAD: 1. GRAFO package TAD; public class Grafo { private int tipoGrafo=2; String mensajegrafo=""; private int grado[],gradoError[]; private int A[][]={ //Matriz de Adyacencia {0,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0}, {1,0,0,0,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0}, {1,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,1,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0}, {0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0}, {1,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0},
GPS Pgina 40
{1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {1,1,1,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,0,0,1,0,0}, {0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,1,0,0}, {0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,1,0,1,1,0,1,0,0,0,0,1,0,0}, {0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0}, {0,1,0,0,0,0,0,1,1,0,0,0,0,0,1,1,1,1,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0}, {0,1,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0}, {0,0,0,0,0,0,0,0,1,1,0,1,1,1,0,0,1,0,1,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0} }; private int W[][]={ //Matriz de Pesos {0,2,4,0,0,1,3,6,0,0,0,0,0,0,0,0,0,0,0,0}, {5,0,0,0,0,0,0,8,0,0,0,0,0,11,0,13,0,0,0,0}, {16,0,0,14,19,13,0,20,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,18,0,9,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0}, {0,0,2,1,0,7,4,0,0,0,0,0,0,0,0,0,0,0,0,0}, {3,0,33,0,41,0,13,0,0,0,0,0,0,0,0,0,0,0,0,0}, {1,0,0,0,7,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {8,3,29,0,0,0,0,0,14,36,8,15,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,17,0,9,0,0,0,3,0,0,0,5,0,0}, {0,0,0,0,0,0,0,14,2,0,0,1,0,0,0,0,0,7,0,0}, {0,0,0,9,0,0,0,2,0,0,0,7,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,18,0,19,7,0,6,0,0,0,0,1,0,0}, {0,0,0,0,0,0,0,0,0,0,0,25,0,0,0,0,0,9,0,0}, {0,22,0,0,0,0,0,47,6,0,0,0,0,0,28,4,8,3,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,8,9,0,0,0}, {0,20,0,0,0,0,0,0,0,0,0,0,0,4,8,0,9,0,23,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,8,7,5,0,3,1,0}, {0,0,0,0,0,0,0,0,7,32,0,14,2,17,0,0,1,0,5,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,7,4,0,1}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,272,0} };
public int[][] MatrizAdyacencia() { return A; } public int[][] MatrizPesos() { return W; } public int getTipoGrafo() { return tipoGrafo; }
GPS Pgina 41
public int[] grado() { grado = new int[A.length]; for(int i=0; i<A.length; i++){ int cont=0; for(int j=0; j<A[i].length; j++) { if(A[i][j]==1){ cont++; } } grado[i]=cont; } return grado; } public int[] gradoError() { gradoError = new int[A.length]; for(int i=0; i<A.length; i++) { int cont = 0; if(grado[i]<3){ gradoError[i]=grado[i]; }else { for(int j=0; j<A.length; j++) { if(A[i][j]==1) if(grado[j]>=grado[i]) cont++; } gradoError[i]=grado[i]+cont; } } return gradoError; } // <editor-fold defaultstate="collapsed" desc=" Algoritmo de Dijkstra "> public int[][] MatrizCaminosMinimos() { int Q[][] = new int [W.length][W.length]; //Matriz de Caminos Mnimos for(int i=0; i<W.length; i++){ for(int j=0; j<W[i].length; j++) { if(W[i][j]==0){ Q[i][j]=999; }else{ Q[i][j]=W[i][j]; } } } for(int k=0; k<A.length; k++) { for(int i=0; i<A.length; i++) { for(int j=0; j<A[i].length; j++) { if(getTipoGrafo()==2 && i==j){ Q[i][j]=0;
GPS Pgina 42
}else { Q[i][j]=Math.min(Q[i][j], Q[i][k]+Q[k][j]) ; } } } } return Q; } // </editor-fold> } 2. PILA package TAD; public class Pila { String strPila[]; int tope; public Pila(int tamPila) { crearPila(tamPila); } public void crearPila(int tamPila) { strPila = new String[tamPila]; setTope(-1); } public void setTope(int tope) { this.tope=tope; } public int getTope() { return tope; } public String Meter(String valor) { if(Llena()) { return "OVERFLOW"; } else { setTope(getTope()+1); strPila[getTope()]=valor; return "PILA"; } } public String Sacar() { if(Vacia()) { return "UNDERFLOW";
GPS Pgina 43
} else { setTope(getTope()-1); return "PILA"; } } public boolean Vacia() { if(getTope()==-1){ return true; }else{ return false; } } public boolean Llena() { if(getTope()==strPila.length-1) { return true; }else { return false; } } //devuelve el dato que se encuentra en la cima public String getDatoTope() { return strPila[getTope()]; } }
CONCLUSIONES
Se aprovecho la tecnologa actual como es la tecnologa java para el desarrollo de la la ruta mas corta con el sistema GPS
GPS Pgina 44
La importancia de este tema es para ayudar a agilizar la manera de llegar de un punto A hasta B buscando la ruta mas corta.
Desarrollar nuestro sentido de abstraccin de datos de las muestras para la ejecucin correcta y eficiente obtencin de resultados
Considerar que la tecnologa java es aplicable a muchos campos para demostrar un botn, es decir este proyecto de la prueba del GPS.
ENLACES DE INTERNET
http://www.asifunciona.com/electronica/af_gps/af_gps_8.htm http://eia.unex.es/EIIAA/GPS/GPS%20avanzado.pdf
GPS
Pgina 45