It is a traveling saleman problem with skills (some name it technician routing and scheduling problem). For your problem you require both, (i) an algorithm that calculates the least cost path from one location to another AND (ii) an algorithm that calculates the best sequence of locations given your start and end location and additional constraints such as skills and time windows etc..
(i) can be solved with for example Dijkstra, A*, Contraction Hierarchies
(ii) can be solved with Held-Karp, Branch and Bound/Cut [exactly] and Lin-Kernighan, or any other (meta)heuristic that are also applied to solve vehicle routing problems (VRP) [heuristically]
However, implementing these algorithms efficiently is not matter of days. Thus I would recommend you to use existing software. For (i) GraphHopper will be a perfect choice and for (ii) you can try jsprit with which you can model multiple engineers with skills as well as an arbitrary number of additional constraints easily. Both are written in Java and are Open Source.