public ArrayList<Line2D.Double> getLines(JXMapViewer map, Point2D mousePos) {
        ArrayList<Line2D.Double> lines = new ArrayList<Line2D.Double>();
        if (p1 != null) {

            // Initialize variables
            Point2D pt1 = null;
            Point2D pt2 = null;
            Point2D middle = null;
            double length = 10;

            // Set pt1 and pt2
            if (p2 == null && p1 != null) {
                pt1 = map.getTileFactory().geoToPixel(p1.getGeoposition(), map.getZoom());
                pt2 = map.getTileFactory().geoToPixel(map.convertPointToGeoPosition(mousePos), map.getZoom());
            } else {
                pt1 = map.getTileFactory().geoToPixel(p1.getGeoposition(), map.getZoom());
                pt2 = map.getTileFactory().geoToPixel(p2.getGeoposition(), map.getZoom());
            }

            // Get red line
            Line2D.Double line = new Line2D.Double((int) pt1.getX(), (int) pt1.getY(), (int) pt2.getX(), (int) pt2.getY());
            lines.add(line);

            // Set middle point
            if (pt1.getX() == pt2.getX()) {
                middle = new Point2D.Double(pt1.getX(), (pt1.getY() + pt2.getY()) / 2);
            } else if (pt1.getY() == pt2.getY()) {
                middle = new Point2D.Double((pt1.getX() + pt2.getX()) / 2, pt1.getY());
            } else {
                middle = new Point2D.Double((pt1.getX() + pt2.getX()) / 2, (pt1.getY() + pt2.getY()) / 2);
            }

            // Get length of Line
            double difX = (double) pt1.getX() - (double) pt2.getX();
            double difY = (double) pt1.getY() - (double) pt2.getY();

            // Initialize variables
            Point2D arrowLineX = null;
            Point2D arrowLineY = null;

            // Calculate angle for drawing red arrow
            if (difY == 0) {
                double deltaX = Math.sqrt((length * length) / 2);
                if (difX < 0) {
                    deltaX = deltaX * -1;
                }
                double deltaY = deltaX;
                arrowLineX = new Point2D.Double(middle.getX() + deltaX, middle.getY() + deltaY);
                arrowLineY = new Point2D.Double(middle.getX() + deltaY, middle.getY() - deltaX);
            } else {
                double angle = Math.atan(difX / difY);
                double arrowAngle = angle - 95;
                double deltaX = length * Math.sin(arrowAngle);
                double deltaY = length * Math.cos(arrowAngle);

                if (difY > 0) {
                    arrowLineX = new Point2D.Double(middle.getX() + deltaX, middle.getY() + deltaY);
                    arrowLineY = new Point2D.Double(middle.getX() + deltaY, middle.getY() - deltaX);
                } else {
                    arrowLineX = new Point2D.Double(middle.getX() - deltaY, middle.getY() + deltaX);
                    arrowLineY = new Point2D.Double(middle.getX() - deltaX, middle.getY() - deltaY);
                }
            }

            // Get red arrow
            Line2D.Double pijltje1 = new Line2D.Double((int) middle.getX(), (int) middle.getY(), (int) arrowLineY.getX(), (int) arrowLineY.getY());
            Line2D.Double pijltje2 = new Line2D.Double((int) middle.getX(), (int) middle.getY(), (int) arrowLineX.getX(), (int) arrowLineX.getY());
            lines.add(pijltje1);
            lines.add(pijltje2);
        }

        // Return red line + arrow
        return lines;
    }