Extract graph data from map image I have a map (in image format) describing the power grid of a continent.

Power plants have flags next to them, indicating their type (hydro, gas, oil, etc.). The power lines have a color indicating their tensions (different voltages). The cities are marked as black dots.

Here's a piece of the map, courtesy of the ENTSO-E consortium


Full maps here. Things get much more complex in populated area.

As you can see, the power lines are often overlapping each other. Moreover they are not simple straight lines. Two cities (points) can be connected by a broken line, with no middle point in between.

I need to turn that map image into a graph (dataset). The broken lines may be straightened and have their full length marked as the weight of the arc. Or they may be handled by inserting middle points.

I'd like to automatize as much work as I can, but, since the map is so complex, I understand I'll probably need some manual tool to do the final pass.

What would you suggest?

I think finding the power-plants should be possible using an automatic tool, then corrections and addition of arcs could be done using an assisted manual tool.

EDIT: perhaps this is something that can be done with a plugin for GIS software? If programming is involved, my favorite languages are Java and Python. I know C++ too.
Start by getting rid of the background (Mathematica example):


  map = Import["http://i.stack.imgur.com/HYtbo.jpg"]
  
  fg = ImageAdjust[map, {1.0, 1.0}]




Then use a graph extraction tool like NEFI. If you want to do it all in Mathematica, that's possible too. You might want to add another preprocessing step to decompose the graph by edge type if you want to treat them separately, like you said.