Merge dev into branch
This commit is contained in:
commit
586692fffb
11 changed files with 345 additions and 595 deletions
|
@ -7,6 +7,7 @@ import java.awt.image.BufferedImage;
|
|||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.PrintStream;
|
||||
import java.util.List;
|
||||
import java.util.Properties;
|
||||
|
||||
import javax.imageio.ImageIO;
|
||||
|
@ -15,6 +16,11 @@ import javax.swing.JFrame;
|
|||
import javax.swing.JLabel;
|
||||
import javax.swing.WindowConstants;
|
||||
|
||||
import fr.u_paris.gla.project.itinerary.Finder;
|
||||
import fr.u_paris.gla.project.itinerary.Parse;
|
||||
import fr.u_paris.gla.project.itinerary.Path;
|
||||
import fr.u_paris.gla.project.itinerary.Stop;
|
||||
|
||||
/** Simple application model.
|
||||
*
|
||||
* @author Emmanuel Bigeon */
|
||||
|
@ -60,9 +66,31 @@ public class App {
|
|||
showLogo();
|
||||
}
|
||||
}
|
||||
}else{
|
||||
testRelease();
|
||||
}
|
||||
}
|
||||
|
||||
public static void testRelease(){
|
||||
Parse parse = new Parse();
|
||||
parse.parseFiles();
|
||||
Stop source = parse.getTmp().get("Porte d'Ivry").get(0);
|
||||
Stop destination = parse.getTmp().get("Châtelet").get(0);
|
||||
System.out.println("Itinéraire de Porte d'Ivry à Châtelet");
|
||||
List<Path> result = parse.getItinerary(source, destination, 43200);
|
||||
for(Path element : result){
|
||||
System.out.println(element.getCurrentStop());
|
||||
}
|
||||
System.out.println("°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°");
|
||||
System.out.println("Itinéraire de Porte d'Ivry à Châtelet");
|
||||
source = parse.getTmp().get("Saint-Jacques").get(0);
|
||||
destination = parse.getTmp().get("Porte d'Ivry").get(0);
|
||||
result = parse.getItinerary(source, destination, 43200);
|
||||
for(Path element : result){
|
||||
System.out.println(element.getCurrentStop());
|
||||
}
|
||||
|
||||
}
|
||||
/** @param out the output stream */
|
||||
public static void printAppInfos(PrintStream out) {
|
||||
Properties props = readApplicationProperties();
|
||||
|
|
|
@ -1,324 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<form xmlns="http://www.intellij.com/uidesigner/form/" version="1" bind-to-class="fr.u_paris.gla.project.gui.View">
|
||||
<grid id="27dc6" binding="MainPanel" layout-manager="GridLayoutManager" row-count="2" column-count="2" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
|
||||
<margin top="0" left="0" bottom="0" right="0"/>
|
||||
<constraints>
|
||||
<xy x="20" y="20" width="853" height="600"/>
|
||||
</constraints>
|
||||
<properties>
|
||||
<background color="-12828863"/>
|
||||
<focusCycleRoot value="true"/>
|
||||
</properties>
|
||||
<border type="none"/>
|
||||
<children>
|
||||
<grid id="15a59" binding="Cardpanel" layout-manager="CardLayout" hgap="0" vgap="0" show="24ba7">
|
||||
<constraints>
|
||||
<grid row="1" column="1" row-span="1" col-span="1" vsize-policy="7" hsize-policy="7" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
<properties>
|
||||
<background color="-720907"/>
|
||||
<doubleBuffered value="true"/>
|
||||
<enabled value="true"/>
|
||||
<foreground color="-12495218"/>
|
||||
</properties>
|
||||
<border type="none"/>
|
||||
<children>
|
||||
<grid id="24ba7" binding="HomePanel" layout-manager="GridLayoutManager" row-count="4" column-count="4" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
|
||||
<margin top="0" left="0" bottom="0" right="0"/>
|
||||
<constraints>
|
||||
<card name="Card1"/>
|
||||
</constraints>
|
||||
<properties>
|
||||
<background color="-8683389"/>
|
||||
<enabled value="false"/>
|
||||
<foreground color="-10699971"/>
|
||||
</properties>
|
||||
<border type="none"/>
|
||||
<children>
|
||||
<component id="3cb9b" class="javax.swing.JTextField" binding="textField1" default-binding="true">
|
||||
<constraints>
|
||||
<grid row="2" column="1" row-span="1" col-span="1" vsize-policy="0" hsize-policy="6" anchor="8" fill="1" indent="1" use-parent-layout="false">
|
||||
<preferred-size width="150" height="-1"/>
|
||||
</grid>
|
||||
</constraints>
|
||||
<properties/>
|
||||
</component>
|
||||
<component id="a2307" class="javax.swing.JButton" binding="searchButton" default-binding="true">
|
||||
<constraints>
|
||||
<grid row="2" column="2" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="0" fill="1" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
<properties>
|
||||
<label value="Search"/>
|
||||
<text value="Search"/>
|
||||
<verifyInputWhenFocusTarget value="false"/>
|
||||
</properties>
|
||||
</component>
|
||||
<component id="177f" class="javax.swing.JLabel">
|
||||
<constraints>
|
||||
<grid row="1" column="1" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="0" fill="0" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
<properties>
|
||||
<text value="Search stop"/>
|
||||
</properties>
|
||||
</component>
|
||||
<vspacer id="8b80">
|
||||
<constraints>
|
||||
<grid row="0" column="1" row-span="1" col-span="1" vsize-policy="6" hsize-policy="1" anchor="0" fill="2" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
</vspacer>
|
||||
<vspacer id="b3e57">
|
||||
<constraints>
|
||||
<grid row="3" column="1" row-span="1" col-span="1" vsize-policy="6" hsize-policy="1" anchor="0" fill="2" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
</vspacer>
|
||||
<hspacer id="5107e">
|
||||
<constraints>
|
||||
<grid row="2" column="0" row-span="1" col-span="1" vsize-policy="1" hsize-policy="6" anchor="0" fill="1" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
</hspacer>
|
||||
<hspacer id="f414">
|
||||
<constraints>
|
||||
<grid row="2" column="3" row-span="1" col-span="1" vsize-policy="1" hsize-policy="6" anchor="0" fill="1" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
</hspacer>
|
||||
</children>
|
||||
</grid>
|
||||
<grid id="184ef" binding="NetworkPanel" layout-manager="GridLayoutManager" row-count="3" column-count="1" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
|
||||
<margin top="0" left="0" bottom="0" right="0"/>
|
||||
<constraints>
|
||||
<card name="Card2"/>
|
||||
</constraints>
|
||||
<properties>
|
||||
<background color="-2708071"/>
|
||||
<doubleBuffered value="true"/>
|
||||
<enabled value="true"/>
|
||||
</properties>
|
||||
<border type="none"/>
|
||||
<children>
|
||||
<component id="89720" class="javax.swing.JLabel">
|
||||
<constraints>
|
||||
<grid row="0" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="4" anchor="0" fill="0" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
<properties>
|
||||
<labelFor value="44153"/>
|
||||
<text value="Network"/>
|
||||
</properties>
|
||||
</component>
|
||||
<grid id="7f3c9" binding="stationsPanel" layout-manager="GridLayoutManager" row-count="3" column-count="1" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
|
||||
<margin top="0" left="0" bottom="0" right="0"/>
|
||||
<constraints>
|
||||
<grid row="1" column="0" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
<properties/>
|
||||
<border type="none"/>
|
||||
<children>
|
||||
<component id="35d9e" class="javax.swing.JLabel" binding="departText">
|
||||
<constraints>
|
||||
<grid row="0" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
<properties>
|
||||
<text value="Departure:"/>
|
||||
</properties>
|
||||
</component>
|
||||
<vspacer id="f3812">
|
||||
<constraints>
|
||||
<grid row="2" column="0" row-span="1" col-span="1" vsize-policy="6" hsize-policy="1" anchor="0" fill="2" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
</vspacer>
|
||||
<component id="33aa0" class="javax.swing.JLabel" binding="arrText">
|
||||
<constraints>
|
||||
<grid row="1" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
<properties>
|
||||
<text value="Arrival:"/>
|
||||
</properties>
|
||||
</component>
|
||||
</children>
|
||||
</grid>
|
||||
<scrollpane id="44153" binding="mypane">
|
||||
<constraints>
|
||||
<grid row="2" column="0" row-span="1" col-span="1" vsize-policy="7" hsize-policy="7" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
<properties/>
|
||||
<border type="none"/>
|
||||
<children>
|
||||
<component id="2046e" class="javax.swing.JTable" binding="table">
|
||||
<constraints/>
|
||||
<properties/>
|
||||
</component>
|
||||
</children>
|
||||
</scrollpane>
|
||||
</children>
|
||||
</grid>
|
||||
<grid id="dfb19" binding="FavoritesPanel" layout-manager="GridLayoutManager" row-count="1" column-count="1" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
|
||||
<margin top="0" left="0" bottom="0" right="0"/>
|
||||
<constraints>
|
||||
<card name="Card3"/>
|
||||
</constraints>
|
||||
<properties>
|
||||
<background color="-5520023"/>
|
||||
<doubleBuffered value="true"/>
|
||||
<enabled value="true"/>
|
||||
</properties>
|
||||
<border type="none"/>
|
||||
<children>
|
||||
<component id="131d5" class="javax.swing.JLabel">
|
||||
<constraints>
|
||||
<grid row="0" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="0" fill="0" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
<properties>
|
||||
<text value="Favorites"/>
|
||||
</properties>
|
||||
</component>
|
||||
</children>
|
||||
</grid>
|
||||
<grid id="30e2e" binding="ItineraryPanel" layout-manager="GridLayoutManager" row-count="1" column-count="1" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
|
||||
<margin top="0" left="0" bottom="0" right="0"/>
|
||||
<constraints>
|
||||
<card name="Card4"/>
|
||||
</constraints>
|
||||
<properties/>
|
||||
<border type="none"/>
|
||||
<children/>
|
||||
</grid>
|
||||
<grid id="5ab99" binding="LinesPanel" layout-manager="GridLayoutManager" row-count="3" column-count="1" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
|
||||
<margin top="10" left="10" bottom="10" right="10"/>
|
||||
<constraints>
|
||||
<card name="Card5"/>
|
||||
</constraints>
|
||||
<properties>
|
||||
<background color="-406200"/>
|
||||
</properties>
|
||||
<border type="none"/>
|
||||
<children>
|
||||
<component id="32efa" class="javax.swing.JLabel" binding="lineLabel">
|
||||
<constraints>
|
||||
<grid row="0" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="0" fill="0" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
<properties>
|
||||
<font size="20" style="1"/>
|
||||
<text value="Show line"/>
|
||||
</properties>
|
||||
</component>
|
||||
<component id="4836e" class="javax.swing.JComboBox" binding="linesComboBox">
|
||||
<constraints>
|
||||
<grid row="1" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="2" anchor="0" fill="0" indent="0" use-parent-layout="false">
|
||||
<preferred-size width="200" height="50"/>
|
||||
</grid>
|
||||
</constraints>
|
||||
<properties/>
|
||||
</component>
|
||||
<component id="2aedb" class="javax.swing.JButton" binding="showLineButton">
|
||||
<constraints>
|
||||
<grid row="2" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="1" fill="0" indent="0" use-parent-layout="false">
|
||||
<preferred-size width="78" height="30"/>
|
||||
</grid>
|
||||
</constraints>
|
||||
<properties>
|
||||
<text value="Open"/>
|
||||
</properties>
|
||||
</component>
|
||||
</children>
|
||||
</grid>
|
||||
</children>
|
||||
</grid>
|
||||
<grid id="67039" class="javax.swing.JMenuBar" layout-manager="GridLayoutManager" row-count="11" column-count="1" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
|
||||
<margin top="0" left="0" bottom="0" right="0"/>
|
||||
<constraints>
|
||||
<grid row="0" column="0" row-span="2" col-span="1" vsize-policy="3" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
<properties/>
|
||||
<border type="none"/>
|
||||
<children>
|
||||
<component id="10ffa" class="javax.swing.JMenuItem" binding="Home">
|
||||
<constraints>
|
||||
<grid row="1" column="0" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="0" fill="0" indent="0" use-parent-layout="false">
|
||||
<preferred-size width="102" height="20"/>
|
||||
</grid>
|
||||
</constraints>
|
||||
<properties>
|
||||
<hideActionText value="false"/>
|
||||
<text value="Home"/>
|
||||
</properties>
|
||||
</component>
|
||||
<component id="43d5e" class="javax.swing.JMenuItem" binding="Network">
|
||||
<constraints>
|
||||
<grid row="3" column="0" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="0" fill="0" indent="0" use-parent-layout="false">
|
||||
<preferred-size width="102" height="20"/>
|
||||
</grid>
|
||||
</constraints>
|
||||
<properties>
|
||||
<text value="Network"/>
|
||||
</properties>
|
||||
</component>
|
||||
<component id="9da5d" class="javax.swing.JMenuItem" binding="Favorites">
|
||||
<constraints>
|
||||
<grid row="5" column="0" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="0" fill="0" indent="0" use-parent-layout="false">
|
||||
<preferred-size width="102" height="20"/>
|
||||
</grid>
|
||||
</constraints>
|
||||
<properties>
|
||||
<text value="Favorites"/>
|
||||
</properties>
|
||||
</component>
|
||||
<vspacer id="402a8">
|
||||
<constraints>
|
||||
<grid row="2" column="0" row-span="1" col-span="1" vsize-policy="6" hsize-policy="1" anchor="0" fill="2" indent="0" use-parent-layout="false">
|
||||
<preferred-size width="102" height="14"/>
|
||||
</grid>
|
||||
</constraints>
|
||||
</vspacer>
|
||||
<vspacer id="15816">
|
||||
<constraints>
|
||||
<grid row="4" column="0" row-span="1" col-span="1" vsize-policy="6" hsize-policy="1" anchor="0" fill="2" indent="0" use-parent-layout="false">
|
||||
<preferred-size width="102" height="14"/>
|
||||
</grid>
|
||||
</constraints>
|
||||
</vspacer>
|
||||
<vspacer id="dae0c">
|
||||
<constraints>
|
||||
<grid row="0" column="0" row-span="1" col-span="1" vsize-policy="6" hsize-policy="1" anchor="0" fill="2" indent="0" use-parent-layout="false">
|
||||
<preferred-size width="102" height="14"/>
|
||||
</grid>
|
||||
</constraints>
|
||||
</vspacer>
|
||||
<component id="664f9" class="javax.swing.JMenuItem" binding="Itinerary">
|
||||
<constraints>
|
||||
<grid row="7" column="0" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="0" fill="0" indent="0" use-parent-layout="false">
|
||||
<preferred-size width="102" height="20"/>
|
||||
</grid>
|
||||
</constraints>
|
||||
<properties>
|
||||
<text value="Itinerary"/>
|
||||
</properties>
|
||||
</component>
|
||||
<vspacer id="936ed">
|
||||
<constraints>
|
||||
<grid row="6" column="0" row-span="1" col-span="1" vsize-policy="6" hsize-policy="1" anchor="0" fill="2" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
</vspacer>
|
||||
<vspacer id="c45a6">
|
||||
<constraints>
|
||||
<grid row="8" column="0" row-span="1" col-span="1" vsize-policy="6" hsize-policy="1" anchor="0" fill="2" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
</vspacer>
|
||||
<component id="b44bf" class="javax.swing.JMenuItem" binding="Lines">
|
||||
<constraints>
|
||||
<grid row="9" column="0" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="0" fill="0" indent="0" use-parent-layout="false">
|
||||
<preferred-size width="102" height="20"/>
|
||||
</grid>
|
||||
</constraints>
|
||||
<properties>
|
||||
<text value="Lines"/>
|
||||
</properties>
|
||||
</component>
|
||||
<vspacer id="1e08c">
|
||||
<constraints>
|
||||
<grid row="10" column="0" row-span="1" col-span="1" vsize-policy="6" hsize-policy="1" anchor="0" fill="2" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
</vspacer>
|
||||
</children>
|
||||
</grid>
|
||||
</children>
|
||||
</grid>
|
||||
</form>
|
|
@ -3,6 +3,7 @@ package fr.u_paris.gla.project.gui;
|
|||
import fr.u_paris.gla.project.idfm.CSVImageProvider;
|
||||
import fr.u_paris.gla.project.idfm.IDFMNetworkExtractor;
|
||||
import fr.u_paris.gla.project.idfm.ImagePair;
|
||||
import fr.u_paris.gla.project.itinerary.Path;
|
||||
import fr.u_paris.gla.project.itinerary.Stop;
|
||||
|
||||
import javax.swing.*;
|
||||
|
@ -21,50 +22,146 @@ public class View extends JFrame {
|
|||
private static final Logger LOGGER = Logger
|
||||
.getLogger(IDFMNetworkExtractor.class.getName());
|
||||
|
||||
private JPanel Cardpanel;
|
||||
private JPanel CardPanel;
|
||||
private JMenuItem Home;
|
||||
private JMenuItem Network;
|
||||
private JMenuItem Favorites;
|
||||
private JPanel NetworkPanel;
|
||||
private JPanel FavoritesPanel;
|
||||
private JTextField textField1;
|
||||
private JButton searchButton;
|
||||
|
||||
private JTextField TextLocation;
|
||||
private JButton ButtonLocation;
|
||||
private JPanel HomePanel;
|
||||
private JPanel MainPanel;
|
||||
private DefaultTableModel model;
|
||||
private DefaultTableModel modelStops;
|
||||
|
||||
private JTable table;
|
||||
private JTable tableStops;
|
||||
|
||||
private JScrollPane mypane;
|
||||
private JTable tableItinerary;
|
||||
|
||||
private DefaultTableModel modelItinerary;
|
||||
|
||||
private JScrollPane paneStops;
|
||||
|
||||
private JScrollPane paneItinerary;
|
||||
private JPanel ItineraryPanel;
|
||||
private JMenuItem Itinerary;
|
||||
private JPanel stationsPanel;
|
||||
private JLabel departText;
|
||||
private JLabel arrText;
|
||||
|
||||
private JMenuItem Lines;
|
||||
private JPanel LinesPanel;
|
||||
private JLabel lineLabel;
|
||||
private JComboBox linesComboBox;
|
||||
private JButton showLineButton;
|
||||
|
||||
private JTextField TextCoord;
|
||||
private JButton ButtonCoord;
|
||||
private JPanel SearchCoordPanel;
|
||||
private JPanel SearchLocationPanel;
|
||||
private JLabel NetworkLabel;
|
||||
private JLabel FavLabel;
|
||||
private JMenuBar ButtonBar;
|
||||
|
||||
private ArrayList<Stop> StopList;
|
||||
|
||||
private String departureCur;
|
||||
|
||||
private String arrivalCur;
|
||||
|
||||
private String searchCur;
|
||||
private String searchLocation;
|
||||
|
||||
private String searchCoord;
|
||||
|
||||
private ArrayList<Stop> searchRes;
|
||||
|
||||
private ArrayList<Path> searchResPath;
|
||||
|
||||
private int count = 0;
|
||||
|
||||
|
||||
public View(ArrayList<Stop> s) throws HeadlessException {
|
||||
table = new JTable();
|
||||
model = (DefaultTableModel) table.getModel();
|
||||
model.setColumnCount(2);
|
||||
model.setColumnIdentifiers(new Object[]{"Line", "Stop"});
|
||||
MainPanel = new JPanel();
|
||||
GridLayout MainLayout = new GridLayout(1, 2, 50, 0);
|
||||
MainPanel.setLayout(MainLayout);
|
||||
CardLayout CardLay = new CardLayout();
|
||||
CardPanel = new JPanel(CardLay);
|
||||
|
||||
HomePanel = new JPanel();
|
||||
CardPanel.add(HomePanel);
|
||||
SearchCoordPanel = new JPanel();
|
||||
SearchLocationPanel = new JPanel();
|
||||
GridLayout SearchLayout = new GridLayout(1, 2);
|
||||
HomePanel.setLayout(SearchLayout);
|
||||
HomePanel.add(SearchCoordPanel);
|
||||
HomePanel.add(SearchLocationPanel);
|
||||
GridLayout SearchCoordLayout = new GridLayout(2, 1);
|
||||
GridLayout SearchLocationLayout = new GridLayout(2, 1);
|
||||
SearchCoordPanel.setLayout(SearchCoordLayout);
|
||||
SearchLocationPanel.setLayout(SearchLocationLayout);
|
||||
TextCoord = new JTextField();
|
||||
ButtonCoord = new JButton("Look for coords");
|
||||
SearchCoordPanel.add(TextCoord);
|
||||
SearchCoordPanel.add(ButtonCoord);
|
||||
TextLocation = new JTextField();
|
||||
ButtonLocation = new JButton("Look for string");
|
||||
SearchLocationPanel.add(TextLocation);
|
||||
SearchLocationPanel.add(ButtonLocation);
|
||||
|
||||
NetworkPanel = new JPanel();
|
||||
CardPanel.add(NetworkPanel);
|
||||
GridLayout NetworkLayout = new GridLayout(3, 1);
|
||||
NetworkPanel.setLayout(NetworkLayout);
|
||||
NetworkLabel = new JLabel("Network");
|
||||
NetworkPanel.add(NetworkLabel);
|
||||
stationsPanel = new JPanel();
|
||||
NetworkPanel.add(stationsPanel);
|
||||
GridLayout StationsLayout = new GridLayout(2, 1);
|
||||
departText = new JLabel("Départ: ");
|
||||
arrText = new JLabel("Arivée: ");
|
||||
stationsPanel.setLayout(StationsLayout);
|
||||
stationsPanel.add(departText);
|
||||
stationsPanel.add(arrText);
|
||||
paneStops = new JScrollPane();
|
||||
tableStops = new JTable();
|
||||
paneStops.add(tableStops);
|
||||
NetworkPanel.add(paneStops);
|
||||
|
||||
|
||||
|
||||
ItineraryPanel = new JPanel();
|
||||
CardPanel.add(ItineraryPanel);
|
||||
GridLayout ItineraryLayout = new GridLayout(2, 1);
|
||||
ItineraryPanel.setLayout(ItineraryLayout);
|
||||
paneItinerary = new JScrollPane();
|
||||
tableItinerary = new JTable();
|
||||
paneItinerary.add(tableItinerary);
|
||||
ItineraryPanel.add(paneItinerary);
|
||||
|
||||
|
||||
ButtonBar = new JMenuBar();
|
||||
GridLayout ButtonLayout = new GridLayout(3, 1);
|
||||
ButtonBar.setLayout(ButtonLayout);
|
||||
Home = new JMenuItem("Home");
|
||||
ButtonBar.add(Home);
|
||||
Network = new JMenuItem("Network");
|
||||
ButtonBar.add(Network);
|
||||
|
||||
Itinerary = new JMenuItem("Itinerary");
|
||||
ButtonBar.add(Itinerary);
|
||||
ButtonBar.setPreferredSize(new Dimension(50, 500));
|
||||
|
||||
MainPanel.add(ButtonBar);
|
||||
MainPanel.add(CardPanel);
|
||||
|
||||
|
||||
modelStops = (DefaultTableModel) tableStops.getModel();
|
||||
modelStops.setColumnCount(2);
|
||||
modelStops.setColumnIdentifiers(new Object[]{"Line", "Stop"});
|
||||
|
||||
modelItinerary = (DefaultTableModel) tableItinerary.getModel();
|
||||
modelItinerary.setColumnCount(3);
|
||||
modelItinerary.setColumnIdentifiers(new Object[]{"Line", "Stop", "Time"});
|
||||
this.StopList = s;
|
||||
|
||||
setContentPane(MainPanel);
|
||||
|
@ -77,40 +174,42 @@ public class View extends JFrame {
|
|||
Home.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
Cardpanel.removeAll();
|
||||
Cardpanel.add(HomePanel);
|
||||
Cardpanel.repaint();
|
||||
Cardpanel.revalidate();
|
||||
CardPanel.removeAll();
|
||||
CardPanel.add(HomePanel);
|
||||
CardPanel.repaint();
|
||||
CardPanel.revalidate();
|
||||
}
|
||||
});
|
||||
|
||||
Network.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
showSearch(s);
|
||||
Cardpanel.removeAll();
|
||||
Cardpanel.add(NetworkPanel);
|
||||
LoadSearchResult(s, modelStops);
|
||||
CardPanel.removeAll();
|
||||
CardPanel.add(NetworkPanel);
|
||||
|
||||
Cardpanel.repaint();
|
||||
Cardpanel.revalidate();
|
||||
CardPanel.repaint();
|
||||
CardPanel.revalidate();
|
||||
}
|
||||
});
|
||||
|
||||
Favorites.addActionListener(new ActionListener() {
|
||||
Itinerary.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
Cardpanel.removeAll();
|
||||
Cardpanel.add(FavoritesPanel);
|
||||
Cardpanel.repaint();
|
||||
Cardpanel.revalidate();
|
||||
LoadSearchResultItinerary(searchResPath, modelItinerary);
|
||||
CardPanel.removeAll();
|
||||
CardPanel.add(ItineraryPanel);
|
||||
|
||||
CardPanel.repaint();
|
||||
CardPanel.revalidate();
|
||||
}
|
||||
});
|
||||
|
||||
Lines.addActionListener(e -> {
|
||||
Cardpanel.removeAll();
|
||||
Cardpanel.add(LinesPanel);
|
||||
Cardpanel.repaint();
|
||||
Cardpanel.revalidate();
|
||||
CardPanel.removeAll();
|
||||
CardPanel.add(LinesPanel);
|
||||
CardPanel.repaint();
|
||||
CardPanel.revalidate();
|
||||
});
|
||||
|
||||
CSVImageProvider.getLineImageMap().forEach(p -> linesComboBox.addItem(p));
|
||||
|
@ -119,49 +218,66 @@ public class View extends JFrame {
|
|||
openWebpage(item.getValue());
|
||||
});
|
||||
|
||||
textField1.addKeyListener(new KeyAdapter() {
|
||||
|
||||
|
||||
TextLocation.addKeyListener(new KeyAdapter() {
|
||||
@Override
|
||||
public void keyReleased(KeyEvent e) {
|
||||
super.keyReleased(e);
|
||||
if (e.getKeyCode() == KeyEvent.VK_ENTER) {
|
||||
|
||||
searchCur = textField1.getText();
|
||||
showSearch(s);
|
||||
System.out.println("Enter key released with text " + searchCur);
|
||||
Cardpanel.removeAll();
|
||||
Cardpanel.add(NetworkPanel);
|
||||
searchLocation = TextLocation.getText();
|
||||
LoadSearchResult(s, modelStops);
|
||||
System.out.println("Enter key released with text " + searchLocation);
|
||||
CardPanel.removeAll();
|
||||
CardPanel.add(NetworkPanel);
|
||||
|
||||
Cardpanel.repaint();
|
||||
Cardpanel.revalidate();
|
||||
CardPanel.repaint();
|
||||
CardPanel.revalidate();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
searchButton.addActionListener(new ActionListener() {
|
||||
ButtonLocation.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
Cardpanel.removeAll();
|
||||
searchCur = textField1.getText();
|
||||
showSearch(s);
|
||||
System.out.println("search button clicked with text " + searchCur);
|
||||
Cardpanel.add(NetworkPanel);
|
||||
CardPanel.removeAll();
|
||||
searchLocation = TextLocation.getText();
|
||||
LoadSearchResult(s, modelStops);
|
||||
System.out.println("search location clicked with text " + searchLocation);
|
||||
CardPanel.add(NetworkPanel);
|
||||
|
||||
Cardpanel.repaint();
|
||||
Cardpanel.revalidate();
|
||||
CardPanel.repaint();
|
||||
CardPanel.revalidate();
|
||||
}
|
||||
});
|
||||
table.addMouseListener(new MouseAdapter() {
|
||||
|
||||
ButtonCoord.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
CardPanel.removeAll();
|
||||
searchCoord = TextCoord.getText();
|
||||
LoadSearchResult(s, modelStops);
|
||||
System.out.println("search coord clicked with text " + searchCoord);
|
||||
CardPanel.add(NetworkPanel);
|
||||
|
||||
CardPanel.repaint();
|
||||
CardPanel.revalidate();
|
||||
}
|
||||
});
|
||||
tableStops.addMouseListener(new MouseAdapter() {
|
||||
@Override
|
||||
public void mouseClicked(MouseEvent e) {
|
||||
super.mouseClicked(e);
|
||||
System.out.println("MouseClick: " + e.getX() + ";" + e.getY());
|
||||
showOptionsDialog(table, e.getX(), e.getY());
|
||||
showOptionsDialog(tableStops, e.getX(), e.getY());
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
mypane.addMouseListener(new MouseAdapter() {
|
||||
|
||||
paneStops.addMouseListener(new MouseAdapter() {
|
||||
@Override
|
||||
public void mouseClicked(MouseEvent e) {
|
||||
super.mouseClicked(e);
|
||||
|
@ -203,15 +319,11 @@ public class View extends JFrame {
|
|||
View v = new View(s);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
public void showSearch(ArrayList<Stop> stops) {
|
||||
public void LoadSearchResult(ArrayList<Stop> stops, DefaultTableModel model) {
|
||||
// Clear existing rows from the table
|
||||
|
||||
int cols = model.getColumnCount();
|
||||
model.setRowCount(0);
|
||||
model.setColumnCount(2);
|
||||
|
||||
model.setColumnCount(cols);
|
||||
|
||||
// Add new rows based on the search results
|
||||
count = 0;
|
||||
|
@ -232,32 +344,61 @@ public class View extends JFrame {
|
|||
|
||||
System.out.println(count);
|
||||
|
||||
table.revalidate();
|
||||
table.repaint();
|
||||
|
||||
mypane.setViewportView(table);
|
||||
mypane.revalidate();
|
||||
mypane.repaint();
|
||||
|
||||
tableStops.revalidate();
|
||||
tableStops.repaint();
|
||||
paneStops.setViewportView(tableStops);
|
||||
paneStops.revalidate();
|
||||
paneStops.repaint();
|
||||
NetworkPanel.revalidate();
|
||||
NetworkPanel.repaint();
|
||||
|
||||
|
||||
this.displayTableValues();
|
||||
|
||||
}
|
||||
|
||||
public void displayTableValues() {
|
||||
TableModel mod = table.getModel();
|
||||
for (int row = 0; row < mod.getRowCount(); row++) {
|
||||
for (int column = 0; column < mod.getColumnCount(); column++) {
|
||||
System.out.print(mod.getValueAt(row, column).toString() + " ");
|
||||
}
|
||||
System.out.print(";");
|
||||
public void LoadSearchResultItinerary(ArrayList<Path> paths, DefaultTableModel model){
|
||||
// Clear existing rows from the table
|
||||
int cols = model.getColumnCount();
|
||||
model.setRowCount(0);
|
||||
model.setColumnCount(cols);
|
||||
|
||||
|
||||
// Add new rows based on the search results
|
||||
count = 0;
|
||||
Path last = null;
|
||||
for (Path path : paths) {
|
||||
// Add a row to the table with Stop's line in the first column and Stop's name in the second column
|
||||
model.addRow(new Object[]{path.getLine(), path.getCurrentStop(), path.getStartTime()});
|
||||
|
||||
++count;
|
||||
last = path;
|
||||
}
|
||||
if (last != null) model.addRow(new Object[]{last.getLine(), last.getNextStop()});
|
||||
|
||||
System.out.println(paths);
|
||||
for (int i = 0; i < model.getRowCount(); i++) {
|
||||
for (int j = 0; j < model.getColumnCount(); j++) {
|
||||
System.out.print("valeur at coord " + i +";" + j +": " + model.getValueAt(i, j) + "\t");
|
||||
}
|
||||
System.out.println();
|
||||
}
|
||||
System.out.println(count);
|
||||
|
||||
tableItinerary.revalidate();
|
||||
tableItinerary.repaint();
|
||||
paneItinerary.setViewportView(tableItinerary);
|
||||
paneItinerary.revalidate();
|
||||
paneItinerary.repaint();
|
||||
ItineraryPanel.revalidate();
|
||||
ItineraryPanel.repaint();
|
||||
this.displayTableValues(model);
|
||||
}
|
||||
|
||||
public void displayTableValues(TableModel mod) {
|
||||
for (int row = 0; row < mod.getRowCount(); row++) {
|
||||
for (int column = 0; column < mod.getColumnCount(); column++) {
|
||||
if (mod.getValueAt(row, column) != null) System.out.print(mod.getValueAt(row, column).toString() + " ");
|
||||
}
|
||||
System.out.print(";");
|
||||
}
|
||||
System.out.println();
|
||||
}
|
||||
|
||||
private void openWebpage(URI uri) {
|
||||
|
|
|
@ -21,6 +21,8 @@ public class CSVSchedulesProvider {
|
|||
put("Subway", new int[]{4, 2, 6,3,3,4});
|
||||
}};
|
||||
|
||||
|
||||
|
||||
// Time between 2 passages for the transports with a new type we don't know yet
|
||||
private static int DEFAULT_TIMING = 6;
|
||||
private static final NumberFormat MINUTES_SECOND_FORMATTER = NumberFormat
|
||||
|
|
|
@ -23,6 +23,23 @@ import fr.u_paris.gla.project.utils.GPS;
|
|||
* CSV Stream Provider class
|
||||
*/
|
||||
public final class CSVStreamProvider {
|
||||
|
||||
private static final HashMap<String, Double> two_acceleration_distance_by_type = new HashMap<String, Double>(){{
|
||||
put("Bus", 0.1);
|
||||
put("Funicular", 0.1);
|
||||
put("Tram", 0.1);
|
||||
put("Rail", 0.2);
|
||||
put("Subway", 0.1);
|
||||
}};
|
||||
|
||||
private static final HashMap<String, Double> max_speed_by_type = new HashMap<String, Double>(){{
|
||||
put("Bus", 10.0);
|
||||
put("Funicular", 5.0);
|
||||
put("Tram", 20.0);
|
||||
put("Rail", 50.0);
|
||||
put("Subway", 30.0);
|
||||
}};
|
||||
|
||||
/**
|
||||
* Formatter from numbers into GPS Coordinates
|
||||
*/
|
||||
|
@ -201,7 +218,7 @@ public final class CSVStreamProvider {
|
|||
this.line[NetworkFormat.DISTANCE_INDEX] = NumberFormat.getInstance(Locale.ENGLISH)
|
||||
.format(distance);
|
||||
this.line[NetworkFormat.DURATION_INDEX] = formatTime(
|
||||
(long) Math.ceil(distanceToTime(distance) * SECONDS_IN_HOURS));
|
||||
(long) Math.ceil(distanceToTime(distance,this.traceType) * SECONDS_IN_HOURS));
|
||||
int bifurcation = this.lineSegments.get(this.start).size() - 1;
|
||||
this.line[NetworkFormat.VARIANT_INDEX] = Integer
|
||||
.toString(bifurcation);
|
||||
|
@ -231,6 +248,18 @@ public final class CSVStreamProvider {
|
|||
MINUTES_SECOND_FORMATTER.format(time / SECONDS_IN_MINUTES), MINUTES_SECOND_FORMATTER.format(time % SECONDS_IN_MINUTES));
|
||||
}
|
||||
|
||||
// /** A tool method to give a delay to go through a certain distance.
|
||||
// * <p>
|
||||
// * This is a model with an linear acceleration and deceleration periods and a
|
||||
// * constant speed in between.
|
||||
// *
|
||||
// * @param distance the distance (in km)
|
||||
// * @return the duration of the trip (in hours) */
|
||||
// private static double distanceToTime(double distance) {
|
||||
// return Math.max(0, distance - TWO_ACCELERATION_DISTANCE) / MAX_SPEED
|
||||
// + Math.pow(Math.min(distance, TWO_ACCELERATION_DISTANCE) / MAX_SPEED, 2);
|
||||
// }
|
||||
|
||||
/** A tool method to give a delay to go through a certain distance.
|
||||
* <p>
|
||||
* This is a model with an linear acceleration and deceleration periods and a
|
||||
|
@ -238,9 +267,11 @@ public final class CSVStreamProvider {
|
|||
*
|
||||
* @param distance the distance (in km)
|
||||
* @return the duration of the trip (in hours) */
|
||||
private static double distanceToTime(double distance) {
|
||||
return Math.max(0, distance - TWO_ACCELERATION_DISTANCE) / MAX_SPEED
|
||||
+ Math.pow(Math.min(distance, TWO_ACCELERATION_DISTANCE) / MAX_SPEED, 2);
|
||||
private static double distanceToTime(double distance, String type) {
|
||||
Double max_speed = max_speed_by_type.get(type);
|
||||
Double two_acc_distance = two_acceleration_distance_by_type.get(type);
|
||||
return Math.max(0, distance - two_acc_distance) / max_speed
|
||||
+ Math.pow(Math.min(distance, two_acc_distance) / max_speed, 2);
|
||||
}
|
||||
|
||||
private void fillTransports(int bif) {
|
||||
|
|
|
@ -18,6 +18,7 @@ import java.util.logging.Level;
|
|||
import java.util.logging.Logger;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
|
||||
/**
|
||||
* Code of an extractor for the data from IDF mobilite.
|
||||
*
|
||||
|
@ -98,142 +99,6 @@ public class IDFMNetworkExtractor {
|
|||
// Well named constants
|
||||
private static final double QUARTER_KILOMETER = .25;
|
||||
|
||||
/**
|
||||
* Main entry point for the extractor of IDF mobilité data into a network as
|
||||
* defined by this application.
|
||||
*
|
||||
* @param args the arguments (expected one for the destination file)
|
||||
*/
|
||||
public static void main(String[] args) {
|
||||
|
||||
if (args.length != 2) {
|
||||
LOGGER.severe("Invalid command line. Missing target files.");
|
||||
return;
|
||||
}
|
||||
|
||||
Map<String, TraceEntry> traces = new HashMap<>();
|
||||
try {
|
||||
CSVTools.readCSVFromFile(TRACE_FILE_DOWNLOADED_NAME,
|
||||
(String[] line) -> addLine(line, traces));
|
||||
} catch (IOException e) {
|
||||
LOGGER.log(Level.SEVERE, "Error while reading the line paths", e);
|
||||
}
|
||||
|
||||
List<StopEntry> stops = new ArrayList<>(traces.size() * GUESS_STOPS_BY_LINE);
|
||||
try {
|
||||
CSVTools.readCSVFromFile(STOPS_FILE_DOWNLOADED_NAME,
|
||||
(String[] line) -> addStop(line, traces, stops));
|
||||
} catch (IOException e) {
|
||||
LOGGER.log(Level.SEVERE, "Error while reading the stops", e);
|
||||
}
|
||||
|
||||
cleanTraces(traces);
|
||||
|
||||
Map<String, Transport> transports = new HashMap<>();
|
||||
CSVStreamProvider provider = new CSVStreamProvider(traces.values().iterator(), transports);
|
||||
|
||||
// Write into args[0]
|
||||
try {
|
||||
CSVTools.writeCSVToFile(args[0], Stream.iterate(provider.next(),
|
||||
t -> provider.hasNext(), t -> provider.next()));
|
||||
} catch (IOException e) {
|
||||
LOGGER.log(Level.SEVERE, e,
|
||||
() -> MessageFormat.format("Could not write in file {0}", args[0]));
|
||||
}
|
||||
|
||||
/*CSVStreamSchedulesProvider providerschedules = new CSVStreamSchedulesProvider(traces.values().iterator());
|
||||
|
||||
// TraceEntry tmp = traces.values().iterator().next();
|
||||
// tmp.getTerminus()
|
||||
// .forEach(m -> LOGGER.log(Level.INFO, m));
|
||||
|
||||
// Write into args[1]
|
||||
try {
|
||||
CSVTools.writeCSVToFile(args[1], Stream.iterate(providerschedules.next(),
|
||||
t -> providerschedules.hasNext(), t -> providerschedules.next()));
|
||||
} catch (IOException e) {
|
||||
LOGGER.log(Level.SEVERE, e,
|
||||
() -> MessageFormat.format("Could not write in file {0}", args[1]));
|
||||
}*/
|
||||
// System.out.println("****** END ******");
|
||||
// System.out.println(transports.size());
|
||||
// System.out.println(transports.get("IDFM:C01371").name);
|
||||
// System.out.println(transports.get("IDFM:C02060").name);
|
||||
// Transport ligne_1 = transports.get("IDFM:C01371");
|
||||
// Transport ligne_7 = transports.get("IDFM:C01377");
|
||||
// Transport rerd = transports.get("IDFM:C01728");
|
||||
// Transport b54b = transports.get("IDFM:C00940");
|
||||
|
||||
|
||||
// System.out.println("****** AFFICHAGE LIGNE ******");
|
||||
|
||||
// Stop maisonBlanche = ligne_7.stopsMap.get("Maison Blanche");
|
||||
// System.out.println(maisonBlanche.name);
|
||||
|
||||
// for (BifStop nextEntry : maisonBlanche.connected.values()) {
|
||||
// System.out.println(nextEntry.bifurc+ nextEntry.stop.name);
|
||||
// }
|
||||
// System.out.println("****** AFFICHAGE LIGNE ******");
|
||||
|
||||
// Stop corientin = ligne_7.stopsMap.get("Corentin Cariou");
|
||||
// System.out.println(corientin.name);
|
||||
|
||||
// for (BifStop nextEntry : corientin.connected.values()) {
|
||||
// System.out.println(nextEntry.bifurc+ nextEntry.stop.name);
|
||||
// }
|
||||
// System.out.println("***************************");
|
||||
// System.out.println("****** AFFICHAGE Description ******");
|
||||
// System.out.println(traces.get("IDFM:C01377").descriptions);
|
||||
// System.out.println("****** AFFICHAGE Description False ******");
|
||||
// System.out.println(ligne_7.descriptions);
|
||||
// System.out.println("****************** Build la path ***********************");
|
||||
// System.out.println(ligne_7.type);
|
||||
// System.out.println(rerd.type);
|
||||
// ligne_7.buildBifurcation();
|
||||
// rerd.buildBifurcation();
|
||||
// System.out.println("******************Derniere description ***********************");
|
||||
// System.out.println(ligne_7.descriptions);
|
||||
// System.out.println("******************Description 54B ************************");
|
||||
// b54b.buildBifurcation();
|
||||
// System.out.println(b54b.descriptions);
|
||||
System.out.println("******************Building bifurcations ************************");
|
||||
long startTime = System.currentTimeMillis();
|
||||
|
||||
for (Transport entry : transports.values()) {
|
||||
entry.buildBifurcationOptimzed();
|
||||
}
|
||||
|
||||
long endTime = System.currentTimeMillis();
|
||||
long tempsPasse = endTime - startTime;
|
||||
|
||||
long minutes = (tempsPasse / 1000) / 60;
|
||||
long seconds = (tempsPasse / 1000) % 60;
|
||||
long milliseconds = tempsPasse % 1000;
|
||||
|
||||
System.out.println("Temps écoulé : " + minutes + " minutess, " + seconds + " secndes et " + milliseconds + " millis");
|
||||
|
||||
System.out.println("******************Fin Building bifurcations ************************");
|
||||
|
||||
CSVSchedulesProvider providerschedules = new CSVSchedulesProvider(transports.values().iterator());
|
||||
try {
|
||||
CSVTools.writeCSVToFile(args[1], Stream.iterate(providerschedules.next(),
|
||||
t -> providerschedules.hasNext(), t -> providerschedules.next()));
|
||||
} catch (IOException e) {
|
||||
LOGGER.log(Level.SEVERE, e,
|
||||
() -> MessageFormat.format("Could not write in file {0}", args[1]));
|
||||
}
|
||||
|
||||
CSVImageProvider providerimage = new CSVImageProvider(transports.values().iterator());
|
||||
String imageCSV = "image.csv";
|
||||
try {
|
||||
CSVTools.writeCSVToFile(imageCSV, Stream.iterate(providerimage.next(),
|
||||
t -> providerimage.hasNext(), t -> providerimage.next()));
|
||||
} catch (IOException e) {
|
||||
LOGGER.log(Level.SEVERE, e,
|
||||
() -> MessageFormat.format("Could not write in file {0}", imageCSV));
|
||||
}
|
||||
}
|
||||
|
||||
public static boolean checkFileExistence(String filePath) {
|
||||
File file = new File(filePath);
|
||||
if (file.exists()) {
|
||||
|
@ -245,7 +110,7 @@ public class IDFMNetworkExtractor {
|
|||
}
|
||||
}
|
||||
|
||||
public static void builFiles() {
|
||||
public static void buildFiles() {
|
||||
|
||||
if (checkFileExistence("./"+HOURS_FILE_NAME) && checkFileExistence("./"+TRACE_FILE_NAME)) {
|
||||
LOGGER.severe("Files already exists.");
|
||||
|
|
|
@ -1,23 +1,43 @@
|
|||
package fr.u_paris.gla.project.itinerary;
|
||||
|
||||
import fr.u_paris.gla.project.utils.GPS;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
|
||||
public class Finder {
|
||||
|
||||
private Graph graph;
|
||||
|
||||
public Finder(Graph graph) {
|
||||
this.graph = graph;
|
||||
}
|
||||
|
||||
public List<Path> findPath(double from_x, double from_y, double to_x, double to_y, double startTime) {
|
||||
Stop fromNode = new Stop("", "tmp_from", from_x, from_y);
|
||||
Stop toNode = new Stop("", "tmp_to", to_x, to_y);
|
||||
|
||||
for (Stop node : graph.getNodes()) {
|
||||
double from_dst = GPS.distance(from_x, from_y, node.getLatitude(), node.getLongitude());
|
||||
double to_dst = GPS.distance(to_x, to_y, node.getLatitude(), node.getLongitude());
|
||||
Connection from_c = new Connection(node, "", from_dst, (int) ((from_dst * 1000) / Parse.WALK_SPEED));
|
||||
Connection to_c = new Connection(toNode, "", to_dst, (int) ((to_dst * 1000) / Parse.WALK_SPEED));
|
||||
graph.addConnection(fromNode, from_c);
|
||||
graph.addConnection(node, to_c);
|
||||
}
|
||||
graph.addNode(fromNode);
|
||||
graph.addNode(toNode);
|
||||
|
||||
List<Path> res = findPath(fromNode, toNode, startTime);
|
||||
return res;
|
||||
}
|
||||
|
||||
/**
|
||||
* return a path from startNode to goalNode using A* algorithm
|
||||
* @param startNode
|
||||
* @param goalNode
|
||||
*/
|
||||
public List<Path> findPath(Stop startNode, Stop goalNode, double startTime) {
|
||||
|
||||
PriorityQueue<Stop> openSet = new PriorityQueue<>(Comparator.comparingDouble(GraphNode::getF));
|
||||
PriorityQueue<Stop> openSet = new PriorityQueue<>(Comparator.comparingDouble(Stop::getF));
|
||||
HashSet<Stop> closedSet = new HashSet<>();
|
||||
HashMap<Stop, Path> cameFrom = new HashMap<>();
|
||||
HashMap<Stop, Double> gScore = new HashMap<>();
|
||||
|
@ -111,6 +131,5 @@ public class Finder {
|
|||
node.setF(newF);
|
||||
openSet.add(node);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
package fr.u_paris.gla.project.itinerary;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
|
@ -25,4 +25,25 @@ public class Graph{
|
|||
public Map<Stop, Set<Connection>> getConnections() {
|
||||
return connections;
|
||||
}
|
||||
|
||||
public void addNode(Stop s) {
|
||||
nodes.add(s);
|
||||
}
|
||||
|
||||
public void addConnection(Stop stop, Connection con) {
|
||||
Set<Connection> currentConnections = connections.get(stop);
|
||||
if (currentConnections == null) {
|
||||
HashSet<Connection> set = new HashSet<>();
|
||||
set.add(con);
|
||||
connections.put(stop, set);
|
||||
}
|
||||
else {
|
||||
currentConnections.add(con);
|
||||
}
|
||||
}
|
||||
|
||||
public void removeNode(Stop s) {
|
||||
nodes.remove(s);
|
||||
connections.remove(s);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,14 +0,0 @@
|
|||
package fr.u_paris.gla.project.itinerary;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
public interface GraphNode {
|
||||
int getId();
|
||||
double getHeuristicCost(Stop goalNode);
|
||||
|
||||
Set<Stop> getNeighbors();
|
||||
double getCost(Stop neighbor);
|
||||
double getF();
|
||||
void setF(double value);
|
||||
}
|
|
@ -9,7 +9,7 @@ import java.util.*;
|
|||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
public class ItineraryCalculator {
|
||||
public class Parse {
|
||||
private static final Logger LOGGER = Logger
|
||||
.getLogger(IDFMNetworkExtractor.class.getName());
|
||||
|
||||
|
@ -42,7 +42,11 @@ public class ItineraryCalculator {
|
|||
private static final int STOP_TIME = 30;
|
||||
|
||||
//Walking speed in m/s
|
||||
private static final double WALK_SPEED = 1.;
|
||||
public static final double WALK_SPEED = 1.;
|
||||
|
||||
private HashSet<Stop> nodes = new HashSet<>();
|
||||
private HashMap<Stop, Set<Connection>> connections = new HashMap<>();
|
||||
private HashMap<String, ArrayList<Stop>> tmp = new HashMap<>();
|
||||
|
||||
/**
|
||||
* Returns the coordinates from a String to a double array:
|
||||
|
@ -55,6 +59,9 @@ public class ItineraryCalculator {
|
|||
return new double[] {Double.parseDouble(stringCoords[0]), Double.parseDouble(stringCoords[1])};
|
||||
}
|
||||
|
||||
public HashMap<String, ArrayList<Stop>> getTmp(){
|
||||
return tmp;
|
||||
}
|
||||
/**
|
||||
* Searchs for a stop with the same name and GPS coordinates in the graph, and creates it if non existant
|
||||
* @param nodes a graph of the stops
|
||||
|
@ -204,17 +211,12 @@ public class ItineraryCalculator {
|
|||
}
|
||||
}
|
||||
|
||||
public static void main(String[] args){
|
||||
if (args.length != 0) {
|
||||
LOGGER.severe("Invalid command line. Target file names are in the main file for now.");
|
||||
return;
|
||||
}
|
||||
//IDFMNetworkExtractor.builFiles();
|
||||
public void parseFiles(){
|
||||
|
||||
IDFMNetworkExtractor.buildFiles();
|
||||
|
||||
try {
|
||||
HashSet<Stop> nodes = new HashSet<>();
|
||||
HashMap<Stop, Set<Connection>> connections = new HashMap<>();
|
||||
HashMap<String, ArrayList<Stop>> tmp = new HashMap<>();
|
||||
|
||||
CSVTools.readCSVFromFile(TRACE_FILE_NAME,
|
||||
(String[] line) -> addLine(line, nodes, tmp, connections));
|
||||
|
||||
|
@ -227,32 +229,16 @@ public class ItineraryCalculator {
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
Stop porteivry = tmp.get("Porte d'Ivry").get(0);
|
||||
Stop repu = tmp.get("République").get(0);
|
||||
|
||||
Graph graph = new Graph(nodes, connections);
|
||||
int cpt = 0;
|
||||
for (Map.Entry<Stop, Set<Connection>> entry : graph.getConnections().entrySet()) {
|
||||
if (entry.getValue() == null) cpt +=1;
|
||||
}
|
||||
Stop garenord = tmp.get("Gare du Nord").get(0);
|
||||
|
||||
Stop chatelet = tmp.get("Châtelet").get(0);
|
||||
//System.out.println(graph.getConnections(garenord));
|
||||
//System.out.println(cpt);
|
||||
//System.out.println(graph.getConnections(porteivry));
|
||||
Finder finder = new Finder(graph);
|
||||
|
||||
List<Path> res = finder.findPath(porteivry, chatelet, 43200);
|
||||
for (Path element : res) {
|
||||
System.out.println(element.getCurrentStop());
|
||||
}
|
||||
|
||||
} catch (IOException e) {
|
||||
LOGGER.log(Level.SEVERE, "Error while reading the line paths", e);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public List<Path> getItinerary(Stop src, Stop dst, double startTime ){
|
||||
Graph graph = new Graph(nodes, connections);
|
||||
Finder finder = new Finder(graph);
|
||||
return finder.findPath(src, dst, startTime);
|
||||
|
||||
}
|
||||
}
|
|
@ -3,7 +3,7 @@ package fr.u_paris.gla.project.itinerary;
|
|||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
public class Stop implements GraphNode {
|
||||
public class Stop {
|
||||
// The total number of stops
|
||||
private static int counter = 0;
|
||||
|
||||
|
@ -41,27 +41,22 @@ public class Stop implements GraphNode {
|
|||
'}';
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getId(){
|
||||
return id;
|
||||
}
|
||||
|
||||
@Override
|
||||
public double getHeuristicCost(Stop goalNode) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<Stop> getNeighbors() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public double getCost(Stop neighbor) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public double getF() {
|
||||
return f;
|
||||
}
|
||||
|
|
Reference in a new issue