josuakrause / busvis Goto Github PK
View Code? Open in Web Editor NEWVisualization of the Konstanz bus transportation system
License: MIT License
Visualization of the Konstanz bus transportation system
License: MIT License
Draw edges
Maybe this can be solved by using another Layout.
A controller class to control the different visualizations.
Exporting a jar with maven and adjusting resource loading to handle in jar resources
Secondary selection toggles selection instead of erasing old selection
Use a priority queue in the routing algorithm to get early results.
The routing algorithm should also use the walking distance between stations, e.g. from the Google Directions API.
A positioner that represents the length of edges correctly while ignoring the total distance to the start node
On full BusStationManager::maxTimeHours(24) and with the csv data there are loops in the routes found by BusStation::routeTo
The now view can't be chosen any more, it runs into an infinite loop:
at infovis.ctrl.Controller.setTime(Controller.java:282)
at infovis.ctrl.Controller.setFastForwardMode(Controller.java:467)
at infovis.ctrl.Controller.setTime(Controller.java:282)
at infovis.ctrl.Controller.setFastForwardMode(Controller.java:467)
at infovis.ctrl.Controller.setTime(Controller.java:282)
at infovis.ctrl.Controller.setFastForwardMode(Controller.java:467)
Seems to to introduced by #52.
Draw concentric rings to visualize the travel time
Adjust the angle of a node towards the reference such that clutter from the nodes is reduced.
Highlight the edge that are used to get to a station.
Exception:
Exception in thread "AWT-EventQueue-0" java.lang.IllegalStateException: line not highlighted
at infovis.data.EdgeMatrix$UndirectedEdge.getNumberOfHighlighted(EdgeMatrix.java:109)
at infovis.busvis.BusvisDrawer.drawSecondarySelected(BusvisDrawer.java:231)
at infovis.layout.AbstractLayouter.draw(AbstractLayouter.java:130)
at infovis.gui.Canvas.paintComponent(Canvas.java:287)
at javax.swing.JComponent.paint(JComponent.java:1029)
at javax.swing.JComponent.paintChildren(JComponent.java:862)
at javax.swing.JSplitPane.paintChildren(JSplitPane.java:1030)
at javax.swing.JComponent.paint(JComponent.java:1038)
at javax.swing.JComponent.paintChildren(JComponent.java:862)
at javax.swing.JComponent.paint(JComponent.java:1038)
at javax.swing.JComponent.paintToOffscreen(JComponent.java:5124)
at javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(RepaintManager.java:1491)
at javax.swing.RepaintManager$PaintManager.paint(RepaintManager.java:1422)
at javax.swing.RepaintManager.paint(RepaintManager.java:1225)
at javax.swing.JComponent._paintImmediately(JComponent.java:5072)
at javax.swing.JComponent.paintImmediately(JComponent.java:4882)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:786)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:714)
at javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:694)
at javax.swing.RepaintManager.access$700(RepaintManager.java:41)
at javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1636)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:646)
at java.awt.EventQueue.access$000(EventQueue.java:84)
at java.awt.EventQueue$1.run(EventQueue.java:607)
at java.awt.EventQueue$1.run(EventQueue.java:605)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:616)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
When the zooming is greater than one begin to show more labels. (BusvisDrawer#drawLabel(Graphics2D, Context, LayoutNode, boolean, String) )
After resizing the overview window takes as much space as its get which looks odd.
Maybe with labels when hovering them, showing their names.
Cleaning up code and renaming / refactoring some classes. May brake changes of others, so make sure you commit your current changes now and work with the after milestone version tomorrow.
also:
fixes #25
The clock should be more prominent especially in the case of fast forwarding (sliders are greyed-out and the "label-clock" is very small).
Keep the layouting object alive and iterate in the background to refined the layout.
Batik throws random exceptions that get not caught and are print to std-err. The application still works fine.
Visualize the schematic plan
When selecting other values in the control panel the bus station has to be reselected first to actually start the changes.
Labels should avoid each other while having a connection to the original node.
It should be possible to increase the speed of the current real-time mode, e.g. to one minute per second.
Remove all unused classes (like EmbedderTest, SpringEmbedder or Test) or provide a way to use its functionality.
Timer does not terminate correctly. May lead to the application not terminating correctly either.
Animate nodes in the circular embedder
Being able to select with the right mouse button in the overview. And show the secondary selection.
Show the selected route with additional information. (continues #17)
Maybe drop batik and as much libraries as possible for that and reduce the size to an android size.
Make a feasible gui with sliders etc
Improve fast forward gui elements, adding spinner to the slider and labels. (#28)
.
After the focus changed several times, the nodes drift away from their default position. This leads to central stations like Sternenplatz ending up on the edge of the graph.
Node positions are incorrect after a few stations were selected.
Describe how csv files should contain the necessary data for bus plans to give the possibility to add alternatives to the Konstanz bus system.
Remove the node overlaps in the edge based layout somehow.
Position nodes based on original position and radius
The current walking restriction can be tricked by walking again from another bus station.
At 0:00h from 'Spanierstraße' to 'Klinikum Konstanz' and a maximal walking time of 10min
the routing algorithm returns the following path:
Spanierstraße -> Zähringerplatz (walking, 10min)
Zähringerplatz -> Klinikum Konstanz (walking, 9min)
which contradicts the restriction to 10min walking
Makes for smoother animation.
Get rid of static access to bus stations
When changing the hour of max walk it should be possible to generate min/max walking times (0:00h and 1:59h) when minutes are not already correctly set.
Draw edge from the center, such that highlighted lines are centered.
When a non reachable node is selected the JVM crashes.
.
When starting to drag, then zoom, and the translate the viewport jumps to an undefined location. This happens in the main visualization and the overview.
The routing algorithm is broken and should be fixed. From #14:
Because only one "shortest" path to each station is considered, quicker routes that avoid line changes aren't always taken:
, 00:00 ---1--- 00:01.
/ \
(A) 00:01 ---2---> 00:02 (B) 00:02 ---2---> 00:03 (C)
\ /
` 00:03 ---3--- 00:04´
The optimal route (when change time is greater than zero) would be Line 2, but because (B) is reached quicker by Line 1, it is taken instead.
The GUI elements that are used for choosing the time are not very intuitive. Changing them to more "common" elements.
Move secondary selection in controller
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.